Метро с переопределением адреса конечной точки jax-ws - PullRequest
0 голосов
/ 17 октября 2011

Я создаю клиент веб-сервиса, используя Metro с jax-ws , и хочу переопределить адрес конечной точки.

Используя следующий пример из 2.11.1.BindingProvider.ENDPOINT_ADDRESS_PROPERTY Я могу сделать это: http://metro.java.net/guide/How_to_invoke_and_endpoint_by_overriding_endpoint_address_in_the_WSDL.html

//Create service and proxy from the generated Service class.
HelloService service = new HelloService();
HelloPort proxy = service.getHelloPort();

((BindingProvider)proxy).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
                                                    "http://new/endpointaddress");

proxy.sayHello("Hello World!");

Но я не понимаю, почему я не могу использовать service.getHelloPort (). SayHello ("Hello World"! ") вместо proxy.sayHello (" Hello World! ") , как показано в примере.Если я это сделаю, клиент веб-службы использует адрес конечной точки по умолчанию вместо того, который я хочу использовать.

Похоже, я получаю новый экземпляр HelloPort каждый раз, когда я вызываю getHelloPort ()

Может кто-нибудь объяснить это?

1 Ответ

1 голос
/ 18 октября 2011

между ними мало (читай: нет):

service.getHelloPort().sayHello("Hello World");

и

HelloPort proxy = service.getHelloPort();
proxy.sayHello("Hello World!");

вызов service.getHelloPort () всегда будет возвращать новый экземпляр прокси / порта,поэтому каждый раз, когда вы изменяете контекст запроса для данного объекта порта, это изменение является локальным для конкретного экземпляра порта.

В общем случае возвращаемый вами экземпляр порта можно использовать повторно и обеспечить многопоточность до тех пор, пока вы не изменяетеконтексты запроса / ответа.для примера кода, который вы опубликовали, он модифицирует контекст запроса, чтобы установить адрес конечной точки, поэтому рекомендуется получать новый объект порта либо каждый раз, когда вам нужен, либо, по крайней мере, получать новый объект для каждого потока, который нуждаетсяодин.(threadlocal ваш друг для этого)

...