我有一个基于XSD的XML。 xsd是
<xs:complexType name="objectOneType" mixed="true">
<xs:sequence>
<xs:element ref="nestedObject" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="attribute" type="xs:string" use="optional"/>
</xs:complexType>
现在,当我收到这个XML
<xmlresponse>
<xmlrequest>
<objectone attribute="changed" />
</xmlrequest>
<xmlsrc>
<objectone attribute="changed" />
</xmlsrc>
</xmlresponse>
在此XML中,对象 OBjECTONE 没有名为 NESTEDOBJECT 的对象。它现在不是忽略它,而是在 OBJECTONE 中插入一个空对象,该对象是 STRING 类型。所以当我的代码尝试处理 OBJECTONE 时,假设它有一个对象类型 NESTEDOBJECT 。它抛出了一个classcast异常。
有什么想法吗?
P.S:杀死我sicne我正在使用JAXB 1.2
答案 0 :(得分:2)
关键是注释mixed="true"
。使用此注释结构,如
<content>
<italic>Italic</italic> ist not <underline>underline</underline>
</content>
是可能的。 JAXB内部创建了一个List<Object> insideContent
,它将包含大写的类:String
,Italic
,String
,Underline
和String
。我假设您输出的XML类似于Marshaller.JAXB_FORMATTED_OUTPUT
,它为格式化输出插入换行符和制表符。你可以:
<content><italic>This</italic> is a <underline>test</underline></content>
不应该有前导或尾随String
mixed="true"
instanceOf
List<Object>
测试您的子课程