2009-10-06 4 views
5

J'essaie de me connecter à un service Web SOAP tiers. Il semble que le service peut fonctionner lorsque l'en-tête HTTP SOAPAction est une chaîne vide (""). Ceci est l'extrait du fichier WSDL:Problème Axis2 lors de la définition de l'en-tête HTTP SOAPAction

<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> 

Où vous voyez le soapAction = ""

J'ai réalisé un stubusing la Axis2 (1,5) wsdl2java.

J'étais espérant pour obtenir ce qui suit (la sortie réussie lors de l'exécution avec 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 

Mais à la place je reçois:

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 

Est-ce que quelqu'un a une idée quel est le problème ou comment puis-je définir le soapAction dans le programme.

Merci, Ronen

Répondre

1

Jetez un oeil à la réponse à this question ... vous pourrez peut-être trouver un code similaire dans vos talons générés.

Si tel est le cas, alors je pense que vous pouvez définir l'action (selon le API):

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

Je pense que l'action est traitée différemment selon la version SOAP. Pour spécifier une version différente:

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

(ou la version SOAP12 de la constante).

Espérons que ça aide.

+0

J'ai essayé sans succès. la chose qui l'a fait était de définir les propriétés de l'option. Merci – rperez

4

rperez n'était pas tout à fait clair avec sa réponse. J'ai trouvé https://issues.apache.org/jira/browse/AXIS2-4264 qui revendique le problème a été résolu en 1.6.0, mais j'ai encore des problèmes dans 1.6.2

Cependant, cela fonctionne:

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