Hi Daniel,

 

I have also spoken with André Costa Lima (via CXF). I can send you some
other info.

This is the code that I am going to test:

 

@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/> http://proseco-project.eu/";) 
 
 @SOAPBinding(style = SOAPBinding.Style.DOCUMENT) 
 
 public interface IAmIMonitoringService extends IProsecoService { 



   @UseAsyncMethod
    public String Myping(String par); 



    public Future<?> MypingAsync(String par, AsyncHandler<MypingResponse>
asyncHandler);

 

    public Response<MypingResponse> MypingAsync(String par);
} 

 

 

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) {

        System.out.println("Synchrounous call");

        return null;

    }

 

    @Override

    public Response<MypingResponse> MypingAsync(String par) {

        return null;

    }

 

}



-          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(); 
    } 
}

 


The exception that I have when running the following code is:

 

 

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(TestAsyncH
andler.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.handleResponse
Internal(HTTPConduit.java:1636) 
                at 
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream$1.run(HTTPCond
uit.java:1145) 
                at 
org.apache.cxf.workqueue.AutomaticWorkQueueImpl$3.run(AutomaticWorkQueueImpl
.java:428) 
                at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:11
45) 
                at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:6
15) 
                at 
org.apache.cxf.workqueue.AutomaticWorkQueueImpl$AWQThreadFactory$1.run(Autom
aticWorkQueueImpl.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(TestAsyncH
andler.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(TestAsyncHand
ler.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(); 
 
     } 
 } 



I am using the simplefrontend and the jetty embedded application server for
that reason I don’t have the wsdl since it is automatically generated from
the java code and handled by the environment (I think). Is there any way to
retrieve the wsdl?

 

BR,

 

Giovanni

 

De: Daniel Kulp [via CXF] [mailto:[email protected]] 
Enviada: 7 de janeiro de 2015 22:32
Para: gido
Assunto: Re: Async Calls

 


My suggestion would be to take the generated wsdl from the service and run
the wsdl2java with the -asyncMethods switch on the wsdl and make sure you
either use the generated SEI directly or at least make sure the method
signatures and such directly match what is there.   

Dan 




> On Jan 6, 2015, at 6:41 PM, gido <[hidden email]> wrote: 
> 
> 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. 


-- 
Daniel Kulp 
[hidden email] - http://dankulp.com/blog
Talend Community Coder - http://coders.talend.com




  _____  

If you reply to this email, your message will be added to the discussion
below:

http://cxf.547215.n5.nabble.com/Async-Calls-tp5752830p5752856.html 

To unsubscribe from Async Calls, click here
<http://cxf.547215.n5.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_
by_code&node=5752830&code=Z2lkb0B1bmlub3ZhLnB0fDU3NTI4MzB8LTQwODEwNTMyNQ==>
.
 
<http://cxf.547215.n5.nabble.com/template/NamlServlet.jtp?macro=macro_viewer
&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicName
space-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.Node
Namespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_email
s%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml> NAML 





--
View this message in context: 
http://cxf.547215.n5.nabble.com/Async-Calls-tp5752830p5752862.html
Sent from the cxf-user mailing list archive at Nabble.com.

Reply via email to