我有一个xml字符串,它是来自第三方服务器的响应。
<?xml version="1.0" encoding="utf-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<GetRateQuoteResponse>
<GetRateQuoteResult>
</GetRateQuoteResult>
</GetRateQuoteResponse>
</SOAP-ENV:Body></SOAP-ENV:Envelope>
我想在JAX-WS中解析它。 所以我使用this web site
将此String转换为xsd文件网站给了我xsd如下。
<?xml version="1.0" encoding="utf-16"?>
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="SOAP-ENV:Envelope">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="SOAP-ENV:Body">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="GetRateQuoteResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="GetRateQuoteResult" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
我现在从这个xsd生成JaxB类,它尝试创建名为的类 SOAP-ENV:Envelope 和 SOAP-ENV:Body ,这是一个类的无效名称,但无法执行此操作。
即使我将xsd修改为信封和正文,解组也会失败。
javax.xml.bind.UnmarshalException: unexpected element (uri:"http://schemas.xmlsoap.org/soap/envelope/", local:"Envelope"). Expected elements are <{}SOAP-ENV:Envelope>
请指导。
答案 0 :(得分:0)
XSD不应包含任何SOAP元素;只有WSDL才有。根据定义,XSD仅为数据。传输协议信息(SOAP)不应该在数据定义中,因为XSD具有SOAP之外的应用程序。
从传递给XSD generato的条目中省略SOAP模式元素。通过在那里包含那些东西,你向生成器指示那些元素将是你的JAXB生成的类的一部分(不应该是这种情况)。您应该为生成器提供的内容是下面的摘录,它将正确生成包含GetRateQuoteResponse
的模式
<GetRateQuoteResponse>
<GetRateQuoteResult>
</GetRateQuoteResult>
</GetRateQuoteResponse>
结果:
<?xml version="1.0" encoding="utf-16"?>
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="GetRateQuoteResponse">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="GetRateQuoteResult" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>