【问题标题】:SOAP response contains xmlns="" in <item> for complex typeSOAP 响应在复杂类型的 <item> 中包含 xmlns=""
【发布时间】:2015-07-31 11:39:51
【问题描述】:

我在 java 中使用 Axis-1.4 实现了 Web 服务,以搜索从我的应用程序创建的会话。

喜欢,

findByName(name) 返回复杂类型映射>.

所以,每当我调用 Web 服务时,它都会以复杂类型返回结果。外部映射键将代表我获得的特定名称的数字记录,内部映射将包含基于我的应用程序配置的键和值。

当我收到响应时,返回的复杂类型包含在 &lt;item xmlns=""&gt;xmlns="" 之间,值为空白。

我面临的问题是xmlns 的值不能为空,因为我的客户端响应解析失败。所需值为xmlns="http://xml.apache.org/xml-soap"

这是我得到的回应是

<findByNameResponse xmlns="http://session.provider"> 
  <findByNameReturn xsi:type="ns1:Map" xmlns:ns1="http://xml.apache.org  /xml-soap">
    <item xmlns="">
     <key xsi:type="xsd:string">1</key>
     <value xsi:type="ns1:Map">
     <item>
        <key xsi:type="xsd:string">username</key>
       <value xsi:type="xsd:string">myname</value>
     </item>
     </value>
    </item>
</findByNameReturn>
</findByNameResponse>

对于 findByName 有 &lt;operation&gt; 的wsdd 是:

<ns3:operation name="findByName" qname="ns1:findByName" returnQName="ns1:findByNameReturn" returnType="ns2:Map" soapAction="" xmlns:ns1="http://session.provider" xmlns:ns2="http://xml.apache.org/xml-soap" xmlns:ns3="http://xml.apache.org/axis/wsdd/">
   <ns3:parameter qname="ns1:name" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema"/>
</ns3:operation>

我还查看了axis-1.4.jar 和jaxrpc.jar 的源代码,从中我发现RPCParameter 在内部发生了更改。还发现https://issues.apache.org/jira/browse/AXIS-2385 所以,我不明白我的 wsdd 文件是否存在问题,或者它是轴本身的错误,还是解决此问题的任何解决方法?

【问题讨论】:

  • " 所需的值是 xmlns="xml.apache.org/xml-soap"" - 为什么您的客户要求它是一个特定的命名空间?对我来说,这听起来像是一个非常糟糕的客户......或者你误诊了它。
  • 谢谢@JonSkeet 我也认为我们有多个具有不同 wsdl 的 web 服务,当客户端同时加载它们时,它们也面临命名空间冲突。但我仍然必须修复它:(。

标签: java soap axis


【解决方案1】:

我解决了这个问题,所以你可以写一个 BasicHandler 像 Ian McLaird's Answer 并像这样从属性中删除,

if(originalNodeName.equalsIgnoreCase("item")){
     if (childNode instanceof Element){
          Element element = (Element) childNode;
          final String xmlns = element.getAttribute("xmlns");
          if (xmlns != null && xmlns.isEmpty()){
             element.removeAttribute("xmlns");
          }
      }
}

但别忘了,你应该用循环深入 Dom 树...

希望对您有所帮助..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多