解组Jaxb类错误
我有一个xml字符串,它是来自第三方服务器的响应解组Jaxb类错误,jaxb,xsd,schema,jax-ws,xsd-validation,Jaxb,Xsd,Schema,Jax Ws,Xsd Validation,我有一个xml字符串,它是来自第三方服务器的响应 <?xml version="1.0" encoding="utf-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <GetRateQuoteResponse> <GetRateQ
<?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中解析它。
所以我使用
网站给我的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>
javax.xml.bind.UnmarshaleException:意外元素(uri:http://schemas.xmlsoap.org/soap/envelope/,本地:“信封”)。预期的要素是
请指导。XSD不应包含任何SOAP元素;只有WSDL可以。XSD的定义仅为或数据。传输协议信息(SOAP)不应在数据定义中,因为XSD具有SOAP之外的应用程序 从传递给XSD生成器的条目中省略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>
添加名称空间定义
xmlns:SOAP-ENV=”http://schemas.xmlsoap.org/soap/envelope/“
到XML模式元素xsd:schema
。通常,信封由Web服务软件处理。