Java 生成的XSD不会解组XML
我有一个XML字符串,无法使用提供的XSD在java中解组对象。因此,我尝试使用一个在线工具(www.freeformatter.com/xsd generator.html)生成一个有效的xsd,但得到了相同的错误。我不明白我看到了什么 以下是XML:Java 生成的XSD不会解组XML,java,xml,jaxb,xsd,generated,Java,Xml,Jaxb,Xsd,Generated,我有一个XML字符串,无法使用提供的XSD在java中解组对象。因此,我尝试使用一个在线工具(www.freeformatter.com/xsd generator.html)生成一个有效的xsd,但得到了相同的错误。我不明白我看到了什么 以下是XML: 回复 XXXX XXXX 2013-12-12 17:48:09.649 2013-12-12 17:48:09.649 AN-138686889649 AN-138686889649 结果 好啊 300 成功 这是我从工具中得到的XSD
回复
XXXX
XXXX
2013-12-12 17:48:09.649
2013-12-12 17:48:09.649
AN-138686889649
AN-138686889649
结果
好啊
300
成功
这是我从工具中得到的XSD:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.domain.com/ws" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="ServiceResultObject">
<xs:complexType>
<xs:sequence>
<xs:element name="ResultObject">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="value"/>
<xs:attribute type="xs:string" name="codIsin"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute type="xs:string" name="isin"/>
</xs:complexType>
</xs:element>
</xs:schema>
生成类之后,我得到了错误
javax.xml.bind.UnmarshaleException:意外元素(uri:,local:“Message”)。预期的要素是
为什么我会丢失所有标题信息?为什么XSD不会产生一个实际解组对象的模式?这里的服务人员提供的XSD也只定义了内部对象。因为您的XML文档有两个名称空间(
http://www.domain.com/ws/protocol
&http://www.domain.com/ws
)您需要两个XML模式来表示它。一个模式可以使用import
元素引用另一个模式
XML纲要
下面我开始介绍XML所需的XML模式
ws.xsd(用于http://www.domain.com/ws
namespace)
这是XML模式的一部分http://www.domain.com/ws
。整个过程是您已经生成的
<?xml version="1.0" encoding="UTF-8"?>
<schema
xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.domain.com/ws"
xmlns:tns="http://www.domain.com/ws"
elementFormDefault="qualified">
<element name="ServiceResultObject">
<complexType>
<sequence/>
<attribute name="isin" type="string"/>
</complexType>
</element>
</schema>
创建JAXBContext
一旦有了这两个XML模式,这些类将生成两个不同的包。下面是如何引导JAXBContext
的示例。请注意,包名称由:
字符分隔
JAXBContext jc = JAXBContext.newInstance("com.domain.ws:com.domain.ws.protocol");
因为您的XML文档有两个名称空间(
http://www.domain.com/ws/protocol
&http://www.domain.com/ws
)您需要两个XML模式来表示它。一个模式可以使用import
元素引用另一个模式
XML纲要
下面我开始介绍XML所需的XML模式
ws.xsd(用于http://www.domain.com/ws
namespace)
这是XML模式的一部分http://www.domain.com/ws
。整个过程是您已经生成的
<?xml version="1.0" encoding="UTF-8"?>
<schema
xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.domain.com/ws"
xmlns:tns="http://www.domain.com/ws"
elementFormDefault="qualified">
<element name="ServiceResultObject">
<complexType>
<sequence/>
<attribute name="isin" type="string"/>
</complexType>
</element>
</schema>
创建JAXBContext
一旦有了这两个XML模式,这些类将生成两个不同的包。下面是如何引导JAXBContext
的示例。请注意,包名称由:
字符分隔
JAXBContext jc = JAXBContext.newInstance("com.domain.ws:com.domain.ws.protocol");