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 <[email protected]>:

> 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:
> [email protected]]
> 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=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.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.
>

Reply via email to