2009-04-24 5 views
12

J'essaie de consommer un service Web .NET 2.0 en utilisant Axis. J'ai généré le client de services Web en utilisant Eclipse WST Plugin et cela semble correct jusqu'à maintenant.Définir l'en-tête SOAP personnalisé en utilisant Axis 1.4

ici l'en-tête SOAP attendu:

<soap:Header> 
<Authentication xmlns="http://mc1.com.br/"> 
    <User>string</User> 
    <Password>string</Password> 
</Authentication> 
</soap:Header> 

Je ne ai trouvé aucune documentation sur la façon de configurer cet en-tête d'un client Axis. Lorsque j'ai généré le client à l'aide de Visual Studio C# Express 2008, il génère une classe nommée Authentication avec deux attributs String (User et Password) et toutes les méthodes client reçoivent un objet de cette classe en tant que premier paramètre, mais cela n'a pas été le cas avec Axis Client WS.

Comment puis-je définir cet en-tête dans mes appels client?

Répondre

27

Peut-être que vous pouvez utiliser la méthode org.apache.axis.client.Stub.setHeader? Quelque chose comme ceci:

MyServiceLocator wsLocator = new MyServiceLocator(); 
MyServiceSoap ws = wsLocator.getMyServiceSoap(new URL("http://localhost/MyService.asmx")); 

//add SOAP header for authentication 
SOAPHeaderElement authentication = new SOAPHeaderElement("http://mc1.com.br/","Authentication"); 
SOAPHeaderElement user = new SOAPHeaderElement("http://mc1.com.br/","User", "string"); 
SOAPHeaderElement password = new SOAPHeaderElement("http://mc1.com.br/","Password", "string"); 
authentication.addChild(user); 
authentication.addChild(password); 
((Stub)ws).setHeader(authentication); 

//now you can use ws to invoke web services... 
+0

après tant d'heures frustrantes, c'est la réponse dont j'avais besoin. merci – LiorH

+0

C'était exactement ce dont j'avais besoin! – talanb

+0

'SOAPHeaderElement authentification = new SOAPHeaderElement (" http://mc1.com.br/ "," Authentification ");' Cette instruction me donne une erreur et je ne peux pas initier la classe abstraite java' comment résoudre ce problème? – Salman

2

Si vous avez un objet représentant le conteneur Authentication avec code d'utilisateur et mot de passe, vous pouvez le faire comme ceci:

import org.apache.axis.client.Stub; 

//... 

MyAuthObj authObj = new MyAuthObj("userid","password"); 
((Stub) yourServiceObject).setHeader("urn://your/name/space/here", "partName", authObj); 
+1

Quel type d'objet est 'MyAuthObj'? Peut-être que celui pour l'OP est 'Authentication'? Si oui, comment le client peut-il instancier un tel objet? ... Merci! – bluish

1

J'ai le même problème et résolu par le dessous fragement :

ServiceSoapStub clientStub = (ServiceSoapStub)new ServiceLocator().getServiceSoap(url); 
org.apache.axis.message.SOAPHeaderElement header = new org.apache.axis.message.SOAPHeaderElement("http://www.abc.com/SSsample/","AuthHeader"); 
SOAPElement node = header.addChildElement("Username"); 
node.addTextNode("aat"); 
SOAPElement node2 = header.addChildElement("Password"); 
node2.addTextNode("sd6890"); 

((ServiceSoapStub) clientStub).setHeader(header); 
Questions connexes