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}'
> >> >>> >                 + '&amp;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
> >> >>
> >> >>
> >> >
> >
> >
>

Reply via email to