我有一个XML字符串,我无法使用提供的XSD来解组java中的对象 . 所以我尝试使用在线工具(www.freeformatter.com/xsd-generator.html)生成有效的xsd并得到相同的错误 . 我不明白我所看到的 .
这是XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Message xmlns:ns1="http://www.domain.com/ws" xmlns="http://www.domain.com/ws/protocol">
<HeaderMessage>
<MSGTYPE>reply</MSGTYPE>
<ORIGINATOR>XXXX</ORIGINATOR>
<SENDER>XXXX</SENDER>
<TIMESTAMP>2013-12-12 17:48:09.649</TIMESTAMP>
<IDPROCESS>2013-12-12 17:48:09.649</IDPROCESS>
<IDMESSAGE>AN-1386866889649</IDMESSAGE>
<IDREQUEST>AN-1386866889649</IDREQUEST>
<SERVICENAME>RESULT</SERVICENAME>
<ERRORFLAG>OK</ERRORFLAG>
<ERRORCODE>300</ERRORCODE>
<ERRORMSG>Success</ERRORMSG>
</HeaderMessage>
<BodyMessage>
<ns1:ServiceResultObject isin="XX0000000000">
<ns1:ResultObject value="true" codIsin="XX0000000000" />
</ns1:ServiceResultObject>
</BodyMessage>
</Message>
这是我从工具中获得的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.UnmarshalException:意外元素(uri:“http://www.domain.com/ws/protocol”,local:“Message”) . 预期的元素是<{http://www.domain.com/ws} ServiceResultObject>
为什么我丢失了所有这些 Headers 信息?为什么XSD不会导致实际解组该对象的模式?服务人员提供的XSD也只定义了内部对象 .
1 回答
由于您的XML文档有2个名称空间(
http://www.domain.com/ws/protocol
&http://www.domain.com/ws
),因此您需要2个XML模式来表示它 . 一个模式可以使用import
元素引用另一个模式 .XML Schema
下面我已经开始了XML所需的XML Schema .
ws.xsd (for http://www.domain.com/ws namespace)
这是
http://www.domain.com/ws
的XML架构的一部分 . 整个是你已经产生的 .ws_protocol.xsd (for http://www.domain.com/ws/protocol namespace)
以下是
http://www.domain.com/ws/protocol
命名空间缺少的模式的部分版本 . 请注意引用其他XML架构的import
元素,以及引用其他XML架构中的元素的<element ref="ws:ServiceResultObject"/>
.创建JAXBContext
一旦有了两个XML Schema,这些类将生成2个不同的包 . 下面是如何引导
JAXBContext
的示例 . 请注意,包名称由:
字符分隔 .