因为 WS 客户端端口的初始化成本很高,我们希望重用相同的实例。我们还想在每次调用之前在 BindingProvider/RequestContext 中设置不同的值。最初我们想这样做:
MyService service = new MyService(wsdlURL, name);
MyPort myPort = service .getMyServicePort();
然后,在每次通话之前,请执行以下操作:
Map requestContext = ((BindingProvider)myPort ).getRequestContext();
requestContext.put(BindingProvider.USERNAME_PROPERTY, uName);
requestContext.put(BindingProvider.PASSWORD_PROPERTY, pWord);
myPort.someFunctionCall();
我的问题是,这个代码线程安全吗?JAX-WS 文档似乎表明它不是线程安全的。但是,如果您采取预防措施,CXF似乎就是这样。如果 JAX-WS 和Metro特别不是线程安全的,是否有任何方法可以在不同步访问端口或 ws 操作的情况下确保线程安全?