解组Jaxb类错误

解组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字符串,它是来自第三方服务器的响应

   <?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:EnvelopeSOAP-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服务软件处理。