I believe you sent in an e-mail (see below) stating that you already solved
this?

---

Dear Daniel,



Finally it worked. Thank you for your support to both you and André. The
trick was the SEi, in particular the UseAsyncMethod on the implementation
and the @ResponseWrapper notation on the synch method of the interface.



BR,



Giovanni

---

Anyways, did you try to follow Daniel's advice? Did you take a look at the
samples?

André Costa Lima


2015-01-22 7:03 GMT+00:00 wangnima <[email protected]>:

> Dear André,
>
>
>
> I have added the polling method and it starts to work, or better the error
> is different. Now I have the following excpetion:
>
>
>
> Jan 07, 2015 3:27:26 PM pt.uninova.proseco.services.async.TestAsyncHandler
> handleResponse
>
> SEVERE: null
>
> java.util.concurrent.ExecutionException: java.lang.ClassCastException:
> pt.uninova.proseco.services.jaxws_asm.MypingWebServiceResponse cannot be
> cast to pt.uninova.proseco.services.async.response.MypingMessage
>
>                 at
> org.apache.cxf.jaxws.JaxwsClientCallback$2.get(JaxwsClientCallback.java:99)
>
>                 at
>
> pt.uninova.proseco.services.async.TestAsyncHandler.handleResponse(TestAsyncHandler.java:27)
>
>                 at
>
> org.apache.cxf.jaxws.JaxwsClientCallback.handleException(JaxwsClientCallback.java:87)
>
>                 at
> org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:821)
>
>                 at
>
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1636)
>
>                 at
>
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream$1.run(HTTPConduit.java:1145)
>
>                 at
>
> org.apache.cxf.workqueue.AutomaticWorkQueueImpl$3.run(AutomaticWorkQueueImpl.java:428)
>
>                 at
>
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>
>                 at
>
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>
>                 at
>
> org.apache.cxf.workqueue.AutomaticWorkQueueImpl$AWQThreadFactory$1.run(AutomaticWorkQueueImpl.java:353)
>
>                 at java.lang.Thread.run(Thread.java:744)
>
> Caused by: java.lang.ClassCastException:
> pt.uninova.proseco.services.jaxws_asm.MypingWebServiceResponse cannot be
> cast to pt.uninova.proseco.services.async.response.MypingMessage
>
>                 at
>
> pt.uninova.proseco.services.async.TestAsyncHandler.handleResponse(TestAsyncHandler.java:27)
>
>                 at
>
> org.apache.cxf.jaxws.JaxwsClientCallback.handleResponse(JaxwsClientCallback.java:44)
>
>                 at
> org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:819)
>
>                 ... 7 more
>
>
>
> Exception in thread "main" java.lang.NullPointerException
>
>                 at
>
> pt.uninova.proseco.services.async.TestAsyncHandler.getResponse(TestAsyncHandler.java:34)
>
>                 at
>
> pt.uninova.proseco.async.AsyncTestMainClass.main(AsyncTestMainClass.java:51)
>
>
>
> Basically I have a cast exception here:
>
>
>
> public class TestAsyncHandler implements AsyncHandler<MypingResponse> {
>
>
>
>     private MypingResponse reply;
>
>
>
>     @Override
>
>     public void handleResponse(Response<MypingResponse> rspns) {
>
>         try {
>
>             System.err.println("handleResponse called");
>
>             reply = rspns.get();
>
>         } catch (InterruptedException | ExecutionException ex) {
>
>
> Logger.getLogger(TestAsyncHandler.class.getName()).log(Level.SEVERE, null,
> ex);
>
>         }
>
>     }
>
>
>
>     public String getResponse() {
>
>         return reply.getTestValue();
>
>     }
>
>
>
> }
>
>
>
> Any suggestion?
>
>
>
> BR,
>
>
>
> Giovanni
>
>
>
> De: André Costa Lima [via CXF] [mailto:[hidden email]]
> Enviada: 7 de janeiro de 2015 13:46
> Para: gido
> Assunto: Re: Async Calls
>
>
>
> I think your class is malformed, i.e., there are missing annotations.
>
> Take some time to read this
> <
> http://cxf.apache.org/docs/developing-a-service.html#DevelopingaService-JavaFirstDevelopment
> >.
> The documentation shows and explains how to use the annotations and what
> they do.
>
> As for the asynchronous methods, in addition to the callback method
>
> public Future<?> MypingAsync(String par, AsyncHandler<MypingResponse>
> asyncHandler);
>
> you need to define the polling method
>
> public Response<MypingResponse> MypingAsync(String par);
>
> in your SEI as well. However, you do not need to implement it because it
> will never be called but the client can use it. You can read more about the
> asynchronous invocation model here
> <
> http://cxf.apache.org/docs/developing-a-consumer.html#DevelopingaConsumer-AsynchronousInvocationModel
> >
> .
>
> On a different note, I do now know how CXF handles interface extension for
> SEIs, such as you define below
>
> public interface IAmIMonitoringService extends IProsecoService
>
> Maybe a developer can answer that.
>
> Hope this helps. :)
>
> André Costa Lima
>
>
> 2015-01-07 10:52 GMT+00:00 gido <[hidden email]>:
>
>
> > Hi André,
> >
> >
> >
> > Here you can find the SEI and its implementation:
> >
> >
> >
> > @WebService
> >
> > @SOAPBinding(style = SOAPBinding.Style.DOCUMENT)
> >
> > public interface IProsecoService {
> >
> >
> >
> >     @WebMethod(operationName = "startWebService")
> >
> >     public void start();
> >
> >
> >
> >     @WebMethod(operationName = "stopWebService")
> >
> >     public void stop();
> >
> >
> >
> >     @WebMethod(operationName = "restartWebService")
> >
> >     public void restart();
> >
> >
> >
> >     @WebMethod(operationName = "pingWebService")
> >
> >     public String ping();
> >
> >
> >
> >     @WebMethod(operationName = "invokeWebService")
> >
> >     public boolean configure(String Configuration);
> >
> >
> >
> > }
> >
> >
> >
> > @WebService(name = "AmIMonitoringService", targetNamespace = "
> > http://proseco-project.eu/";)
> >
> > @SOAPBinding(style = SOAPBinding.Style.DOCUMENT)
> >
> > public interface IAmIMonitoringService extends IProsecoService {
> >
> >
> >
> >     @WebMethod(operationName = "MypingWebService")
> >
> >     public String Myping(String par);
> >
> >
> >
> >     @WebMethod(operationName = "MypingWebService")
> >
> >     @ResponseWrapper(localName = "MypingResponse", className =
> > "pt.uninova.proseco.services.async.response.MypingResponse")
> >
> >     public Future<?> MypingAsync(String par, AsyncHandler<MypingResponse>
> > asyncHandler);
> >
> >
> >
> > }
> >
> >
> >
> > public class AmIMonitoringService implements IAmIMonitoringService {
> >
> >
> >
> >     private static final Logger logger =
> > LoggerFactory.getLogger(AmIMonitoringService.class);
> >
> >
> >
> >     @Override
> >
> >     public void start() throws ProsecoFault {
> >
> >         logger.info(String.format("Starting %s ...",
> > this.getClass().getSimpleName()));
> >
> >     }
> >
> >
> >
> >     @Override
> >
> >     public void stop() throws ProsecoFault {
> >
> >         logger.info(String.format("Stopping %s ...",
> > this.getClass().getSimpleName()));
> >
> >     }
> >
> >
> >
> >     @Override
> >
> >     public void restart() throws ProsecoFault {
> >
> >         logger.info(String.format("Restarting %s ...",
> > this.getClass().getSimpleName()));
> >
> >     }
> >
> >
> >
> >     @Override
> >
> >     public String ping() throws ProsecoFault {
> >
> >         logger.info(String.format("%s was pinged",
> > this.getClass().getSimpleName()));
> >
> >                                return ServiceManager.PING_RESPONSE;
> >
> >     }
> >
> >
> >
> >     @Override
> >
> >     public boolean configure(String Configuration) throws ProsecoFault {
> >
> >         throw new UnsupportedOperationException("Not supported yet.");
> > //To change body of generated methods, choose Tools | Templates.
> >
> >     }
> >
> >
> >
> >     @Override
> >
> >     public Future<?> MypingAsync(final String par, final
> > AsyncHandler<MypingResponse> asyncHandler) {
> >
> >         System.out.println("Executing operation changeStudentAsync
> > asynchronously\n");
> >
> >         final ServerAsyncResponse<MypingResponse> asyncResponse = new
> > ServerAsyncResponse<MypingResponse>();
> >
> >         new Thread() {
> >
> >             @Override
> >
> >             public void run() {
> >
> >                 try {
> >
> >                     Thread.sleep(10000);
> >
> >                 } catch (InterruptedException e) {
> >
> >                 }
> >
> >                 MypingResponse resp = new MypingResponse();
> >
> >                 resp.setTestValue("Ola " + par);
> >
> >                 asyncResponse.set(resp);
> >
> >                 System.out.println("Responding on background thread\n");
> >
> >                 asyncHandler.handleResponse(asyncResponse);
> >
> >             }
> >
> >         }.start();
> >
> >
> >
> >         return asyncResponse;
> >
> >     }
> >
> >
> >
> >     @Override
> >
> >     public String Myping(String par) {
> >
> >         throw new UnsupportedOperationException("Not supported yet.");
> > //To change body of generated methods, choose Tools | Templates.
> >
> >     }
> >
> >
> >
> > }
> >
> >
> >
> > -          Client code:
> >
> > IAmIMonitoringService client = ServiceManager.getWebservice("localhost",
> > Integer.parseInt("19004"), IAmIMonitoringService.class);
> >
> >         String pong = client.ping();
> >
> >         TestAsyncHandler handler = new TestAsyncHandler();
> >
> >         Future<?> response = client.MypingAsync("Giovanni", handler);
> >
> >          while (!response.isDone()) {
> >
> >             Thread.sleep(100);
> >
> >         }
> >
> >
> >
> >
> >
> > public class TestAsyncHandler implements AsyncHandler<MypingResponse> {
> >
> >
> >
> >     private MypingResponse reply;
> >
> >
> >
> >     @Override
> >
> >     public void handleResponse(Response<MypingResponse> rspns) {
> >
> >         try {
> >
> >             System.err.println("handleResponse called");
> >
> >             reply = rspns.get();
> >
> >         } catch (InterruptedException | ExecutionException ex) {
> >
> >
> > Logger.getLogger(TestAsyncHandler.class.getName()).log(Level.SEVERE,
> null,
> > ex);
> >
> >         }
> >
> >     }
> >
> >
> >
> >     public String getResponse() {
> >
> >         return reply.getTestValue();
> >
> >     }
> >
> >
> >
> > }
> >
> >
> >
> > I hope this can help.
> >
> >
> >
> > BR,
> >
> >
> >
> > Giovanni
> >
> >
> >
> > De: André Costa Lima [via CXF] [mailto:
> > [hidden email]]
> > Enviada: 7 de janeiro de 2015 00:30
> > Para: gido
> > Assunto: Re: Async Calls
> >
> >
> >
> > Hi,
> >
> > Can you provide the code of your SEI class?
> >
> > Thanks.
> >
> > André Costa Lima
> >
> >
> > 2015-01-06 23:41 GMT+00:00 gido <[hidden email]>:
> >
> >
> > > Dear all,
> > >
> > > I have a little problem with the async communication. In particular I
> am
> > > trying to implement async calls. My idea is to provide a synchronous
> > method
> > > as well as its async implementation. In such a way I can decide which
> > > method
> > > is suitable for me according to the specific application context. To do
> > > that, I have followed the Apache CXF documentation and the tutorials:
> > >
> > >
> http://www.javatips.net/blog/2014/03/asynchronous-web-service-using-cxf
> > > http://www.javatips.net/blog/2014/03/cxf-asynchronous-client
> > >
> > > However when I try to call the async method I always receive the
> > following
> > > exception:
> > >
> > > Exception in thread "main" javax.xml.ws.WebServiceException: Could not
> > find
> > > wsdl:binding operation info for web method testAsync.
> > >         at
> > > org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:126)
> > >         at com.sun.proxy.$Proxy62.testAsync(Unknown Source)
> > >         at
> > >
> > >
> >
> pt.uninova.proseco.async.AsyncTestMainClass.main(AsyncTestMainClass.java:46)
> > >
> > > If I try to call the synch implmentation I have no problem.
> > >
> > > I have checked the generated wsdl (I am using the Java first approach)
> > and
> > > I
> > > see that no async operation is included.
> > >
> > > Do you have any sugestion?
> > >
> > > BR
> > >
> > > Giovanni
> > >
> > >
> > >
> > > --
> > > View this message in context:
> > > http://cxf.547215.n5.nabble.com/Async-Calls-tp5752830.html
> > > Sent from the cxf-user mailing list archive at Nabble.com.
> > >
> >
> >
> >
> >   _____
> >
> > If you reply to this email, your message will be added to the discussion
> > below:
> >
> > http://cxf.547215.n5.nabble.com/Async-Calls-tp5752830p5752832.html
> >
> > To unsubscribe from Async Calls, click here <
> >
> > .
> >  <
> >
> http://cxf.547215.n5.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml
> >
> > NAML
> >
> >
> >
> >
> >
> > --
> > View this message in context:
> > http://cxf.547215.n5.nabble.com/Async-Calls-tp5752830p5752839.html
> > Sent from the cxf-user mailing list archive at Nabble.com.
> >
> ... [show rest of quote]
>
>
> If you reply to this email, your message will be added to the discussion
> below:
>
> http://cxf.547215.n5.nabble.com/Async-Calls-tp5752830p5752842.html
> http://www.chaussurespas-fr.com/
> To unsubscribe from Async Calls, click here.
>
> NAML
>
>
>
> -----
> www.chaussurespas-fr.com
> --
> View this message in context:
> http://cxf.547215.n5.nabble.com/Async-Calls-tp5752830p5753384.html
> Sent from the cxf-user mailing list archive at Nabble.com.
>

Reply via email to