Dear Tammo, I personally find that it is very important to intercept the message originating from partner web service back to the BPEL process, due to a following scenario: - BPEL Process invokes a web service- This service has to check the security SOAP header for authentication.- If fault, JAX WS in the implementation layer of the service returns immediately to ODE with a message fault, before the JAVA programmer of the web service can catch that fault and returns their defined XSD message to BPEL Process.- Because the fault message is undefined in the Schema / WSDL, ODE cannot collaborate with the service, it cannot understand this message.- BPEL Process designer cannot further define their own handler, catch, throw etc..., but only a common system fault is thrown out back to the client. What are your opinion?Hope you would reply me and share me your thought. Thank you very much --- On Fri, 1/14/11, Tammo van Lessen <[email protected]> wrote:
From: Tammo van Lessen <[email protected]> Subject: Re: Fun with MessageExchange Intercept To: [email protected] Date: Friday, January 14, 2011, 3:15 PM Hi Kurt, Joni, true, for some unknown reason the call to onPartnerInvoked got lost in trunk, i.e. ODE 1.x. Please file a bug for that, it should be easy to fix that, but it wont make it into 1.3.5 anymore. I'm currently cutting the release candidate. Thanks, Tammo On 14.01.2011 14:47, Kurt Westerfeld wrote: > Not with ODE's MessageExchangeInterceptor, I don't. I wanted to use the > MessageExchangeInterceptor to hook onto partnerlink exchanges but it looks > like it is only fully implemented on the experimental 2.X branch. > > I do have two options I have used to do something similar: > Use the ODE MessgeMapper and subclass one of the several available to > audit/monitor/enhance the messages to/from ODE > Under Servicemix 4, use a MessageExchangeListener to audit message flow > to/from ODE endpoints. I believe there is an example in Servicemix 4 you can > find under $SMX/examples/interceptors/exchange. I know that external or NMR > partner link messages would be caught by such an interceptor, but an > ODE-to-ODE exchange would not (since it uses peer-2-peer messaging, which > could be optionally turned off with your deploy.xml settings). >>>> Joni Lee <[email protected]> 1/14/2011 4:25 AM >>> > Hi Kurt, > Thank you for replying me. Then.. do you have any experiences so far how we > can intercept the messages originating from partner service back to the BPEL > process? Any ideas may help me to develop. > Best Regards > > --- On Thu, 1/13/11, Kurt Westerfeld <[email protected]> wrote: > > From: Kurt Westerfeld <[email protected]> > Subject: Re: Fun with MessageExchange Intercept > To: [email protected] > Date: Thursday, January 13, 2011, 6:59 PM > > I believe onPartnerInvoked is never called on the 1.3.X codebase > >>>> Joni Lee <[email protected]> 1/13/2011 12:52 PM >>> > I've found out that the method onPartnerInvoked has never been called when > the BPEL process receives a fault message from the external web service (for > example, in my case is "Authentication of Username Password Token Failed"), > while other methods (onNewInstanceInvoked, onProcessInvoked) have been called > sucessfully. > How can this be? Solution? > Thank you!Best Regards > --- On Thu, 1/13/11, Joni Lee <[email protected]> wrote: > > From: Joni Lee <[email protected]> > Subject: Fun with MessageExchange Intercept > To: [email protected] > Date: Thursday, January 13, 2011, 4:29 PM > > Hi all, > Here I tried some fun to intercept the message exchange routing from the > external service back to the process with a small class as follows > ------------------- > public class FaultInterceptor implements MessageExchangeInterceptor{ > private static > final Log LOG = LogFactory.getLog(FaultInterceptor.class); > @Override public void onPartnerInvoked(PartnerRoleMessageExchange mex, >InterceptorContext itc) throws FailMessageExchangeException, >FaultMessageExchangeException { > LOG.debug("blablabla"); > /* ONLY INTERCEPT THE RESPONSE MESSAGE COMING FROM WS */ >if (mex.getStatus() == Status.RESPONSE){ Message m = >mex.getResponse(); m.setHeaderPart("customeheader", "content"); > throw new FaultMessageExchangeException("MycustomeFault", >mex.getCaller(), m); } }...} > ----------------- > First, ODE log says it registered the implementation class successfully. I > want to write something to prove that I can really intercept the message. > Question: after invoke an external web service.. > - Neiter the echo text "blablabla" nor "MycustomeFault" are printed out in > log file of ODE. And WHY?- I want to modify the header of the "mex", but it > doesn't seem right. Please give me some advices to throw out a message of my > own. > Thank you very much > > > > > > > > > > > > > > > > > -- Tammo van Lessen - http://www.taval.de
