有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javajaxb创建空对象

我有一个基于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中插入一个对象,该对象为字符串类型。因此,当我的代码试图处理OBJECTONE时,假设它有一个对象类型NESTEDOBJECT。它抛出classcast异常

有什么想法吗

附言:杀了我吧,因为我正在使用JAXB1.2


共 (1) 个答案

  1. # 1 楼答案

    关键是注释mixed="true"。使用此注释,结构如下

    <content>
      <italic>Italic</italic> ist not <underline>underline</underline>
    </content>
    

    这是可能的。JAXB在内部创建一个List<Object> insideContent,它将位于以下大写类中:StringItalicStringUnderlineString。我假设您用类似Marshaller.JAXB_FORMATTED_OUTPUT的东西输出XML,它为格式的输出插入了换行符和制表符。您可以:

    • 不要使用格式化输出:<content><italic>This</italic> is a <underline>test</underline></content>不应具有前导或尾随String
    • 不要使用mixed="true"
    • 在迭代List<Object>时,使用instanceOf测试子类