Использование в Java веб-службы .NET, для которой требуется настраиваемый заголовок SOAP - PullRequest
1 голос
/ 19 января 2009

Так что мне нужно использовать веб-сервис, который использует собственный SoapHeader, как описано ниже. Какой самый простой способ передать правильные значения через этот заголовок, используя Java. Я использую Netbeans.

<?xml version="1.0" encoding="utf-8"?\>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Header>
    <CustomSoapHeader xmlns="http://snip">
      <UserName>"string"</UserName>
      <Password>"string"</Password>
    </CustomSoapHeader>
  </soap:Header>
  <soap:Body>
    <SomeWebMethod xmlns="http://snip" />
  </soap:Body>
</soap:Envelope>

РЕДАКТИРОВАТЬ: Каков наилучший способ отображения XML при переполнении стека?

Можно добавить, что веб-служба реализована в .NET, и я не могу изменить код на стороне сервера.

1 Ответ

3 голосов
/ 19 января 2009

Вот основные шаги, если вы делаете это на стороне клиента:

  • Установите HandlerResolver на свой сервисный интерфейс (service.setHandlerResolver ())
  • Переопределите HandlerResolver.getHandlerChain (), чтобы вставить собственную реализацию SOAPHandler
  • Реализация SOAPHandler.handleMessage () для изменения заголовка SOAP перед его отправкой

Вы можете передать параметры своему обработчику через контекст запроса:

Map<String, Object> context = ((BindingProvider) port).getRequestContext();
context.put("userName', "foo");
...

в handleMessage () вы можете получить заголовок следующим образом:

public boolean handleMessage(SOAPMessageContext context) {
    ...

    SOAPMessage msg = context.getMessage();
    msg.getSoapHeader();
    ...

}

Надеюсь, это поможет. Я предполагаю, что есть также способ сделать это с аннотациями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...