2009-10-06 67 views
5

我正在尝试连接到第三方SOAP Web服务。当HTTP SOAPAction标头为空字符串(“”)时,似乎该服务可以工作。这是WSDL的片段:设置SOAPAction HTTP标头时出现Axis2问题

<wsdl:binding name="detailsRequestMessage" type="tns:UssdPortType"> 
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> 
    <wsdl:operation name="details"> 
     <soap:operation soapAction=""/> 
     <wsdl:input> 
      <soap:body use="literal"/> 
     </wsdl:input> 
     <wsdl:output> 
      <soap:body use="literal"/> 
     </wsdl:output> 
    </wsdl:operation> 
</wsdl:binding> 

当你看到的soapAction = “”

我产生stubusing Axis2的(1.5)的WSDL2Java。

希望得到以下(成功输出与运行了SoapUI时):

POST /details HTTP/1.1 
Accept-Encoding: gzip,deflate 
Content-Type: text/xml;charset=UTF-8 
SOAPAction: "" 
User-Agent: Jakarta Commons-HttpClient/3.1 
Host: some.host 
Content-Length: 323 

,而不是我越来越:

POST /details HTTP/1.1 
Content-Type: text/xml; charset=UTF-8 
SOAPAction: "http://some.url/wsussd/ussdtypes/UssdPortType/detailsRequest" 
User-Agent: Axis2 
Host: some.host 
Content-Length: 300 

没有人有任何想法是什么问题或如何在程序中设置soapAction。

感谢, 罗南

回答

1

看一看答案this question ...你可以找到类似的代码在生成的存根。

如果是这样的话,那么我认为你可以设置操作(根据API):

serviceClient = new RPCServiceClient(); 
Options options = serviceClient.getOptions(); 
options.setAction(""); 

我认为这取决于SOAP版本的动作的处理方式不同。指定不同的版本:

options.setSoapVersionURI(
    org.apache.axiom.soap.SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI); 

(或SOAP12版本的常量)。

希望有所帮助。

+0

我试过,没有运气。 做的事情是设置选项的属性。 谢谢 – rperez 2009-10-07 09:54:16

4

rperez对他的回答并不完全清楚。 我发现https://issues.apache.org/jira/browse/AXIS2-4264声称这个问题被固定在1.6.0,但我仍然有问题1.6.2

然而,这并不工作:

stub._getServiceClient().getOptions().setProperty(org.apache.axis2.Constants.Configuration.DISABLE_SOAP_ACTION, true);