【发布时间】:2015-07-31 11:39:51
【问题描述】:
我在 java 中使用 Axis-1.4 实现了 Web 服务,以搜索从我的应用程序创建的会话。
喜欢,
findByName(name) 返回复杂类型映射>.
所以,每当我调用 Web 服务时,它都会以复杂类型返回结果。外部映射键将代表我获得的特定名称的数字记录,内部映射将包含基于我的应用程序配置的键和值。
当我收到响应时,返回的复杂类型包含在 <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 文件是否存在问题,或者它是轴本身的错误,还是解决此问题的任何解决方法?
【问题讨论】:
-
" 所需的值是 xmlns="xml.apache.org/xml-soap"" - 为什么您的客户要求它是一个特定的命名空间?对我来说,这听起来像是一个非常糟糕的客户......或者你误诊了它。
-
谢谢@JonSkeet 我也认为我们有多个具有不同 wsdl 的 web 服务,当客户端同时加载它们时,它们也面临命名空间冲突。但我仍然必须修复它:(。