Question

I'm using CXF to generate SOAP client classes. In the CXF documentation, they write

Are JAX-WS client proxies thread safe?

Official JAX-WS answer: No. According to the JAX-WS spec, the client proxies are NOT thread safe. To write portable code, you should treat them as non-thread safe and synchronize access or use a pool of instances or similar.

CXF answer: CXF proxies are thread safe for MANY use cases. The exceptions are:

(I'm omitting their description of these use cases)

For most "simple" use cases, you can use CXF proxies on multiple threads. The above outlines the workarounds for the others.

Does anyone have any contrary experiences? Encountered multi-threading issues that aren't described in their faq? Or is their description accurate and they are basically safe to use?

Was it helpful?

Solution

We recently ran into similar discussion in our project. As specified in the FAQ you are referring to, except for the features that modify HTTP conduit on the fly (ex: session management and failover features), the CXF client proxy is thread safe. So if you do not use these features then it is okay to share the client proxy between threads.

OTHER TIPS

You're probably referring to runtime, but I don't think configuration time is meant to be threadsafe. I believe I've seen a race condition in JettyHTTPServerEngineFactory.

In a test harness we bring up multiple unrelated SOAP servers and when they share a Bus there's a potential for a race condition if multiple threads attempt to add JettyHTTPServerEngine instances at the same time. The specific race condition is in setTLSServerParametersForPort(), which you call when you want to use HTTPS for a port. That method adds elements to a HashMap with no locking.

I guess the reason others don't encounter this is that most people configure CXF via configuration files, and it's rare to have multiple ports/Jetty servers in one process.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top