【问题标题】:JAXB -EclipseLink MOXy- Nested Composite objects not getting marshalled correctlyJAXB -EclipseLink MOXy- 嵌套复合对象未正确编组
【发布时间】:2013-08-26 16:08:03
【问题描述】:

映射 java 类是从以下 schema usign XJC 工具生成的。 XML 架构是:

 <xs:complexType name="configurations">
     <xs:sequence>
     <xs:element name="configuration" maxOccurs="unbounded" minOccurs="0">
         <xs:complexType>
           <xs:sequence>
           <xs:element name="variation" maxOccurs="unbounded" minOccurs="0">
            <xs:complexType>                                
             <xs:attribute name="charValueName" type="LimitedString30" />             
             <xs:attribute name="charValueDesc" type="LimitedString40" />
             <xs:attribute type="xs:decimal" name="price" />        
             <xs:attribute type="xs:string" name="pricingUnit" />
            </xs:complexType>
           </xs:element>
         </xs:sequence>
         <xs:attribute type="xs:string" name="charName" />
       </xs:complexType>
 </xs:element>
 </xs:sequence>
 </xs:complexType>***

使用 JAXB 编组的 XML 是:

  <configurations>
  <configuration charName="XYZ">
   <variation>Configurations$Configuration$Variation@44d8783e</variation>
   <variation>Configurations$Configuration$Variation@5fbe51c1</variation>
 </configuration>
 </configurations>

如果您查看上面的“variation”元素,它没有任何属性,如“charValueName”、“charValueDesc”等。知道为什么吗?使用 JAXB 是否对嵌套元素的深度有任何限制?

【问题讨论】:

  • 您使用的是哪个 JAXB 实现和版本?
  • 布莱斯,我使用的是 JAXB 2.0。
  • JAXB 2.0 是具体操作版本(参见:jcp.org/en/jsr/detail?id=222)。有诸如 RI (jaxb.java.net) 和 EclipseLink MOXy (eclipse.org/eclipselink/moxy.php) 之类的实现。您可以在JAXBContext 上调用getClass() 查找提供程序,确定版本取决于提供程序。
  • 抱歉,我没有完整阅读您的问题。我们正在使用 Moxy,(javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory)。
  • 这与 MOXy 没有自动获取引用的类有关(您可以在自己创建 JAXBContext 时提供它)。我相信这个问题已在 EclipseLink 2.3.3 中得到解决。

标签: java xml jaxb eclipselink moxy


【解决方案1】:

注意:我是EclipseLink JAXB (MOXy) 领导,也是JAXB (JSR-222) 专家组的成员

如果 MOXy 不知道正在编组的类,则可能会在 MOXy 中出现此问题。该对象最终会根据其toString() 方法进行编组。您确定您正在使用 EclipseLink 2.3.1,我相信您遇到了以下在 EclipseLink 2.3.2 中修复的错误:

截至今天(2013 年 8 月 26 日),EclipseLink 的当前版本为 2.5.0,可从以下位置下载:

【讨论】:

    猜你喜欢
    • 2016-02-01
    • 2020-09-19
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多