我在最近两天遇到同样的问题并且我不知道如何解决这个问题。甚至不确定是否是错误。
我有一个我认为非常奇怪的CXF Web服务,我想解决。这是Web服务处理的一个调用:
@WebResult (name="merchantHierarchyParentResponse") MerchantHierarchyParentResponseDTO
getParent(
@WebParam(name="institutionNumber") @XmlElement(required=true) String institutionNumber,
@WebParam(name="clientNumber") String clientNumber,
@WebParam(name="ourReference") String ourReference,
@WebParam(name="accessMerch") String accessMerch,
@WebParam(header=true, name="callerId") String callerId,
@WebParam(header=true, name="timestamp") String timestamp,
@WebParam(header=true, name="signature") String signature
);
如您所见,它在标题中接收了4个普通参数和3个额外参数(callerId,timestamp和signature)。
它成功编译。然后我也在WebLogic服务器中成功部署它。
最后,我使用SoapUI来测试它。我为SoapUI提供了WebLogic为我提供WSDL的URL。这是,我没有对自动生成的WSDL进行任何更改。这就是我在SoupUI中为这个getParent获取的内容:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://webService.webservice.omnipay.com.server/">
<soapenv:Header>
<web:signature>?</web:signature>
<web:timestamp>?</web:timestamp>
<web:callerId>?</web:callerId>
</soapenv:Header>
<soapenv:Body>
<web:getParent>
<institutionNumber>?</institutionNumber>
<!--Optional:-->
<clientNumber>?</clientNumber>
<!--Optional:-->
<ourReference>?</ourReference>
<!--Optional:-->
<accessMerch>?</accessMerch>
</web:getParent>
<web:callerId>?</web:callerId>
<web:timestamp>?</web:timestamp>
<web:signature>?</web:signature>
</soapenv:Body>
</soapenv:Envelope>
我的问题很清楚。我在标题部分看到了3个参数(callerId,timestamp和signature),但为什么这3个参数在正文部分的末尾是AGAIN。我不希望它们出现在身体部位,我只希望它们位于标题中。
知道为什么会这样吗?这是一个错误吗?
答案 0 :(得分:0)
嗨,感谢帮助我解决问题的人们。
这里wsdl:binding的部分与getParent调用有关:
<wsdl:binding name="ServiceImplServiceSoapBinding" type="tns:IService">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="getParent">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="getParent">
<soap:header encodingStyle="" message="tns:getParent" part="callerId" use="literal"/>
<soap:header encodingStyle="" message="tns:getParent" part="timestamp" use="literal"/>
<soap:header encodingStyle="" message="tns:getParent" part="signature" use="literal"/>
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="getParentResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
我必须更改部分,这一行
<soap:body use="literal"/>
这个
<soap:body use="literal" parts="parameters"/>
不太确定为什么在我自动生成的WSDL中没有生成这个部件属性,但是,它解决了我的问题。我不想在wsdl中进行这种手动更改。无论如何,至少我的问题是固定的。