Java 如何(取消)整理子类中根元素的值

Java 如何(取消)整理子类中根元素的值,java,xml,jaxb,Java,Xml,Jaxb,我正在使用JAXB将一个复杂对象从XML解组为Java。XML中有问题的部分如下所示: <product> <!-- SNIP --> <keywords> <keyword optionalAttribute="attrValue">Value</keyword> <keyword>Another value</keyword> </keywords

我正在使用JAXB将一个复杂对象从XML解组为Java。XML中有问题的部分如下所示:

<product>
    <!-- SNIP -->
    <keywords>
        <keyword optionalAttribute="attrValue">Value</keyword>
        <keyword>Another value</keyword>
    </keywords>
</product>
ProductKeyword.keyword
字段需要保存
元素的值,该元素是子类的根元素
@XmlMixed
似乎不会诱使JAXB尝试将任何内容解组到该字段中

我相信我需要
@XmlValue
,但该注释不能用于子类(除非可能使用
@xmltransive
注释超类)

有人能提出一个解决这个问题的办法吗

限制条件:

  • 我无法更改XML的格式

  • 我无法摆脱
    模型
    超类(持久性所需)

  • 我无法修改超类(从外部库)

非约束条件:

  • 如果需要,我可以向父类或子类添加额外的字段

  • 如果我可以以任何形式或通过任何方式将关键字的值输入到类中,我可以做任何需要的后处理,以使其处于正确的位置/格式

  • 它不一定要漂亮


    • 我在代码中输入了trid,您可以再试一次! 在Maven或下载jar中添加了此依赖项

       <dependency>
                  <groupId>org.eclipse.persistence</groupId>
                  <artifactId>org.eclipse.persistence.moxy</artifactId>
                  <version>2.5.0-RC1</version>
                  <exclusions>
                      <exclusion>
                          <groupId>org.eclipse.persistence</groupId>
                          <artifactId>commonj.sdo</artifactId>
                      </exclusion>
                  </exclusions>
              </dependency>
      

      这里需要getter/setter吗?我想是的。我应该解释一下公众的特点/缺少能手和二传手。我们使用游戏!在后台进行封装和显式getter/setter的框架只用于需要实现自定义行为的地方。不确定您的意思是一般需要还是JAXB注释需要,但是所有其他JABX注释放在字段中都可以正常工作。请检查。似乎您需要
      @xmlacessortype(xmlacesstype.PROPERTY)
      谢谢您的建议。尝试过之后,当我尝试处理文件时,它会导致许多
      IllegalAnnotationException
      s。我也非常怀疑如果我能让它工作起来会有什么不同:如前所述,其他所有
      @Xml*
      注释在放置到字段时都能按预期工作,如果没有这一点,那么如果
      @XmlMixed
      是唯一对它敏感的注释,那就很奇怪了。我相信这会解决我的问题,但在我有机会尝试之前,我被告知此时不要担心解决这个特定问题。不过,谢谢你。
      @XmlRootElement(name = "keyword")
      @XmlAccessorType(XmlAccessType.NONE)
      public class ProductKeyword extends Model {
      
          @XmlAttribute(name = "optionalAttribute")
          public String optionalAttribute;
      
          @XmlMixed
          public String keyword;
      
      }
      
       <dependency>
                  <groupId>org.eclipse.persistence</groupId>
                  <artifactId>org.eclipse.persistence.moxy</artifactId>
                  <version>2.5.0-RC1</version>
                  <exclusions>
                      <exclusion>
                          <groupId>org.eclipse.persistence</groupId>
                          <artifactId>commonj.sdo</artifactId>
                      </exclusion>
                  </exclusions>
              </dependency>
      
      public static void main(String[] args) throws JAXBException, IOException {
              JAXBContext context = JAXBContextFactory.createContext(new Class[]{Product.class}, new HashMap());
              Unmarshaller unmarshaller = context.createUnmarshaller();
              InputStream is = new ClassPathResource("stand.xml").getInputStream();
              Product product= (Product) unmarshaller.unmarshal(is);
              System.out.println(product);
          }