Hello again,

I took a look at the WSDL in the sample and I noticed that the header type
is included as a part in both the input and output messages. In my WSDL
this does not happen. I just have one part in each message and the header
type is declared as another message. Below is what my WSDL looks like for
the ODEventNotification operation:

Types:

INPUT

<s:element name="ODEventNotification">
        <s:complexType>
          <s:sequence>
            <s:element maxOccurs="1" minOccurs="0" name="ODEvents"
type="tns:ArrayOfOutageDetectionEvent"/>
            <s:element maxOccurs="1" minOccurs="0" name="transactionID"
type="s:string"/>
          </s:sequence>
        </s:complexType>
      </s:element>

OUTPUT

<s:element name="ODEventNotificationResponse">
        <s:complexType>
          <s:sequence>
            <s:element maxOccurs="1" minOccurs="0"
name="ODEventNotificationResult" type="tns:ArrayOfErrorObject"/>
          </s:sequence>
        </s:complexType>
      </s:element>

Messages:

INPUT

  <wsdl:message name="ODEventNotificationSoapIn">
    <wsdl:part name="parameters" element="tns:ODEventNotification">
    </wsdl:part>
  </wsdl:message>

OUTPUT

<wsdl:message name="ODEventNotificationSoapOut">
    <wsdl:part name="parameters" element="tns:ODEventNotificationResponse">
    </wsdl:part>
  </wsdl:message>

HEADER

  <wsdl:message name="ODEventNotificationMultiSpeakMsgHeader">
    <wsdl:part name="MultiSpeakMsgHeader" element="tns:MultiSpeakMsgHeader">
    </wsdl:part>
  </wsdl:message>

Operation:

 <wsdl:operation name="ODEventNotification">
      <wsdl:input message="tns:ODEventNotificationSoapIn">
    </wsdl:input>
      <wsdl:output message="tns:ODEventNotificationSoapOut">
    </wsdl:output>
    </wsdl:operation>

Binding:

<wsdl:operation name="ODEventNotification">
      <soap:operation soapAction="
http://www.multispeak.org/Version_4.1_Release/ODEventNotification";
style="document"/>
      <wsdl:input>
        <soap:body use="literal"/>
        <soap:header message="tns:ODEventNotificationMultiSpeakMsgHeader"
part="MultiSpeakMsgHeader" use="literal">
        </soap:header>
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal"/>
        <soap:header message="tns:ODEventNotificationMultiSpeakMsgHeader"
part="MultiSpeakMsgHeader" use="literal">
        </soap:header>
      </wsdl:output>
    </wsdl:operation>

Code generated:

@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(mode = WebParam.Mode.INOUT, name = "MultiSpeakMsgHeader",
targetNamespace = "http://www.multispeak.org/Version_4.1_Release";, header =
true)
        javax.xml.ws.Holder<MultiSpeakMsgHeader> multiSpeakMsgHeader
    );

So, the operation is in WRAPPED mode, right? As for the sample, it is in
BARE/UNWRAPPED mode.

I've regenerated the SEI code with -bareMethods=odEventNotification as
argument to wsdl2java. odEventNotification is now annotated with:

@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)

I ran my test again and now the asynchronous/synchronous invariant worked,
no exceptions. The Holder.value is correct in the client.

According to CXF-docs
<http://cxf.apache.org/docs/developing-a-service.html#DevelopingaService-The@SOAPBindingannotation>,
@SOAPBinding parameterStyle can be either BARE or WRAPPED, i.e., it seems
that there are no restrictions as far as the operation mode goes, but my
tests show otherwise.

Regards,

André Costa Lima


2014-12-05 14:34 GMT+00:00 Aki Yoshida <[email protected]>:

> Basically, I didn't change anything which was there in jaxws_async and
> soap_header, except for aligning some naming for the operation names.
> The executor set at the service is actually optional and yes, this is
> for the client. That shows that you can use your own executor to
> process the response message. But if you don't need that, you don't
> need to set it, then the cxf bus's default executor is used.
>
> The annotated method indicates that the method will not be called if
> there is async support (in other words, in that case, it's async
> method is instead called).
>
> regards, aki
>
> 2014-12-04 18:50 GMT+01:00 André Costa Lima <[email protected]>:
> > 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