我使用Axis-1.4在java中进行Web服务实现,以搜索从我的应用程序创建的会话。
等
findByName(name)返回复杂类型映射>。
因此,每当我调用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文件存在问题,或者它是轴本身的错误或者解决这个问题的任何解决方法,我都无法理解?
答案 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 ......
希望这有帮助..