Ok, I was considering that but all the samples I saw then depended on the WSDL:s which we dont want.
But it seems you are saying that once I generated the wsdl:s and then back-generated the code (to get it correct) I should be able to discard the wsdl:s if we want and depend only on the code declarations? Will try this and see how it goes and maybe decrypt the async "magic" a bit ;-) Thanks! On 26 August 2011 17:15, Daniel Kulp <dk...@apache.org> wrote: > > > Creating the async methods can be tricky as the request object gets > unwrapped, > the the wrapper object is used for the callback. > > My suggestion is to create your service, grab the wsdl, and generate a > client > with it enabling the async methods. (with 2.4.2, you can pass > -asyncMethods > flag). Use that generated interface as the basis fro your async methods > and > such. > > Dan > > > On Friday, August 26, 2011 9:25:35 AM Kent Närling wrote: > > Now I did some small modifcations to my interfaces so I created a sample > > service with a method declared like: > > @WebMethod(operationName = "doAdd") > > String doAdd( > > @WebParam(name = "a") String a, > > @WebParam(name = "b") String b); > > > > @WebMethod(operationName = "doAdd") > > @WebEndpoint(name="doAdd") > > Future<?> doAddAsync( > > String a, > > String b, > > AsyncHandler<String> handler); > > > > > > The server implements this (with an empty stub for the async call) and > > publishes simply with: > > > > AdderService service = new AdderService(); > > Endpoint.publish("http://localhost:8989/adder", service); > > > > The client simply creates the interface connection with: > > AdderInterface adder; > > > > JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); > > factory.setServiceClass(AdderInterface.class); > > factory.setAddress("http://localhost:8989/adder"); > > adder = (AdderInterface)factory.create(); > > > > Now, STILL, if I call the async method I get: > > "javax.xml.ws.WebServiceException: Could not find wsdl:binding operation > > info for web method doAddAsync." > > > > It seems to me that CXF thinks that the operation name on the server is > > "doAddAsync" despite that I explictly named it as "doAdd" in the > annotation? > > > > There should be a way to tell CXF through annotations that "for this > method > > stub X, call SOAP method Y on the server"? > > Or am I missunderstanding what the problem is here? > > > > I have a full sample code of the above if anyone is interested I can send > > it, I cannot get this to work and I am a bit stuck right now... :-( > > > > On 18 August 2011 00:48, Kent Närling <kent.narl...@seamless.se> wrote: > > > On 17 August 2011 23:21, Kent Närling <kent.narl...@seamless.se> > wrote: > > >> On 17 August 2011 18:08, Daniel Kulp <dk...@apache.org> wrote: > > >>> On Wednesday, August 17, 2011 4:17:58 PM Kent Närling wrote: > > >>> > I tried ad-hoc and just wrote the interface myself as: > > >>> > > > >>> > @WebService > > >>> > > > >>> > public interface MyService > > >>> > > > >>> > { > > >>> > > > >>> > @WebMethod(operationName = "doSomething") > > >>> > > > >>> > Future<?> doSomething( > > >>> > > > >>> > @WebParam(name = "someParam") String someParam, > > >>> > AsyncHandler<DoSomethingResult> asyncHandler); > > >>> > > > >>> > } > > >>> > But with this I just god the error : "Could not find > > >>> > wsdl:binding > > >>> > > >>> operation > > >>> > > >>> > info for web method doSomething" > > >>> > > > >>> > So I guess this means I would have to annotate some binding > > >>> > > >>> information? or > > >>> > > >>> > is this impossible to do with annotations? > > >>> > > >>> You ALWAYS have to have the non-async versions there. Thus, put > > >>> your > > >>> original method signature in there. You can then optionally add > > >>> the > > >>> async > > >>> versions as needed and only for the methods you need. > > >>> > > >>> Dan > > >>> > > >>> > > >>> > > >>> Does this mean that the server side will have to implement the async > > >> > > >> version as well? > > >> (would be a bit odd if the server has to implement the same method > > >> twice? > > >> > > >> Since it has to implement the same interface then it has to implement > > >> the async version... > > >> > > >> Also, can the method name & SOAP operation name be the same? or should > > >> the methods have different names? > > >> > > >> > > >> ie in the above you are saying that I should declare an interface as: > > >> > > >> @WebService > > >> > > >> public interface MyService > > >> > > >> { > > >> > > >> @WebMethod(operationName = "doSomething") > > >> > > >> DoSomethingResult doSomething( > > >> > > >> @WebParam(name = "someParam") String someParam); > > >> > > >> @WebMethod(operationName = "doSomething") > > >> > > >> Future<?> doSomething( > > >> > > >> @WebParam(name = "someParam") String someParam, > > >> > > >> AsyncHandler<DoSomethingResult> handler); > > >> > > >> } > > >> > > >> > > >> Or? > > > > > > I tried to declare it as above, still get the same error as before: > > > "Could not find wsdl:binding operation info for web method doSomething" > > > > > > Do I have to > -- > Daniel Kulp > dk...@apache.org > http://dankulp.com/blog > Talend - http://www.talend.com >