Hi

I write this not as a flame, but as honest feedback, in the hope that there are perhaps solutions to some of these problems...

We are replacing our core system with a solution that uses SOAP to talk to a gSOAP server. We were recommended XFire (this was before CXF existed), since it was supposed to be lean, mean and really fast, and much easier to use than the mainstream Java SOAP offerings. I only had to build a SOAP client - no server - and used the standard Aegis/JAX-WS/JAXB setup.

Everything went fine through development and testing, until the first day in production: suddenly there were spurious SOAP errors. We had to roll back. Further investigation pointed to the XFire SOAP client not being *thread-safe* (the Test Dept's tests did not have high enough concurrency, hence the production embarassment). It looked like XFire (or a sub-module) was garbling some SOAP request (see example below: it looks like two threads are writing to the same output stream??):

<soap:Body xmmllnnss::nnss11==""uurrnn::sshhaazzaamm--ccoomm...


After much googling and fiddling I got no result, so I decided that the best way forward was to replace XFire. Hoping that CXF would have fixed all such problems, I ported to it. Hmm. Firstly, I couldn't generate the Java classes because of a NullPointer in wsdl2java (seen posts on forum, but unable to fix - XFire generated fine from same WSDL). I then tried various manual options from the CXF docs, e.g. using a <jaxws:client>, a more manual JaxWsProxy, etc., but a nasty 'feature' kept tripping me up: if a method name ends in "Async", CXF assumes it is using *async* SOAP semantics. Is this in the SOAP standard? It so happens that two of our methods end in "Async", but require normal handling. I finally had to side-step the abstractions and hand-craft something around the CXF Client directly. Great: so far so good.

Now for the acid test: our new, aggressive mult-threaded test suite. Boom! Same sort of problems as XFire. I made a list of the kind of errors we're seeing under load (see end of message). As far as I'm aware we don't see any of these errors in single-threaded tests. I estimated that it would be easier to wrap CXF in a thread-safe facade, than to replace it, so I implemented a pool of CXF Clients. That reduced the error frequency, but didn't eliminate it. Up against the wall by this stage, with Management looming, I implemented a *retry* mechanism, i.e. if CXF throws a org.apache.cxf.binding.soap.SoapFault or org.apache.cxf.interceptor.Fault, and the error looks like something transient, wait a while and retry. With the pool of CXF clients, and 1 retry on SOAP error, all our requests now finally succeed.

So: what now? My workarounds are just that: workarounds to get a first version running in production. I wouldn't want to leave it like that. So, the question is:

1. Am I stupid or did I miss something fundamental about CXF (this is my 1st SOAP project, so I'm no SOAP expert), or...
2. Are there significant thread-safety issues in CXF?

Any comments are welcome :)

Thanks
Cornel


SOAP errors
--------------

org.apache.cxf.binding.soap.SoapFault: Validation constraint violation: tag name or namespace mismatch in element <RetriveRecognitionAsyncRequest> org.apache.cxf.binding.soap.SoapFault: Validation constraint violation: tag name or namespace mismatch in element <soap:Body<soap:Envelope>)

org.apache.cxf.binding.soap.SoapFault: Method 'soap:Envelope' not implemented: method name or namespace not recognized org.apache.cxf.binding.soap.SoapFault: Method '' not implemented: method name or namespace not recognized

org.apache.cxf.binding.soap.SoapFault: Error writing to XMLStreamWriter

java.lang.IllegalStateException: Already connected

org.apache.cxf.interceptor.Fault: Marshalling Error: Can't set streaming mode: already connected

org.apache.cxf.interceptor.Fault: Response was of unexpected text/html ContentType. Incoming portion of HTML stream: <html><body>...

______________________________________________________________________
This email has been scanned by the MessageLabs Email Security System.
For more information please visit http://www.messagelabs.com/email ______________________________________________________________________

Reply via email to