web-servicessaxspring-wssaxparsersaaj

Call to a Soap WS, results on "Couldn't get a SAX parser while constructing a envelope" error


During a call to a Soap WebService we hit into this error. What could be the reason behind ?

I'm using JDK 7 update U67 (64 Bits), Spring 3.1.1.RELEASE, Spring WS 2.1.0.RELEASE (spring-ws-core-2.1.0.RELEASE.jar),

Here is the stacktrace log:

----- ERROR [7-thread-1] xxxxxxxxxxxxxxxxxxx.webservice.WebServiceCallTemplateImpl:45 An error occured when connecting to service.
org.springframework.ws.soap.saaj.SaajSoapEnvelopeException: Could not access envelope: Couldn't get a SAX parser while constructing a envelope; nested exception is com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Couldn't get a SAX parser while constructing a envelope
at org.springframework.ws.soap.saaj.SaajSoapMessage.getSaajVersion(SaajSoapMessage.java:260)
at org.springframework.ws.soap.saaj.SaajSoapMessage.getImplementation(SaajSoapMessage.java:342)
at org.springframework.ws.soap.saaj.SaajSoapMessage.<init>(SaajSoapMessage.java:117)
at org.springframework.ws.soap.saaj.SaajSoapMessageFactory.createWebServiceMessage(SaajSoapMessageFactory.java:186)
at org.springframework.ws.soap.saaj.SaajSoapMessageFactory.createWebServiceMessage(SaajSoapMessageFactory.java:60)
at org.springframework.ws.transport.AbstractWebServiceConnection.receive(AbstractWebServiceConnection.java:90)
at org.springframework.ws.client.core.WebServiceTemplate.doSendAndReceive(WebServiceTemplate.java:589)
at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:537)
at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:384)
at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:374)
at com.xxxxxxxxxxx.commons.webservice.WebServiceCallTemplateImpl.sendAndReceive(WebServiceCallTemplateImpl.java:38)
at com.xxxxxxxxxxx.commons.webservice.WebServiceCallTemplateImpl.sendAndReceiveNoError(WebServiceCallTemplateImpl.java:73)
at com.xxxxxxxxxxx.commons.webservice.ServerCallTemplate.sendAndReceiveNoError(ServerCallTemplate.java:61)
at com.xxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxClient.readDocument(QaDocumentReaderClient.java:39)
at com.xxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxService.readDocument(QaDocumentReadService.java:44)
at com.xxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxService$$FastClassByCGLIB$$50e93444.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)
at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:689)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:622)
at com.xxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxService$$EnhancerByCGLIB$$98b68ed1.readDocument(<generated>)
at com.xxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxRunnable.run(QaDocumentReadRunnable.java:38)
at WICKET_com.xxxxxxxxxxxxxxxxxxxxxxxxxxx.QaDocumentReadRunnable$$FastClassByCGLIB$$ab78176e.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)
at org.apache.wicket.proxy.LazyInitProxyFactory$CGLibInterceptor.intercept(LazyInitProxyFactory.java:333)
at WICKET_com.xxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxRunnable$$EnhancerByCGLIB$$46e7e20f.run(<generated>)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.runAndReset(Unknown Source)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(Unknown Source)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Couldn't get a SAX parser while constructing a envelope
at com.sun.xml.internal.messaging.saaj.soap.EnvelopeFactory.createEnvelope(Unknown Source)
at com.sun.xml.internal.messaging.saaj.soap.ver1_1.SOAPPart1_1Impl.createEnvelopeFromSource(Unknown Source)
at com.sun.xml.internal.messaging.saaj.soap.SOAPPartImpl.getEnvelope(Unknown Source)
at org.springframework.ws.soap.saaj.support.SaajUtils.getSaajVersion(SaajUtils.java:155)
at org.springframework.ws.soap.saaj.SaajSoapMessage.getSaajVersion(SaajSoapMessage.java:257)
... 34 more
Caused by: org.xml.sax.SAXException
java.lang.InterruptedException
at com.sun.xml.internal.messaging.saaj.util.ParserPool.get(Unknown Source)
... 39 more
Caused by: java.lang.InterruptedException
at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireInterruptibly(Unknown Source)
at java.util.concurrent.locks.ReentrantLock.lockInterruptibly(Unknown Source)
at java.util.concurrent.ArrayBlockingQueue.take(Unknown Source)
... 40 more

Has anyone encountered the same issue ?

Thanks in advance.


Solution

  • That error means that the thread on which the SOAP call is running has been interrupted, and the particular method shown in the stack trace (com.sun.xml.internal.messaging.saaj.util.ParserPool#get()) just happens to execute the first call to an interruptible method after that interrupt happened. Since the thread belongs to a thread pool, this may be caused by a call to the shutdownNow() method of the ThreadPoolExecutor.