2009-04-24 11 views
12

Próbuję skonsumować usługę sieci Web .NET 2.0 przy użyciu osi. Wygenerowałem klienta usług WWW przy użyciu wtyczki Eclipse WST i wygląda na ok.Ustaw niestandardowy nagłówek SOAP przy użyciu osi 1.4

Oto oczekiwany nagłówka SOAP:

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

Nie mogę znaleźć żadnej dokumentacji na temat jak skonfigurować ten nagłówek z klienta osi. Po wygenerowaniu klienta przy użyciu programu Visual Studio C# Express 2008, generowana jest klasa o nazwie Authentication z dwoma atrybutami String (User i Password), a wszystkie metody klienta otrzymują obiekt tej klasy jako pierwszy parametr, ale nie stało się z Axis Klient WS.

Jak ustawić ten nagłówek w moich połączeniach klienckich?

Odpowiedz

27

Może możesz użyć metody org.apache.axis.client.Stub.setHeader? Coś takiego:

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

po tak wielu frustrujących godzinach, jest to odpowiedź, której potrzebowałem. dzięki – LiorH

+0

To było dokładnie to, czego potrzebowałem! – talanb

+0

'Uwierzytelnianie SOAPHeaderElement = nowe SOAPHeaderElement (" http://mc1.com.br/ "," Uwierzytelnianie ");' To oświadczenie daje mi i błąd 'nie można zainicjować klasy abstrakcyjnej java' jak rozwiązać ten problem? – Salman

2

Jeśli masz obiekt reprezentujący kontener Authentication z identyfikatora użytkownika i hasła, można to zrobić tak:

import org.apache.axis.client.Stub; 

//... 

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

Jakiego rodzaju obiektem jest 'MyAuthObj'? Może tym, który dla OP jest "Uwierzytelnienie"? Jeśli tak, to jak klient może utworzyć taki obiekt? ... Dzięki! – bluish

1

Mam ten sam problem i rozwiązać poprzez poniższy 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); 
Powiązane problemy