2016-04-20 1 views
0

Я внесении изменений в некоторые приложения Java, а я заметил, что они экземпляр клиента сервиса в каждой итерации петли, как это:Получение нового JAX-WS WebService порт перед каждым запросом

for(String name : names) { 
HelloService helloWS = new HelloService(); 
HellowServicePort helloPort = helloWS.getHelloServicePort(); 
helloPort.sayHello(name); 
} 

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

HelloService helloWS = new HelloService(); 
HellowServicePort helloPort = helloWS.getHelloServicePort(); 
for(String name : names) { 
helloPort.sayHello(name); 
} 

Использует ли второй подход какую-либо разницу?

+0

@ 11thdimension, почему вы сказали бы «ему нужны разные объекты для каждого вызова»? –

+0

@GabrielBB, вы пробовали второй подход и получили некоторые SOAPHandlers, чтобы увидеть, заметили ли вы какую-либо разницу? Используете ли вы какой-либо контейнер JavaEE? –

+0

@ JoãoRebelo Я предполагаю, что он откроет сокет для отправки сообщения. Пожалуйста, поправьте меня, если я ошибаюсь. – 11thdimension

ответ

1

Да, вы можете повторно использовать объект порта несколько раз, не создавая новый.

Мой предыдущий комментарий был неверным, указанным JoãoRebelo.

Я проверил его с помощью этого калькулятора службы

http://www.webservicex.com/globalweather.asmx?WSDL

После экспорта артефакты с кодом wsdl2java http://www.webservicex.com/globalweather.asmx?WSDL

отлично работает.

Calculator calculatorClient = new Calculator(); 
ICalculator port = calculatorClient.getICalculator(); 
for(int i = 0; i < 10; i++) { 
    float x = (float)Math.random() * 100; 
    float y = (float)Math.random() * 100; 
    System.out.printf("%f + %f = %f%n", x, y, port.add(x, y)); 
} 
+0

Вы можете ссылаться на это, чтобы завершить свой ответ с помощью [информации о безопасности потоков] (http://stackoverflow.com/questions/10599959/is-this-jax-ws-client-call-thread-safe) –