Как добавить ресурсы @WebServiceRef через JNDI Glassfish? - PullRequest
2 голосов
/ 28 мая 2010

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

@WebServiceRef(name="services/MyService")
MyService myService; 

Но я понятия не имею, как определить объект JNDI services / MyService в Glassfish v3 таким образом, чтобы он вводился. Я хочу определить класс клиента веб-сервиса через администрацию Glassfish, а также указать URL-адрес конечной точки через консоль администратора. Таким образом, URL не жестко закодированы и легко управляются.

В конце концов, мне также нужно будет указать имя пользователя и пароль для HTTP-аутентификации таким же образом, кроме URL-адреса. Как мне это сделать?

1 Ответ

2 голосов
/ 11 января 2011

Я не знаю, как определить «глобальное» имя JNDI, но вы можете написать элемент service-ref в web.xml, который будет работать:

<service-ref>
  <service-ref-name>services/MyService</service-ref-name>
  <service-interface>service.MyEndpointService</service-interface>
  <wsdl-file>http://example.com/MyWsdl</wsdl-file>
</service-ref>

Затем вы можете использовать аннотированное поле, которое вы упомянули.

Для имени пользователя и пароля, как только вы получите прокси от службы, вы можете привести его к BindingProvider и затем установить свойства:

MySEI proxy = myService.getMyEndpointPort();
BindingProvider bp = (BindingProvider)proxy;
Map<String, Object> rc = bp.getRequestContext();
rc.put(BindingProvider.USERNAME_PROPERTY, "myuser");
rc.put(BindingProvider.PASSWORD_PROPERTY, "mypass");
...