Hi Fillip, I am going to try your scenario today. I also want to use the same scenario. I'll let you know the progress.
Thanks Milinda. On Fri, Oct 9, 2009 at 9:54 PM, Filip Majernik <[email protected]>wrote: > Hi everybody, > first of all thank you all guys for helping and sorry for the delay. I've > been testing the behavior with asynchronous Web Services and got this > results. > > 1.) The first solution I tried with copying the endpoint references to the > partnerlink didn't work (as mentioned in the first email), but according to > the WS-Addressing recommodation, it's not even supposed to, as there is no > such element like wsa:ReplyTo in the EPR definition. > > 2.) Then I tried to somehow implement the solution from Mark (thanks again > for that idea). However, I haven't found anything about that in docs. So > this is what I've tried: > - the web service should have two operations: one for invoke and > another one for callback > - However, I haven't managed to implement a service like that for > axis2. According to this > http://www.ibm.com/developerworks/webservices/library/ws-axis2/ you just > have to change the message receiver in service.xml in order for that > service to act asynchronously (in that article, they say it's supposed to > be > org.apache.axis2.async.AsyncMessageReceiver, but that cannot be > instantiated, you have to use this one > org.apache.axis2.rpc.receivers.RPCInOutAsyncMessageReceiver). > - so I implemented a service with one operation, with asynchronous > message receiver, tested that web service with soapUI and wsa:ReplyTo > header > set up to some address and the asynchronous call worked > - I set up a new portType 'serviceCallbackPT' with an operation > 'processServiceCallback' in my BPEL process > - I changed the partnerLinkType to have two roles > > <plnk:partnerLinkType name="MyServicePLT"> > <plnk:role name="serviceProvider" portType="remoteServicePortType"/> > <plnk:role name="serviceConsumer" portType="serviceCallbackPT"/> > </plnk:partnerLinkType> > > - I changed the partnerLink to have following roles > > <bpel:partnerLink name="RemoteServicePartner" > partnerLinkType="MyServicePLT" partnerRole="serviceProvider" > myRole="serviceConsumer" /> > > - I changed the invoke operation to invoke the webservice without > specifying output variable > - invoke was then followed by receive from the portType defined for > myRole 'serviceConsumer' from the partnerLink > > I runned the process, but wsa:ReplyTo header was still set to > http://www.w3.org/2005/08/addressing/none. So I looked in the ode source > code (ode 1.3.2) and found out following. In the class > org.apache.ode.axis2.SoapExternalService in the method**** writeHeader() > the > wsa:ReplyTo header is being set up. The url from the EPR for myRole is set > to wsa:ReplyTo only when jms.reply.destination property for that EPR is > user > defined (and in that case it looks like > 'jms:/user-defined-destination-address') or the url contains (or starts > with) 'jms:/'. I have no idea why (and actually I don't know what jms is > :)). So I've changed the code to set up the url from EPR also in the other > case and it worked. The service was invoked with the wsa:ReplyTo header > being set up to the address of the 'serviceCallbackPT' (portType for > myRole). > > However, ode wasn't able to process the response message, because he > couldn't find the operation for the response message (that actually happens > in axis message processing, so ode didn't even get the message), but I > think > it is ws-addressing issue, as the wsa:Action in the message was indeed set > to false name. > > So my result is, that in ode 1.3.2 (release version) it is not possible to > invoke an asynchronous service, beacuse the wsa:ReplyTo header is not set > correctly. If anyone knows something more about this issue, please let me > know. > > Bye and thank you again, > Filip > > 2009/10/9 Håkon Sagehaug <[email protected]> > > > Hi Mark, > > > > I wanted to try your approach, but I'm not getting the hole picture I > think > > . My test setup is very easy. I've got a echo service, echos the users > > output back, this is of course not a long running task but I sleep it > for > > lets say 1 minute. Here is my wsdl > > > > <message name="SayHiRequestMsg"> > > <part name="parameters" element="tns:SayHi"> > > </part> > > </message> > > <message name="SayHiResponseMsg"> > > <part name="parameters" element="tns:SayHiResponse"> > > </part> > > </message> > > <portType name="EchoServicePortType"> > > <operation name="SayHi"> > > <documentation>Just a simple echo operation that returns the > > same > > string that is given to it.</documentation> > > <input message="tns:SayHiRequestMsg"> > > </input> > > </operation> > > </portType> > > > > <portType name="EchoServiceCallbackPortType"> > > <operation name="onResult"> > > <input message="tns:SayHiResponseMsg"> > > </input> > > </operation> > > </portType> > > > > > > <binding name="EchoServiceBinding" type="tns:EchoServicePortType"> > > <soap:binding style="document" > > transport="http://schemas.xmlsoap.org/soap/http" /> > > <operation name="SayHi"> > > <soap:operation > > soapAction="http://www.bccs.uib.no/EchoService.wsdl/SayHi > " > > /> > > <input> > > <soap:body use="literal" /> > > </input> > > <output> > > <soap:body use="literal" /> > > </output> > > </operation> > > </binding> > > > > <binding name="EchoServiceCallBackBinding" > > type="tns:EchoServiceCallbackPortType"> > > <soap:binding style="document" > > transport="http://schemas.xmlsoap.org/soap/http" /> > > <operation name="onResult"> > > <soap:operation > > soapAction=" > > http://www.bccs.uib.no/EchoService.wsdl/onResult" > > /> > > <input> > > <soap:body use="literal" /> > > </input> > > </operation> > > </binding> > > <service name="EchoService"> > > <documentation>This WSDL file describes a simple Echo Service that > > echoes a string sendt to it. This service is intended > primarily > > for > > testing purposes.</documentation> > > <port name="EchoServiceLocal" binding="tns:EchoServiceBinding"> > > <soap:address location=" > > http://129.177.20.77:8080/axis2/services/EchoService" /> > > </port> > > </service> > > > > > > I've got a schema that defines the messages. As you see I've got two > ports, > > one starting the ws and the other for the callback. So now I'm not sure > > what > > to do now. Should the service only bind to the binding for the sayhi > > operation, not the call back? I now want to model this in BPEL I guess > it > > would look something like this > > > > <invoke operation="ech:SayHi" portType="ech:EchoServicePortType" > > variable="ech:SayHiRequest" /> > > > > and receive like this > > > > <receice operation="ech:onResult" > > portType="ech:EchoServiceCallbackPortType" > > variable="ech:SayHiResonse" /> > > > > My questions is then, does ode send ws-addressing header so that the ws > > knows where to respond(1)? What would the service then respond with(2)? > > Since the sayHi operation does not return the actual result, just empty > or > > a > > message id. How should the service be implemented, should it implement > > onResult? > > > > Hope you can help with this? I also wanted to first model this with > > "normal" > > java client. > > > > cheers, Håkon > > > > Then my question is > > 2009/10/8 Ford, Mark <[email protected]> > > > > > With respect to your comment: > > > > > > “the invoke will be called and waits and times out” > > > > > > It sounds like you’re trying to model a long running operation as a > > > request/response operation within WSDL. If you do this, then you’ll > most > > > likely experience timeouts at the transport layer. A better > > implementation > > > is to split this long running operation into two port types. One to > make > > the > > > request to start the work for the service and the other to provide an > > > operation for the service to call you back with the response. The start > > > operation would be a one-way operation or a request-response with a > > simple > > > ACK as the response (perhaps with some values to use for correlation). > > This > > > would be modeled in BPEL by an invoke followed by a receive activity. > > > > > > You can create a partnerLinkType to model this by having a partner role > > for > > > the service you’re invoking and a myRole for your callback point. In > this > > > way, the relationship between the two port types is made explicit. > > > > > > As for ODE, I have not tested this but I would think that there might > be > > a > > > facility whereby you could have the endpoint reference for the > > partnerlink’s > > > myRole automatically populate as the reply-to header when invoking a > > > service. It seems reasonable that the service invocation layer would > > support > > > this but you’d have to check the docs or the source code to be sure. > > > > > > > > > On 10/8/09 4:18 AM, "Michael Dondrup" <[email protected]> > > wrote: > > > > > > Dear Filip, > > > we are currently working on exactly the same problem, because it would > > > be simple and neat solution. > > > However we didn't get there so far, so maybe it could be interesting > > > to have closer look at what it is exactly that doesn't work. > > > Do you have a process defined, that fails? Then maybe you could send > > > the process files so we could have a look it? > > > > > > We found that the WS-addressing did not seem to work with axis2 1.4.1 > > > and you should try axis2 1.5 on the service side. > > > To enable wsa support and asynchronous invocation add the following to > > > your services.xml within the service tags: > > > > > > <module ref="addressing" /> > > > <parameter name="messageReceiver.invokeOnSeparateThread">true</ > > > parameter> > > > > > > There will be other problems however: > > > - providing the correct port, role and partnerlink type, in the bpel > > > process for the service to reply to > > > - If I try to use a <invoke> and <receive> secence for invoking the > > > service, the invoke waits for the service to reply even though the > > > wsa:replyto works and the invoke will be called and waits and times > > > out. > > > The documentation on this topic is unfortunately totally incomplete. > > > Maybe we can try to resolve this together. > > > Best > > > Michael > > > > > > Am 07.10.2009 um 20:40 schrieb Filip Majernik: > > > > > > > Hi, > > > > I want to invoke an asynchronous Web Service from ode, but I cannot > > > > figure > > > > out how to change wsa:ReplyTo header. I've read about the EPR > > > > configuration > > > > on the ode website and tried something like this: > > > > > > > > <bpel:assign> > > > > <bpel:copy> > > > > <bpel:from> > > > > <bpel:literal> > > > > <wsa:EndpointReference xmlns:wsa=" > > > > http://www.w3.org/2005/08/addressing"< > > http://www.w3.org/2005/08/addressing%22> > > > > > > > > <wsa:Address> > > > > http://localhost:8080/axis2/services/MyService</wsa:Address>< > > http://localhost:8080/axis2/services/MyService%3C/wsa:Address%3E> > > > > <wsa:ReplyTo><wsa:Address> > > > > http://localhost:8080/axis2/services/ReplyToService > > > > </wsa:Address></wsa:ReplyTo> > > > > </wsa:EndpointReference> > > > > </bpel:literal> > > > > </bpel:from> > > > > <bpel:to partnerLink="testPartnerLink"/> > > > > </bpel:copy> > > > > </bpel:assign> > > > > > > > > but it isn't working. Does anyone maybe have a working example of > > > > changing > > > > the wsa:ReplyTo header (and invoking and asynchronous service) when > > > > invoking > > > > a service??? Or is it possible at all? > > > > > > > > Btw. my configuration is: > > > > apache ode 1.3.2 > > > > the webservice I am invoking is running on apache axis 1.4 > > > > > > > > Thank you guys in advance. > > > > Filip > > > > > > > > > > > > > > > > > > > > > -- > > > Mark Ford > > > MIT Lincoln Laboratory > > > 244 Wood Street > > > Lexington MA 02420 > > > (781) 981-1843 > > > > > > > > > > > -- > > Håkon Sagehaug, Scientific Programmer > > Parallab, Bergen Center for Computational Science (BCCS) > > UNIFOB AS (University of Bergen Research Company) > > > -- Milinda Pathirage Senior Software Engineer & Product Manager WSO2 BPS; http://wso2.org/bps WSO2 Inc.; http://wso2.com E-mail: [email protected], [email protected] Web: http://mpathirage.com Blog: http://blog.mpathirage.com
