I just noticed that the sample you linked me to refers only to synchronous
invocations only. The sample jaxws_async shows how to do generate async
invariants of the methods and how to invoke them, but does not demonstrate
how to use Holder<T> in this case. So, maybe, I'm doing it all wrong
because CXF might not support this? Holder<T> works just fine in
synchronous invocations.
My SEI was not generated correctly anyways. According to the sample, when
the method receives a SOAP header and produces one, wsdl2java generates a
SEI with an Holder with Mode.INOUT. I guess the option -autoNameResolution
was forcing the creation of an extra input parameter in the method. I had
no conflicts, so I removed the option and now the Holder with Mode.INOUT is
generated. I fixed all my methods in the SEI implementation accordingly.
I tested my invocations again. Now the Holder receives in the constructor
the input header. Without @UseAsyncMethod:
Holder<MultiSpeakMsgHeader> headerOut = new Holder<MultiSpeakMsgHeader>(new
MultiSpeakMsgHeader());
Future<?> future = mServer.odEventNotificationAsync(new
ArrayOfOutageDetectionEvent(), "0", headerOut, new
AsyncHandlerImpl(headerOut));
Still does not work. When the client reads the value field, it does not get
the new header object created by the server.
With @UseAsyncMethod still throws the NPE in the same line.
When I invoked the argumentless method, again without @UseAsyncMethod:
Holder<MultiSpeakMsgHeader> headerOut = new Holder<MultiSpeakMsgHeader>(new
MultiSpeakMsgHeader());
Future<?> future = mServer.pingURLAsync(headerOut, new
AsyncHandlerImpl(headerOut));
I get another exception, this time in HolderInInterceptor. (I've updated to
3.0.2) The stacktrace is below:
02-12-2014 12:48:28.643 WARN [ActiveMQ Session Task-2]
org.apache.cxf.phase.PhaseInterceptorChain doLog - Interceptor for {
http://www.multispeak.org/Version_4.1_Release}OA_Server#{http://www.multispeak.org/Version_4.1_Release}PingURL
has thrown exception, unwinding now
java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
at java.util.ArrayList.rangeCheck(ArrayList.java:571) ~[?:1.6.0_33]
at java.util.ArrayList.get(ArrayList.java:349) ~[?:1.6.0_33]
at
org.apache.cxf.jaxws.interceptors.HolderInInterceptor.handleMessage(HolderInInterceptor.java:67)
~[cxf-rt-frontend-jaxws-3.0.2.jar:3.0.2]
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
[cxf-core-3.0.2.jar:3.0.2]
at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:780)
[cxf-core-3.0.2.jar:3.0.2]
at
org.apache.cxf.transport.jms.JMSConduit.processReplyMessage(JMSConduit.java:413)
[cxf-rt-transports-jms-3.0.2.jar:3.0.2]
at
org.apache.cxf.transport.jms.JMSConduit.onMessage(JMSConduit.java:380)
[cxf-rt-transports-jms-3.0.2.jar:3.0.2]
at
org.apache.cxf.transport.jms.util.MessageListenerContainer$LocalTransactionalMessageListener.onMessage(MessageListenerContainer.java:120)
[cxf-rt-transports-jms-3.0.2.jar:3.0.2]
at
org.apache.activemq.ActiveMQMessageConsumer.dispatch(ActiveMQMessageConsumer.java:1361)
[activemq-client-5.9.1.jar:5.9.1]
at
org.apache.activemq.ActiveMQSessionExecutor.dispatch(ActiveMQSessionExecutor.java:131)
[activemq-client-5.9.1.jar:5.9.1]
at
org.apache.activemq.ActiveMQSessionExecutor.iterate(ActiveMQSessionExecutor.java:202)
[activemq-client-5.9.1.jar:5.9.1]
at
org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:133)
[activemq-client-5.9.1.jar:5.9.1]
at
org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:48)
[activemq-client-5.9.1.jar:5.9.1]
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)
[?:1.6.0_33]
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
[?:1.6.0_33]
at java.lang.Thread.run(Thread.java:701) [?:1.6.0_33]
So maybe there is an issue when manipulating Holder objects in async
invocations of methods with arguments?
André Costa Lima
2014-12-01 15:44 GMT+00:00 André Costa Lima <[email protected]>:
> Thanks for your response. I'll narrow it down to the necessary.
>
> SEI implementation:
>
> @WebService(
> serviceName = "OA_Server",
> portName = "OA_ServerSoap",
> targetNamespace = "http://www.multispeak.org/Version_4.1_Release",
> wsdlLocation = "classpath:OA_Server.wsdl",
> endpointInterface = "org.multispeak.version_4_1_6.
> OA.OAServerSoap")
> public class OAServerSoapImpl implements OAServerSoap {
>
> ...
>
> @Override
> public ArrayOfErrorObject pingURL(MultiSpeakMsgHeader
> multiSpeakMsgHeader, Holder<MultiSpeakMsgHeader> multiSpeakMsgHeader1) {
> LOG.entry(multiSpeakMsgHeader, multiSpeakMsgHeader1);
> try {
> Preconditions.checkNotNull(multiSpeakMsgHeader);
> Preconditions.checkNotNull(multiSpeakMsgHeader1);
> MultiSpeakInOutHeader<MultiSpeakMsgHeader> mspkHeader =
> MultiSpeakInOutHeader.of(multiSpeakMsgHeader, multiSpeakMsgHeader1);
>
> mspkHeader.setOutbound(mObjectFactory.createMultiSpeakMsgHeader());
> return
> LOG.exit(Preconditions.checkNotNull(mDelegate.pingURL(mspkHeader)));
> } catch (Throwable t) {
> throw LOG.throwing(Throwables.unchecked(t));
> }
> }
>
> @Override
> @UseAsyncMethod
> public ArrayOfErrorObject odEventNotification(
> ArrayOfOutageDetectionEvent odEvents, String transactionID,
> MultiSpeakMsgHeader multiSpeakMsgHeader, Holder<MultiSpeakMsgHeader>
> multiSpeakMsgHeader1) {
>
> LOG.entry(odEvents, transactionID, multiSpeakMsgHeader,
> multiSpeakMsgHeader1);
> try {
> Preconditions.checkNotNull(odEvents, "odEvents");
> Preconditions.checkNotNull(transactionID, "transactionID");
> Preconditions.checkNotNull(multiSpeakMsgHeader,
> "multiSpeakMsgHeader");
> Preconditions.checkNotNull(multiSpeakMsgHeader1,
> "multiSpeakMsgHeader1");
> MultiSpeakInOutHeader<MultiSpeakMsgHeader> mspkHeader =
> MultiSpeakInOutHeader.of(multiSpeakMsgHeader, multiSpeakMsgHeader1);
>
> mspkHeader.setOutbound(mObjectFactory.createMultiSpeakMsgHeader());
> return
> LOG.exit(Preconditions.checkNotNull(mDelegate.odEventNotification(odEvents,
> transactionID, mspkHeader)));
> } catch (Throwable t) {
> throw LOG.throwing(Throwables.unchecked(t));
> }
> }
>
> @Override
> public Future<?> pingURLAsync(MultiSpeakMsgHeader multiSpeakMsgHeader,
> Holder<MultiSpeakMsgHeader> multiSpeakMsgHeader1,
> AsyncHandler<PingURLResponse> asyncHandler) {
> LOG.entry(multiSpeakMsgHeader, multiSpeakMsgHeader1, asyncHandler);
> try {
> PingURLAsync response = new PingURLAsync(this,
> multiSpeakMsgHeader, multiSpeakMsgHeader1, asyncHandler);
> mExecutor.submit(response);
> return LOG.exit(response.getServerAsyncResponse());
> } catch (Throwable t) {
> throw LOG.throwing(Throwables.unchecked(t));
> }
> }
>
> @Override
> public Future<?> odEventNotificationAsync(ArrayOfOutageDetectionEvent
> odEvents, String transactionID, MultiSpeakMsgHeader multiSpeakMsgHeader,
> Holder<MultiSpeakMsgHeader> multiSpeakMsgHeader1,
> AsyncHandler<ODEventNotificationResponse> asyncHandler) {
> LOG.entry(odEvents, transactionID, multiSpeakMsgHeader,
> multiSpeakMsgHeader1);
> try {
> OdEventNotificationAsync response = new
> OdEventNotificationAsync(this, odEvents, transactionID,
> multiSpeakMsgHeader, multiSpeakMsgHeader1, asyncHandler);
> mExecutor.submit(response);
> return LOG.exit(response.getServerAsyncResponse());
> } catch (Throwable t) {
> throw LOG.throwing(Throwables.unchecked(t));
> }
> }
>
> ...
>
> }
>
> To make it clear, I'll add the code to the MultiSpeakInOutHeader class:
>
> public final class MultiSpeakInOutHeader<T> {
>
> private final T mIn;
> private final Holder<T> mOut;
>
> private MultiSpeakInOutHeader(T in, Holder<T> out) {
> Preconditions.checkNotNull(in);
> Preconditions.checkNotNull(out);
> mIn = in;
> mOut = out;
> }
>
> public T getInbound() {
> return mIn;
> }
>
> public T getOutbound() {
> return getHolder().value;
> }
>
> public void setOutbound(T out) {
> getHolder().value = out;
> }
>
> private Holder<T> getHolder() {
> return mOut;
> }
>
> public static <T> MultiSpeakInOutHeader<T> of(T inbound, Holder<T>
> outbound) {
> return new MultiSpeakInOutHeader<T>(inbound, outbound);
> }
> }
>
> When I invoke:
>
> Holder<MultiSpeakMsgHeader> headerOut = new Holder<MultiSpeakMsgHeader>();
> Future<?> future = mServer.odEventNotificationAsync(new
> ArrayOfOutageDetectionEvent(), "0", new MultiSpeakMsgHeader(), headerOut,
> new AsyncHandlerImpl(headerOut));
>
> an NPE is thrown at HolderOutInterceptor If I use @UseAsyncMethod or
> headerOut.value is null if I don't. Now, when I invoke:
>
> Holder<MultiSpeakMsgHeader> headerOut = new Holder<MultiSpeakMsgHeader>();
> Future<?> future = mServer.pingURLAsync(new MultiSpeakMsgHeader(),
> headerOut, new AsyncHandlerImpl(headerOut));
>
> it works. The client can see the value field / no NPE is thrown.
>
> Comparing my code to the sample, I believe I'm doing it correctly:
>
> 1. The client creates the Holder object and passes it down to the method
> invocation
> 2. The server assigns the value field before returning
>
> It's rather strange that one invocation works and the other does not. The
> only difference between them is that pingURL has no arguments and
> odEventNotification has one (ArrayOfOutageDetectionEvent). I have another
> argumentless method that works just fine as well and another with arguments
> that does not, so I think the problem lies in the number of arguments
> somehow or how the Holder types are manipulated.
>
> If the test that you linked me to works in the current release of CXF,
> maybe I have something wrong with my configuration?
> I will run that same test in my machine to see how it goes.
>
> Thanks.
>
> Regards,
>
>
> André Costa Lima
>
>
> 2014-12-01 15:04 GMT+00:00 Aki Yoshida <[email protected]>:
>
>> Your post is kind of too long and I am not really seeing how your
>> client is calling the method and how your service is setting the
>> value,
>> Could you compare that to the cxf's sample code at
>> samples/soap_header/src/main/java/demo/soap_header/(client|server)?
>>
>>
>> 2014-11-28 18:21 GMT+01:00 André Costa Lima <[email protected]>:
>> > Hello,
>> >
>> > I am a new CXF (v3.0.0) user. Actually, I am new to the whole JAX-WS
>> thing.
>> > :)
>> > I have set up a JAX-WS service, SOAP over JMS with ActiveMQ. The server
>> > methods invocations are working fine, but I am having some trouble
>> > regarding the Holder class.
>> > I am using the holder class as a container for the outgoing SOAP header
>> for
>> > all web methods, as specified in the WSDL.
>> > I started from WSDL first with Spring configuration for both clients and
>> > servers.
>> > I have provided an async binding to the wsdl2java tool to generate the
>> > async method signatures, because I want to use those instead of the sync
>> > ones.
>> >
>> > The problem is that when I pass the Holder object to the client method
>> and
>> > assign the value field in the server, the client sees it as null but no
>> > exception is thrown.
>> > Further, if I put the @UseAsyncMethod annotation to command CXF to use
>> the
>> > pure async method I have implemented, CXF throws NPE at
>> > HolderOutInterceptor class.
>> > I noticed that if the web method has no arguments besides the SOAP
>> headers
>> > everything works just fine, otherwise what I have described above
>> happens.
>> >
>> > Below there are my configurations.
>> >
>> > Maven plugin:
>> >
>> > <plugin>
>> > <groupId>org.apache.cxf</groupId>
>> > <artifactId>cxf-codegen-plugin</artifactId>
>> > <executions>
>> > <execution>
>> > <id>generate-sources</id>
>> > <phase>generate-sources</phase>
>> > <configuration>
>> > <defaultOptions>
>> > <bindingFiles>
>> >
>> >
>> <bindingFile>${basedir}/src/main/resources/oa_types-binding.xml</bindingFile>
>> >
>> >
>> <bindingFile>${basedir}/src/main/resources/oa_async-binding.xml</bindingFile>
>> > </bindingFiles>
>> >
>> > <noAddressBinding>true</noAddressBinding>
>> > </defaultOptions>
>> > <sourceRoot>
>> >
>> > ${basedir}/target/generated-sources/cxf
>> > </sourceRoot>
>> > <wsdlOptions>
>> > <wsdlOption>
>> >
>> > <wsdl>${basedir}/src/main/resources/OA_Server.wsdl</wsdl>
>> >
>> > <wsdlLocation>classpath:OA_Server.wsdl</wsdlLocation>
>> > <extraargs>
>> > <extraarg>-p</extraarg>
>> > <extraarg>
>> >
>> http://www.multispeak.org/Version_4.1_Release=org.multispeak.version_4_1_6.OA
>> > </extraarg>
>> > <extraarg>-p</extraarg>
>> >
>> > <extraarg>cpsm_V4.1_Release=org.cspm.version_4_1.OA</extraarg>
>> > <extraarg>-p</extraarg>
>> >
>> > <extraarg>gml_V4.1_Release=org.gml.version_4_1.OA</extraarg>
>> > <extraarg>-p</extraarg>
>> > <extraarg>
>> > http://www.w3.org/1999/xlink=org.w3.xlink.OA</extraarg>
>> > <extraarg>-p</extraarg>
>> > <extraarg>
>> > http://www.w3.org/2001/XMLSchema=org.w3.xmlschema.OA</extraarg>
>> > <!--
>> > <extraarg>-p</extraarg> -->
>> > <!--
>> > <extraarg>org.multispeak.version_4_1_6.OA</extraarg> -->
>> > <!--
>> > <extraarg>-impl</extraarg> -->
>> > <!--
>> > <extraarg>-server</extraarg> -->
>> > <!--
>> > <extraarg>-client</extraarg> -->
>> >
>> > <extraarg>-autoNameResolution</extraarg>
>> > <extraarg>-fe</extraarg>
>> >
>> <extraarg>jaxws21</extraarg>
>> >
>> <extraarg>-exsh</extraarg>
>> >
>> <extraarg>true</extraarg>
>> > </extraargs>
>> > </wsdlOption>
>> > </wsdlOptions>
>> > </configuration>
>> > <goals>
>> > <goal>wsdl2java</goal>
>> > </goals>
>> > </execution>
>> > </executions>
>> > </plugin>
>> >
>> > Spring:
>> >
>> > <beans:bean id="connection-factory"
>> > class="org.apache.activemq.ActiveMQConnectionFactory">
>> > <beans:property name="brokerURL"
>> > value="${outside.multispeak.jms.broker}"/>
>> > </beans:bean>
>> >
>> > <beans:bean id="pooled-connection-factory"
>> > class="org.apache.activemq.pool.PooledConnectionFactory"
>> > destroy-method="stop">
>> > <beans:constructor-arg index="0" ref="connection-factory"/>
>> > <beans:property name="expiryTimeout"
>> > value="${outside.multispeak.jms.pool.expiryTimeout}"/>
>> > </beans:bean>
>> >
>> > <!-- multispeak call handling interface (OA) -->
>> >
>> > <!-- client side -->
>> >
>> > <jaxws:client
>> > id="multispeak-oa-client"
>> > xmlns:ns="http://www.multispeak.org/Version_4.1_Release"
>> > serviceClass="org.multispeak.version_4_1_6.OA.OAServerSoap"
>> > serviceName="ns:OA_Server"
>> > endpointName="ns:OA_ServerSoap"
>> > address="#{'jms:queue:'
>> > + '${outside.multispeak.oa.jms.queue}'
>> > + '?timeToLive=' +
>> '${outside.multispeak.jms.timeToLive}'
>> > + '&requestTimeout' +
>> > '${outside.multispeak.jms.receiveTimeout}'}"
>> > wsdlLocation="classpath:OA_Server.wsdl">
>> > <jaxws:features>
>> > <beans:bean
>> class="org.apache.cxf.feature.LoggingFeature "/>
>> > <beans:bean
>> > class="org.apache.cxf.transport.jms.ConnectionFactoryFeature">
>> > <beans:constructor-arg index="0"
>> > ref="pooled-connection-factory"/>
>> > </beans:bean>
>> > </jaxws:features>
>> > </jaxws:client>
>> >
>> > <!-- server side -->
>> >
>> > <beans:bean id="forwarding-oa-server"
>> > class="${outside.multispeak.oa.server}" />
>> > <beans:bean id="multispeak-oa-obj-factory"
>> > class="org.multispeak.version_4_1_6.OA.ObjectFactory" />
>> >
>> > <jaxws:endpoint
>> > id="multispeak-oa-server"
>> > xmlns:tns="http://www.multispeak.org/Version_4.1_Release"
>> >
>> implementor="x.x.outside.multispeak.oa.server.OAServerSoapImpl"
>> > serviceName="tns:OA_Server"
>> > endpointName="tns:OA_ServerSoap"
>> > address="#{'jms:queue:' +
>> '${outside.multispeak.oa.jms.queue}'
>> > + ''}"
>> > publish="false"
>> > wsdlLocation="classpath:OA_Server.wsdl">
>> > <jaxws:features>
>> > <beans:bean
>> class="org.apache.cxf.feature.LoggingFeature "/>
>> > <beans:bean
>> > class="org.apache.cxf.transport.jms.ConnectionFactoryFeature">
>> > <beans:constructor-arg index="0"
>> > ref="pooled-connection-factory"/>
>> > </beans:bean>
>> > </jaxws:features>
>> > </jaxws:endpoint>
>> >
>> > The Service Endpoint Interface generated.
>> > There are two methods: pingURL and odEventNotification.
>> > pingURLAsync, as it has no arguments besides the headers, works just
>> fine,
>> > but odEventNotificationAsync does not.
>> > Note that I am using an AsyncHandler of course. In case of pingURLAsync
>> I
>> > can get Holder.value in the handleResponse(Response<T>) callback without
>> > any problems.
>> >
>> > @WebService(targetNamespace = "
>> http://www.multispeak.org/Version_4.1_Release",
>> > name = "OA_ServerSoap")
>> > @XmlSeeAlso({ObjectFactory.class, org.w3.xlink.OA.ObjectFactory.class,
>> > org.gml.version_4_1.OA.ObjectFactory.class,
>> > org.cspm.version_4_1.OA.ObjectFactory.class})
>> > public interface OAServerSoap {
>> >
>> > ...
>> >
>> > @RequestWrapper(localName = "PingURL", targetNamespace = "
>> > http://www.multispeak.org/Version_4.1_Release", className =
>> > "org.multispeak.version_4_1_6.OA.PingURL")
>> > @ResponseWrapper(localName = "PingURLResponse", targetNamespace = "
>> > http://www.multispeak.org/Version_4.1_Release", className =
>> > "org.multispeak.version_4_1_6.OA.PingURLResponse")
>> > @WebMethod(operationName = "PingURL")
>> > public Response<org.multispeak.version_4_1_6.OA.PingURLResponse>
>> > pingURLAsync(
>> > @WebParam(name = "MultiSpeakMsgHeader", targetNamespace = "
>> > http://www.multispeak.org/Version_4.1_Release", header = true)
>> > MultiSpeakMsgHeader multiSpeakMsgHeader,
>> > @WebParam(mode = WebParam.Mode.OUT, name =
>> "MultiSpeakMsgHeader",
>> > targetNamespace = "http://www.multispeak.org/Version_4.1_Release",
>> header =
>> > true)
>> > javax.xml.ws.Holder<MultiSpeakMsgHeader> multiSpeakMsgHeader1
>> > );
>> >
>> > @RequestWrapper(localName = "PingURL", targetNamespace = "
>> > http://www.multispeak.org/Version_4.1_Release", className =
>> > "org.multispeak.version_4_1_6.OA.PingURL")
>> > @ResponseWrapper(localName = "PingURLResponse", targetNamespace = "
>> > http://www.multispeak.org/Version_4.1_Release", className =
>> > "org.multispeak.version_4_1_6.OA.PingURLResponse")
>> > @WebMethod(operationName = "PingURL")
>> > public Future<?> pingURLAsync(
>> > @WebParam(name = "MultiSpeakMsgHeader", targetNamespace = "
>> > http://www.multispeak.org/Version_4.1_Release", header = true)
>> > MultiSpeakMsgHeader multiSpeakMsgHeader,
>> > @WebParam(mode = WebParam.Mode.OUT, name =
>> "MultiSpeakMsgHeader",
>> > targetNamespace = "http://www.multispeak.org/Version_4.1_Release",
>> header =
>> > true)
>> > javax.xml.ws.Holder<MultiSpeakMsgHeader> multiSpeakMsgHeader1,
>> > @WebParam(name = "asyncHandler", targetNamespace = "")
>> > AsyncHandler<org.multispeak.version_4_1_6.OA.PingURLResponse>
>> > asyncHandler
>> > );
>> >
>> > /**
>> > * Requester pings URL of OA to see if it is alive. Returns
>> > errorObject(s) as necessary to communicate application status.
>> > */
>> > @WebResult(name = "PingURLResult", targetNamespace = "
>> > http://www.multispeak.org/Version_4.1_Release")
>> > @RequestWrapper(localName = "PingURL", targetNamespace = "
>> > http://www.multispeak.org/Version_4.1_Release", className =
>> > "org.multispeak.version_4_1_6.OA.PingURL")
>> > @WebMethod(operationName = "PingURL", action = "
>> > http://www.multispeak.org/Version_4.1_Release/PingURL")
>> > @ResponseWrapper(localName = "PingURLResponse", targetNamespace = "
>> > http://www.multispeak.org/Version_4.1_Release", className =
>> > "org.multispeak.version_4_1_6.OA.PingURLResponse")
>> > public org.multispeak.version_4_1_6.OA.ArrayOfErrorObject pingURL(
>> > @WebParam(name = "MultiSpeakMsgHeader", targetNamespace = "
>> > http://www.multispeak.org/Version_4.1_Release", header = true)
>> > MultiSpeakMsgHeader multiSpeakMsgHeader,
>> > @WebParam(mode = WebParam.Mode.OUT, name =
>> "MultiSpeakMsgHeader",
>> > targetNamespace = "http://www.multispeak.org/Version_4.1_Release",
>> header =
>> > true)
>> > javax.xml.ws.Holder<MultiSpeakMsgHeader> multiSpeakMsgHeader1
>> > );
>> >
>> > @RequestWrapper(localName = "ODEventNotification", targetNamespace = "
>> > http://www.multispeak.org/Version_4.1_Release", className =
>> > "org.multispeak.version_4_1_6.OA.ODEventNotification")
>> > @ResponseWrapper(localName = "ODEventNotificationResponse",
>> > targetNamespace = "http://www.multispeak.org/Version_4.1_Release",
>> > className =
>> "org.multispeak.version_4_1_6.OA.ODEventNotificationResponse")
>> > @WebMethod(operationName = "ODEventNotification")
>> > public
>> > Response<org.multispeak.version_4_1_6.OA.ODEventNotificationResponse>
>> > odEventNotificationAsync(
>> > @WebParam(name = "ODEvents", targetNamespace = "
>> > http://www.multispeak.org/Version_4.1_Release")
>> > org.multispeak.version_4_1_6.OA.ArrayOfOutageDetectionEvent
>> > odEvents,
>> > @WebParam(name = "transactionID", targetNamespace = "
>> > http://www.multispeak.org/Version_4.1_Release")
>> > java.lang.String transactionID,
>> > @WebParam(name = "MultiSpeakMsgHeader", targetNamespace = "
>> > http://www.multispeak.org/Version_4.1_Release", header = true)
>> > MultiSpeakMsgHeader multiSpeakMsgHeader,
>> > @WebParam(mode = WebParam.Mode.OUT, name =
>> "MultiSpeakMsgHeader",
>> > targetNamespace = "http://www.multispeak.org/Version_4.1_Release",
>> header =
>> > true)
>> > javax.xml.ws.Holder<MultiSpeakMsgHeader> multiSpeakMsgHeader1
>> > );
>> >
>> > @RequestWrapper(localName = "ODEventNotification", targetNamespace
>> = "
>> > http://www.multispeak.org/Version_4.1_Release", className =
>> > "org.multispeak.version_4_1_6.OA.ODEventNotification")
>> > @ResponseWrapper(localName = "ODEventNotificationResponse",
>> > targetNamespace = "http://www.multispeak.org/Version_4.1_Release",
>> > className =
>> "org.multispeak.version_4_1_6.OA.ODEventNotificationResponse")
>> > @WebMethod(operationName = "ODEventNotification")
>> > public Future<?> odEventNotificationAsync(
>> > @WebParam(name = "ODEvents", targetNamespace = "
>> > http://www.multispeak.org/Version_4.1_Release")
>> > org.multispeak.version_4_1_6.OA.ArrayOfOutageDetectionEvent
>> > odEvents,
>> > @WebParam(name = "transactionID", targetNamespace = "
>> > http://www.multispeak.org/Version_4.1_Release")
>> > java.lang.String transactionID,
>> > @WebParam(name = "MultiSpeakMsgHeader", targetNamespace = "
>> > http://www.multispeak.org/Version_4.1_Release", header = true)
>> > MultiSpeakMsgHeader multiSpeakMsgHeader,
>> > @WebParam(mode = WebParam.Mode.OUT, name =
>> "MultiSpeakMsgHeader",
>> > targetNamespace = "http://www.multispeak.org/Version_4.1_Release",
>> header =
>> > true)
>> > javax.xml.ws.Holder<MultiSpeakMsgHeader> multiSpeakMsgHeader1,
>> > @WebParam(name = "asyncHandler", targetNamespace = "")
>> >
>> >
>> AsyncHandler<org.multispeak.version_4_1_6.OA.ODEventNotificationResponse>
>> > asyncHandler
>> > );
>> >
>> > /**
>> > * Publisher notifies OA of a change in OutageDetectionEvents by
>> > sending an array of changed OutageDetectionEvent objects. OA returns
>> > information about failed transactions using an array of errorObjects.
>> The
>> > message header attribute 'registrationID' should be added to all publish
>> > messages to indicate to the subscriber under which registrationID they
>> > received this notification data.
>> > */
>> > @WebResult(name = "ODEventNotificationResult", targetNamespace = "
>> > http://www.multispeak.org/Version_4.1_Release")
>> > @RequestWrapper(localName = "ODEventNotification", targetNamespace
>> = "
>> > http://www.multispeak.org/Version_4.1_Release", className =
>> > "org.multispeak.version_4_1_6.OA.ODEventNotification")
>> > @WebMethod(operationName = "ODEventNotification", action = "
>> > http://www.multispeak.org/Version_4.1_Release/ODEventNotification")
>> > @ResponseWrapper(localName = "ODEventNotificationResponse",
>> > targetNamespace = "http://www.multispeak.org/Version_4.1_Release",
>> > className =
>> "org.multispeak.version_4_1_6.OA.ODEventNotificationResponse")
>> > public org.multispeak.version_4_1_6.OA.ArrayOfErrorObject
>> > odEventNotification(
>> > @WebParam(name = "ODEvents", targetNamespace = "
>> > http://www.multispeak.org/Version_4.1_Release")
>> > org.multispeak.version_4_1_6.OA.ArrayOfOutageDetectionEvent
>> > odEvents,
>> > @WebParam(name = "transactionID", targetNamespace = "
>> > http://www.multispeak.org/Version_4.1_Release")
>> > java.lang.String transactionID,
>> > @WebParam(name = "MultiSpeakMsgHeader", targetNamespace = "
>> > http://www.multispeak.org/Version_4.1_Release", header = true)
>> > MultiSpeakMsgHeader multiSpeakMsgHeader,
>> > @WebParam(mode = WebParam.Mode.OUT, name =
>> "MultiSpeakMsgHeader",
>> > targetNamespace = "http://www.multispeak.org/Version_4.1_Release",
>> header =
>> > true)
>> > javax.xml.ws.Holder<MultiSpeakMsgHeader> multiSpeakMsgHeader1
>> > );
>> >
>> > ...
>> >
>> > The SEI implementation.
>> > Both pingURL and odEventNotification simply forward the call to a
>> delegate.
>> > Both inbound and outbound headers are placed in a common container and
>> > handed over to the delegate.
>> > The async methods simply execute the calls in background and end up
>> calling
>> > the sync methods internally.
>> > The line
>> > mspkHeader.setOutbound(mObjectFactory.createMultiSpeakMsgHeader());
>> > simply calls multiSpeakMsgHeader1.value = ...
>> >
>> > @WebService(
>> > serviceName = "OA_Server",
>> > portName = "OA_ServerSoap",
>> > targetNamespace = "
>> http://www.multispeak.org/Version_4.1_Release",
>> > wsdlLocation = "classpath:OA_Server.wsdl",
>> > endpointInterface =
>> "org.multispeak.version_4_1_6.OA.OAServerSoap")
>> > public class OAServerSoapImpl implements OAServerSoap {
>> >
>> > ...
>> >
>> > @Override
>> > public ArrayOfErrorObject pingURL(MultiSpeakMsgHeader
>> > multiSpeakMsgHeader, Holder<MultiSpeakMsgHeader> multiSpeakMsgHeader1) {
>> > LOG.entry(multiSpeakMsgHeader, multiSpeakMsgHeader1);
>> > try {
>> > Preconditions.checkNotNull(multiSpeakMsgHeader);
>> > Preconditions.checkNotNull(multiSpeakMsgHeader1);
>> > MultiSpeakInOutHeader<MultiSpeakMsgHeader> mspkHeader =
>> > MultiSpeakInOutHeader.of(multiSpeakMsgHeader, multiSpeakMsgHeader1);
>> >
>> > mspkHeader.setOutbound(mObjectFactory.createMultiSpeakMsgHeader());
>> > return
>> > LOG.exit(Preconditions.checkNotNull(mDelegate.pingURL(mspkHeader)));
>> > } catch (Throwable t) {
>> > throw LOG.throwing(Throwables.unchecked(t));
>> > }
>> > }
>> >
>> > @Override
>> > @UseAsyncMethod
>> > public ArrayOfErrorObject
>> odEventNotification(ArrayOfOutageDetectionEvent
>> > odEvents, String transactionID, MultiSpeakMsgHeader multiSpeakMsgHeader,
>> > Holder<MultiSpeakMsgHeader> multiSpeakMsgHeader1) {
>> > LOG.entry(odEvents, transactionID, multiSpeakMsgHeader,
>> > multiSpeakMsgHeader1);
>> > try {
>> > Preconditions.checkNotNull(odEvents, "odEvents");
>> > Preconditions.checkNotNull(transactionID, "transactionID");
>> > Preconditions.checkNotNull(multiSpeakMsgHeader,
>> > "multiSpeakMsgHeader");
>> > Preconditions.checkNotNull(multiSpeakMsgHeader1,
>> > "multiSpeakMsgHeader1");
>> > MultiSpeakInOutHeader<MultiSpeakMsgHeader> mspkHeader =
>> > MultiSpeakInOutHeader.of(multiSpeakMsgHeader, multiSpeakMsgHeader1);
>> >
>> > mspkHeader.setOutbound(mObjectFactory.createMultiSpeakMsgHeader());
>> > return
>> >
>> LOG.exit(Preconditions.checkNotNull(mDelegate.odEventNotification(odEvents,
>> > transactionID, mspkHeader)));
>> > } catch (Throwable t) {
>> > throw LOG.throwing(Throwables.unchecked(t));
>> > }
>> > }
>> >
>> > @Override
>> > public Future<?> pingURLAsync(MultiSpeakMsgHeader
>> multiSpeakMsgHeader,
>> > Holder<MultiSpeakMsgHeader> multiSpeakMsgHeader1,
>> > AsyncHandler<PingURLResponse> asyncHandler) {
>> > LOG.entry(multiSpeakMsgHeader, multiSpeakMsgHeader1,
>> asyncHandler);
>> > try {
>> > PingURLAsync response = new PingURLAsync(this,
>> > multiSpeakMsgHeader, multiSpeakMsgHeader1, asyncHandler);
>> > mExecutor.submit(response);
>> > return LOG.exit(response.getServerAsyncResponse());
>> > } catch (Throwable t) {
>> > throw LOG.throwing(Throwables.unchecked(t));
>> > }
>> > }
>> >
>> > @Override
>> > public Future<?>
>> odEventNotificationAsync(ArrayOfOutageDetectionEvent
>> > odEvents, String transactionID, MultiSpeakMsgHeader multiSpeakMsgHeader,
>> > Holder<MultiSpeakMsgHeader> multiSpeakMsgHeader1,
>> > AsyncHandler<ODEventNotificationResponse> asyncHandler) {
>> > LOG.entry(odEvents, transactionID, multiSpeakMsgHeader,
>> > multiSpeakMsgHeader1);
>> > try {
>> > OdEventNotificationAsync response = new
>> > OdEventNotificationAsync(this, odEvents, transactionID,
>> > multiSpeakMsgHeader, multiSpeakMsgHeader1, asyncHandler);
>> > mExecutor.submit(response);
>> > return LOG.exit(response.getServerAsyncResponse());
>> > } catch (Throwable t) {
>> > throw LOG.throwing(Throwables.unchecked(t));
>> > }
>> > }
>> >
>> > ...
>> >
>> > The invocation test.
>> >
>> > ...
>> > Holder<MultiSpeakMsgHeader> headerOut = new
>> Holder<MultiSpeakMsgHeader>();
>> > Future<?> future = mServer.odEventNotificationAsync(new
>> > ArrayOfOutageDetectionEvent(), "0", new MultiSpeakMsgHeader(),
>> headerOut,
>> > new AsyncHandlerImpl(headerOut));
>> > ...
>> > private static class AsyncHandlerImpl implements
>> > AsyncHandler<ODEventNotificationResponse> {
>> >
>> > private static final XLogger LOG =
>> > XLoggerFactory.getXLogger(AsyncHandlerImpl.class);
>> >
>> > private final Holder<MultiSpeakMsgHeader> mHeaderOut;
>> >
>> > public AsyncHandlerImpl(Holder<MultiSpeakMsgHeader> headerOut) {
>> > mHeaderOut = headerOut;
>> > }
>> >
>> > @Override
>> > public void handleResponse(Response<ODEventNotificationResponse>
>> > res) {
>> > try {
>> > if (LOG.isTraceEnabled()) {
>> > LOG.trace("Callback: {}", res.toString());
>> > }
>> > ODEventNotificationResponse mspkRsp = res.get();
>> > if (LOG.isTraceEnabled()) {
>> > LOG.trace("OA odEventNotificationAsync() >>
>> callback:
>> > {} > multispeak header: {}", mspkRsp.toString(), mHeaderOut.value);
>> > // for (Entry<String, Object> entry :
>> > res.getContext().entrySet()) {
>> > // LOG.trace("Response context >> string > {} >>
>> > object > {}", entry.getKey(), entry.getValue());
>> > // }
>> > }
>> > } catch (Exception e) {
>> > LOG.catching(e);
>> > }
>> > }
>> > }
>> >
>> > As I said above, a NPE is thrown in HolderOutInterceptor when the
>> response
>> > is returned to the client if I use the pure async method with
>> > @UseAsyncMethod,
>> > or mHeaderOut.value is null if I don't. Now, the stacktrace:
>> >
>> > 28-11-2014 17:15:07.997 WARN [OA Thread-#1]
>> > org.apache.cxf.phase.PhaseInterceptorChain doLog - Interceptor for {
>> >
>> http://www.multispeak.org/Version_4.1_Release}OA_Server#{http://www.multispeak.org/Version_4.1_Release}ODEventNotification
>> > has thrown exception, unwinding now
>> > java.lang.NullPointerException
>> > at
>> >
>> org.apache.cxf.jaxws.interceptors.HolderOutInterceptor.handleMessage(HolderOutInterceptor.java:90)
>> > ~[cxf-rt-frontend-jaxws-3.0.0.jar:3.0.0]
>> > at
>> >
>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
>> > [cxf-core-3.0.0.jar:3.0.0]
>> > at
>> >
>> org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage(OutgoingChainInterceptor.java:81)
>> > [cxf-core-3.0.0.jar:3.0.0]
>> > at
>> >
>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
>> > [cxf-core-3.0.0.jar:3.0.0]
>> > at
>> >
>> org.apache.cxf.phase.PhaseInterceptorChain.resume(PhaseInterceptorChain.java:277)
>> > [cxf-core-3.0.0.jar:3.0.0]
>> > at
>> >
>> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:78)
>> > [cxf-core-3.0.0.jar:3.0.0]
>> > at
>> >
>> org.apache.cxf.transport.jms.continuations.JMSContinuation.doResume(JMSContinuation.java:109)
>> > [cxf-rt-transports-jms-3.0.0.jar:3.0.0]
>> > at
>> >
>> org.apache.cxf.transport.jms.continuations.JMSContinuation.resume(JMSContinuation.java:98)
>> > [cxf-rt-transports-jms-3.0.0.jar:3.0.0]
>> > at
>> >
>> org.apache.cxf.jaxws.AbstractJAXWSMethodInvoker$JaxwsServerHandler.handleResponse(AbstractJAXWSMethodInvoker.java:193)
>> > [cxf-rt-frontend-jaxws-3.0.0.jar:3.0.0]
>> > at
>> >
>> x.x.outside.common.ws.cxf.endpoint.server.AbstractAsyncResponseHandler.fireResult(AbstractAsyncResponseHandler.java:55)
>> > [classes/:?]
>> > at
>> >
>> x.x.outside.common.ws.cxf.endpoint.server.AbstractAsyncResponseHandler.fireAsyncResult(AbstractAsyncResponseHandler.java:46)
>> > [classes/:?]
>> > at
>> >
>> x.x.outside.common.ws.cxf.endpoint.server.AbstractAsyncResponseHandler.postProcess(AbstractAsyncResponseHandler.java:41)
>> > [classes/:?]
>> > at
>> >
>> x.x.outside.common.util.ConditionEnforcerHandlerRunnable$1.invoke(ConditionEnforcerHandlerRunnable.java:10)
>> > [classes/:?]
>> > at
>> >
>> x.x.outside.common.util.ConditionEnforcerHandler$2.invoke(ConditionEnforcerHandler.java:25)
>> > [classes/:?]
>> > at
>> > x.x.outside.common.util.ExceptionHandler.handle(ExceptionHandler.java:7)
>> > [classes/:?]
>> > at
>> >
>> x.x.outside.common.util.ConditionEnforcerHandler.handle(ConditionEnforcerHandler.java:20)
>> > [classes/:?]
>> > at
>> >
>> x.x.outside.common.util.ConditionEnforcerHandlerRunnable.run(ConditionEnforcerHandlerRunnable.java:7)
>> > [classes/:?]
>> > at
>> > java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
>> > [?:1.6.0_33]
>> > at
>> java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
>> > [?:1.6.0_33]
>> > at java.util.concurrent.FutureTask.run(FutureTask.java:166)
>> [?:1.6.0_33]
>> > at
>> >
>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)
>> > [?:1.6.0_33]
>> > at
>> >
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>> > [?:1.6.0_33]
>> > at java.lang.Thread.run(Thread.java:701) [?:1.6.0_33]
>> > 28-11-2014 17:15:08.044 TRACE [ActiveMQ Session Task-1]
>> > x.x.outside.test.multispeak.OAServerTestAsyncCallback$AsyncHandlerImpl
>> > handleResponse - Callback:
>> org.apache.cxf.jaxws.JaxwsClientCallback$2@cc6f8c
>> > 28-11-2014 17:15:08.044 ERROR [ActiveMQ Session Task-1]
>> > x.x.outside.test.multispeak.OAServerTestAsyncCallback$AsyncHandlerImpl
>> > handleResponse - catching
>> > java.util.concurrent.ExecutionException:
>> > org.apache.cxf.binding.soap.SoapFault: Fault occurred while processing.
>> > at
>> >
>> org.apache.cxf.jaxws.JaxwsClientCallback$2.get(JaxwsClientCallback.java:99)
>> > ~[cxf-rt-frontend-jaxws-3.0.0.jar:3.0.0]
>> > at
>> >
>> x.x.outside.test.multispeak.OAServerTestAsyncCallback$AsyncHandlerImpl.handleResponse(OAServerTestAsyncCallback.java:81)
>> > [classes/:?]
>> > at
>> >
>> org.apache.cxf.jaxws.JaxwsClientCallback.handleException(JaxwsClientCallback.java:87)
>> > [cxf-rt-frontend-jaxws-3.0.0.jar:3.0.0]
>> > at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:821)
>> > [cxf-core-3.0.0.jar:3.0.0]
>> > at
>> >
>> org.apache.cxf.transport.jms.JMSConduit.processReplyMessage(JMSConduit.java:413)
>> > [cxf-rt-transports-jms-3.0.0.jar:3.0.0]
>> > at
>> > org.apache.cxf.transport.jms.JMSConduit.onMessage(JMSConduit.java:380)
>> > [cxf-rt-transports-jms-3.0.0.jar:3.0.0]
>> > at
>> >
>> org.apache.cxf.transport.jms.util.MessageListenerContainer$LocalTransactionalMessageListener.onMessage(MessageListenerContainer.java:120)
>> > [cxf-rt-transports-jms-3.0.0.jar:3.0.0]
>> > at
>> >
>> org.apache.activemq.ActiveMQMessageConsumer.dispatch(ActiveMQMessageConsumer.java:1361)
>> > [activemq-client-5.9.1.jar:5.9.1]
>> > at
>> >
>> org.apache.activemq.ActiveMQSessionExecutor.dispatch(ActiveMQSessionExecutor.java:131)
>> > [activemq-client-5.9.1.jar:5.9.1]
>> > at
>> >
>> org.apache.activemq.ActiveMQSessionExecutor.iterate(ActiveMQSessionExecutor.java:202)
>> > [activemq-client-5.9.1.jar:5.9.1]
>> > at
>> >
>> org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:133)
>> > [activemq-client-5.9.1.jar:5.9.1]
>> > at
>> >
>> org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:48)
>> > [activemq-client-5.9.1.jar:5.9.1]
>> > at
>> >
>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)
>> > [?:1.6.0_33]
>> > at
>> >
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>> > [?:1.6.0_33]
>> > at java.lang.Thread.run(Thread.java:701) [?:1.6.0_33]
>> > Caused by: org.apache.cxf.binding.soap.SoapFault: Fault occurred while
>> > processing.
>> > at
>> >
>> org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.unmarshalFault(Soap11FaultInInterceptor.java:84)
>> > ~[cxf-rt-bindings-soap-3.0.0.jar:3.0.0]
>> > at
>> >
>> org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:51)
>> > ~[cxf-rt-bindings-soap-3.0.0.jar:3.0.0]
>> > at
>> >
>> org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:40)
>> > ~[cxf-rt-bindings-soap-3.0.0.jar:3.0.0]
>> > at
>> >
>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
>> > ~[cxf-core-3.0.0.jar:3.0.0]
>> > at
>> >
>> org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:113)
>> > ~[cxf-core-3.0.0.jar:3.0.0]
>> > at
>> >
>> org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:69)
>> > ~[cxf-rt-bindings-soap-3.0.0.jar:3.0.0]
>> > at
>> >
>> org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:34)
>> > ~[cxf-rt-bindings-soap-3.0.0.jar:3.0.0]
>> > at
>> >
>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
>> > ~[cxf-core-3.0.0.jar:3.0.0]
>> > at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:780)
>> > ~[cxf-core-3.0.0.jar:3.0.0]
>> > ... 11 more
>> > 28-11-2014 17:15:08.045 ERROR
>> > [x.x.outside.test.multispeak.OAServerTestAsyncCallback-1]
>> > x.x.outside.test.multispeak.OAServerTestAsyncCallback run - catching
>> > java.util.concurrent.ExecutionException:
>> > org.apache.cxf.binding.soap.SoapFault: Fault occurred while processing.
>> > at
>> org.apache.cxf.endpoint.ClientCallback.get(ClientCallback.java:169)
>> > ~[cxf-core-3.0.0.jar:3.0.0]
>> > at
>> >
>> org.apache.cxf.jaxws.JaxwsResponseCallback.get(JaxwsResponseCallback.java:54)
>> > ~[cxf-rt-frontend-jaxws-3.0.0.jar:3.0.0]
>> > at
>> >
>> x.x.outside.test.multispeak.OAServerTestAsyncCallback$1.run(OAServerTestAsyncCallback.java:52)
>> > [classes/:?]
>> > at
>> >
>> x.x.outside.test.multispeak.spi.AbstractMultispeakServerTest$2.run(AbstractMultispeakServerTest.java:112)
>> > [classes/:?]
>> > at
>> > java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
>> > [?:1.6.0_33]
>> > at
>> java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
>> > [?:1.6.0_33]
>> > at java.util.concurrent.FutureTask.run(FutureTask.java:166)
>> [?:1.6.0_33]
>> > at
>> >
>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146)
>> > [?:1.6.0_33]
>> > at
>> >
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>> > [?:1.6.0_33]
>> > at java.lang.Thread.run(Thread.java:701) [?:1.6.0_33]
>> > Caused by: org.apache.cxf.binding.soap.SoapFault: Fault occurred while
>> > processing.
>> > at
>> >
>> org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.unmarshalFault(Soap11FaultInInterceptor.java:84)
>> > ~[cxf-rt-bindings-soap-3.0.0.jar:3.0.0]
>> > at
>> >
>> org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:51)
>> > ~[cxf-rt-bindings-soap-3.0.0.jar:3.0.0]
>> > at
>> >
>> org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:40)
>> > ~[cxf-rt-bindings-soap-3.0.0.jar:3.0.0]
>> > at
>> >
>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
>> > ~[cxf-core-3.0.0.jar:3.0.0]
>> > at
>> >
>> org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:113)
>> > ~[cxf-core-3.0.0.jar:3.0.0]
>> > at
>> >
>> org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:69)
>> > ~[cxf-rt-bindings-soap-3.0.0.jar:3.0.0]
>> > at
>> >
>> org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:34)
>> > ~[cxf-rt-bindings-soap-3.0.0.jar:3.0.0]
>> > at
>> >
>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
>> > ~[cxf-core-3.0.0.jar:3.0.0]
>> > at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:780)
>> > ~[cxf-core-3.0.0.jar:3.0.0]
>> > at
>> >
>> org.apache.cxf.transport.jms.JMSConduit.processReplyMessage(JMSConduit.java:413)
>> > ~[cxf-rt-transports-jms-3.0.0.jar:3.0.0]
>> > at
>> > org.apache.cxf.transport.jms.JMSConduit.onMessage(JMSConduit.java:380)
>> > ~[cxf-rt-transports-jms-3.0.0.jar:3.0.0]
>> > at
>> >
>> org.apache.cxf.transport.jms.util.MessageListenerContainer$LocalTransactionalMessageListener.onMessage(MessageListenerContainer.java:120)
>> > ~[cxf-rt-transports-jms-3.0.0.jar:3.0.0]
>> > at
>> >
>> org.apache.activemq.ActiveMQMessageConsumer.dispatch(ActiveMQMessageConsumer.java:1361)
>> > ~[activemq-client-5.9.1.jar:5.9.1]
>> > at
>> >
>> org.apache.activemq.ActiveMQSessionExecutor.dispatch(ActiveMQSessionExecutor.java:131)
>> > ~[activemq-client-5.9.1.jar:5.9.1]
>> > at
>> >
>> org.apache.activemq.ActiveMQSessionExecutor.iterate(ActiveMQSessionExecutor.java:202)
>> > ~[activemq-client-5.9.1.jar:5.9.1]
>> > at
>> >
>> org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:133)
>> > ~[activemq-client-5.9.1.jar:5.9.1]
>> > at
>> >
>> org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:48)
>> > ~[activemq-client-5.9.1.jar:5.9.1]
>> > ... 3 more
>> >
>> > Is this a configuration problem? Am I doing something stupid?
>> > Thanks!
>> >
>> > Regards,
>> >
>> > André Costa Lima
>>
>
>