cxf-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Aki Yoshida <elak...@gmail.com>
Subject Re: NPE at HolderOutInterceptor / Holder.value is null
Date Thu, 04 Dec 2014 16:54:10 GMT
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 <andreclima.pt@gmail.com>:
> 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 <elakito@gmail.com>:
>>
>> 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 <andreclima.pt@gmail.com>:
>> > 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 <andreclima.pt@gmail.com>:
>> >>
>> >> 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 <elakito@gmail.com>:
>> >>>
>> >>> 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 <andreclima.pt@gmail.com>:
>> >>> > 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
>> >>
>> >>
>> >
>
>

Mime
View raw message