Установите пользовательский заголовок SOAP с помощью Axis 1.4 - PullRequest
13 голосов
/ 24 апреля 2009

Я пытаюсь использовать веб-сервис .NET 2.0, используя Axis. Я сгенерировал клиент веб-сервисов с помощью Eclipse WST Plugin, и пока все нормально.

Здесь ожидаемый SOAP-заголовок:

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

Я не нашел никакой документации о том, как настроить этот заголовок из клиента Axis. Когда я сгенерировал клиента с помощью Visual Studio C # Express 2008, он генерирует класс с именем Authentication с двумя атрибутами String (User и Password), и все методы клиента получают объект этого класса в качестве первого параметра, но он не произошло с клиентом Axis WS.

Как мне установить этот заголовок в моих клиентских вызовах?

Ответы [ 3 ]

30 голосов
/ 27 апреля 2009

Может быть, вы можете использовать org.apache.axis.client.Stub.setHeader метод? Как то так:

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...
3 голосов
/ 15 июня 2010

Если у вас есть объект, представляющий контейнер Authentication с идентификатором пользователя и паролем, вы можете сделать это следующим образом:

import org.apache.axis.client.Stub;

//...

MyAuthObj authObj = new MyAuthObj("userid","password");
((Stub) yourServiceObject).setHeader("urn://your/name/space/here", "partName", authObj);
1 голос
/ 15 мая 2013

У меня та же проблема, и она решается с помощью нижеприведенного 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);
...