Thanks. I will take a look into it. With a quick glance, I noticed that you set an Executor on the service itself. I am not doing this. I just have an Executor on server side to run the asynchronous requests, instead of new Thread()... as shown in the sample. So, is that a client side Executor?
If you remove @UseAsyncMethod, what is the expected behaviour if the client calls the async invariant? André Costa Lima 2014-12-04 16:54 GMT+00:00 Aki Yoshida <[email protected]>: > I just created one project that combines the soap_header and > jaxws_async samples. And this is working fine as one expects. > > Since this project is straightforward and will add not much value to > the current sample collection but rather make the collection more > crowded with overlapping samples, so I am not planning to add it to > the cxf's samples. > > I uploaded this project to my dropbox here. So you can compare it to > your example. > > https://www.dropbox.com/s/hexnh3jgy9o8c61/cxf_samples_jaxws_async_soap_header.tar.gz?dl=0 > > regards, aki > > 2014-12-02 17:31 GMT+01:00 André Costa Lima <[email protected]>: > > Alright. Yes, the sync case works perfectly. Should I submit a bug in > JIRA? > > > > André Costa Lima > > > > > > 2014-12-02 16:27 GMT+00:00 Aki Yoshida <[email protected]>: > >> > >> Hi André, > >> I thought you were getting no value returned for the synchronous case > >> and when using the async mode, getting an NPE from one of the > >> interceptors. > >> So I wanted to have the first issue fixed that might fix the second > issue. > >> > >> But if you didn't have any issue with the sync Holder case, I have to > >> look into the async case. It looks like there is some mismatch in the > >> defined operations and the values passed in the context. I can't tell > >> what is causing this issue. I have to take a look at it. > >> > >> regards, aki > >> > >> 2014-12-02 13:57 GMT+01:00 André Costa Lima <[email protected]>: > >> > 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 > >> >> > >> >> > >> > > > > > >
