JAX-WS - добавляющие заголовки SOAP

Я пытаюсь создать автономный клиент для потребления некоторых веб-сервисов. Я должен добавить свое имя пользователя и пароль к Заголовку SOAP. Я пытался добавить учетные данные следующим образом:

OTSWebSvcsService service = new OTSWebSvcsService();
OTSWebSvcs port = service.getOTSWebSvcs();

BindingProvider prov = (BindingProvider)port;
prov.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "myusername");
prov.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "mypassword");

...

Когда я называю метод на сервисе, я получаю следующее исключение:

com.ibm.wsspi.wssecurity.SoapSecurityException: WSEC5048E: One of "SOAP Header" elements required.

Что я делаю неправильно? Как я добавил бы эти свойства к Заголовку SOAP?

Отредактированный: Я использовал JAX-WS 2,1 включенных в JDK6. Я теперь использую JAX-WS 2.2. Я теперь получаю следующее исключение:

com.ibm.wsspi.wssecurity.SoapSecurityException: WSEC5509E: A security token whose type is [http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#UsernameToken] is required.

Как я иду о создании этого маркера?

30
задан Pascal Thivent 24 February 2010 в 18:26
поделиться

1 ответ

Вы должны иметь возможность отключить ленивую нагрузку на рассматриваемые отношения и sqlalchemy будет получать их все в

-121--3383457-

Не 100% уверен, что в вопросе отсутствуют некоторые детали, но если вы используете JAX-WS RI, то посмотрите на Добавление заголовков SOAP при отправке запросов :

Портативный способ сделать это, что создается SOAPHandler и беспорядок с SAAJ, но RI обеспечивает лучший способ сделать это.

При создании прокси или отправки объект, они реализуют Интерфейс BindingProvider . Когда вы использовать JAX-WS RI, вы можете понизить WSBindingProvider , определяющий несколько других методов, предоставленных только JAX-WS RI.

Этот интерфейс позволяет установить произвольное количество объектов Header, каждый представляет заголовок SOAP. Вы может реализовать его самостоятельно, если вы хотите, но, скорее всего, вы бы использовали один из методы фабрики, определенные на Заголовки класса для создания одного.

 импортные com.sun.xml.ws.developer.WSBindingProvider;

Порт HelloPort = helloService.getHelloPort () ;//или что-то подобное...
WSBindingProvider bp = (WSBindingProvider) порт;

bp.setOutboundHeader (
//простое строковое значение как заголовок, например < simpleHeader > stringValue 
Headers.create (новый QName («simpleHeader»), «stringValue»),
//создать заголовок из объекта JAXB
Headers.create (jaxbContext, myJaxbObject)
);

Обновите код и повторите попытку. И если вы не используете JAX-WS RI, пожалуйста, обновите свой вопрос и предоставьте дополнительную контекстную информацию.

Обновление: веб-служба, которую вы хотите вызвать, защищена с помощью WS-Security/UsernameTokens. Это немного отличается от вашего первоначального вопроса. В любом случае, чтобы настроить ваш клиент на отправку имен пользователей и паролей, я предлагаю проверить отличную публикацию Реализация профиля WS-Security UsernameToken для веб-служб на базе Metro (переход к шагу 4). Использование NetBeans для этого шага может значительно облегчить работу.

27
ответ дан 27 November 2019 в 23:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: