SOAP响应包含xmlns =&#34;&#34;在<item>中表示复杂类型

时间:2015-07-31 11:39:52

标签: java soap axis

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

findByName(name)返回复杂类型映射&gt;。

因此,每当我调用webservice时,它都会返回复杂类型的结果。外部地图密钥将代表我为特定名称获得的数字记录,内部地图将包含我的应用程序配置的密钥和值。

当我收到回复时,返回的复杂类型包含在<item xmlns="">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有<operation>的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文件存在问题,或者它是轴本身的错误或者解决这个问题的任何解决方法,我都无法理解?

1 个答案:

答案 0 :(得分:0)

我解决了这个问题,所以你可以像编写一个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 Tree ......

希望这有帮助..