【问题标题】:Namespace issue with wsdl generated from JAX WS从 JAX WS 生成的 wsdl 的命名空间问题
【发布时间】:2017-01-15 03:41:28
【问题描述】:

我在 tomcat 服务器上部署了一个 Web 服务,并且还为它生成了一个 wsdl 文件。

后来我通过wsdl生成了一个新的soap项目,并执行了一个soap请求到服务器。

这里的问题出在服务器端,由于“InputData”和“CCNA”的命名空间前缀错误,xml 的解组失败。目前是cfa

根据java代码,InputData的命名空间是xs,CCNA是bim。 所以,如果我修改了soap请求,解组在服务器端就可以了。

那么,问题出在哪里? WSDL 生成或 JAX WS 中的其他任何地方? 我不应该修改我的肥皂请求。

SOAP 请求:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cfa="http://cfa.ni.ctl.com/" xmlns:bim="http://www.qwest.com/XMLSchema/BIM" xmlns:xs="http://www.qwest.com/XMLSchema">
   <soapenv:Header/>
   <soapenv:Body>
      <cfa:getCFACircuit>
         <!--Optional:-->
         <CFACircuitRequest>
            <bim:RequestId>123</bim:RequestId>
            <bim:WebServiceName>123</bim:WebServiceName>
            <bim:RequestPurpose>123</bim:RequestPurpose>
            <bim:AuthorizationInfo>
               <!--Optional:-->
               <bim:ApplicationId>123</bim:ApplicationId>
               <!--Optional:-->
               <bim:UserId>123</bim:UserId>
               <!--Optional:-->
               <bim:Userid>123</bim:Userid>
               <bim:Password>123</bim:Password>
            </bim:AuthorizationInfo>
            <!--Optional:-->
            <bim:TargetSchemaVersionUsed>
               <!--Optional:-->
               <bim:TargetXSDName>123</bim:TargetXSDName>
               <!--Optional:-->
               <bim:MajorVersionNumber>123</bim:MajorVersionNumber>
               <!--Optional:-->
               <bim:MinorVersionNumber>123</bim:MinorVersionNumber>
            </bim:TargetSchemaVersionUsed>
            <!--Optional:-->
            <bim:TimeOutSecond>123</bim:TimeOutSecond>
            <!--Optional:-->
            <bim:SendTimeStamp>123</bim:SendTimeStamp>
            <cfa:InputData>
               <cfa:CCNA>123</cfa:CCNA>
               <xs:CableKey>
                  <!--Optional:-->
                  <xs:LowUnit>123</xs:LowUnit>
                  <!--Optional:-->
                  <xs:HighUnit>123</xs:HighUnit>
                  <!--Optional:-->
                  <xs:CableId>123</xs:CableId>
                  <!--Optional:-->
                  <xs:CableSubPath>123</xs:CableSubPath>
                  <!--Optional:-->
                  <xs:CLLIALocation>123</xs:CLLIALocation>
                  <!--Optional:-->
                  <xs:CLLIZLocation>123</xs:CLLIZLocation>
               </xs:CableKey>
            </cfa:InputData>
         </CFACircuitRequest>
      </cfa:getCFACircuit>
   </soapenv:Body>
</soapenv:Envelope>

服务器上输入数据的 XML 注释是:

@XmlElement(name = "InputData", namespace = "http://www.qwest.com/XMLSchema", required = true)

【问题讨论】:

  • 我不知道为什么有了这个注释,wsdl 中的 inputData 不在相应的命名空间中……也许是与 jaxb 版本有关的问题?你可以试试新的吗?对不起,但我不知道如何在这里提供帮助。我也将删除我的答案,因为它不能解决您的问题。
  • 好的..谢谢..我尝试使用更新的 jaxb 版本

标签: soap jaxb wsdl jax-ws


【解决方案1】:

我猜你的 XML 请求不正确。请先尝试根据 XML 架构验证您的请求。

您使用哪个命名空间前缀无关紧要,但您需要确保 XML 元素与适当的命名空间匹配。

【讨论】:

  • 123
【解决方案2】:

阿杰, 您的注释是:

@XmlElement(name = "InputData", namespace = "http://www.qwest.com/XMLSchema", required = true)

但在您的 XML 请求中,元素 InputData 属于命名空间“http://cfa.ni.ctl.com/”。

您需要修复注释。

【讨论】:

  • 但是该代码是从模式文件自动生成的。我在我的服务器包中包含了 jar 文件。如何在我的代码中覆盖命名空间?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多