Thanks for your very generous offer, but I think longer term BPEL is much more suited to our requirements, and I wouldn't want to waste your time to satisfy my curiosity.
All the best Wayne On Thu, Apr 17, 2008 at 9:58 AM, Ruwan Linton <[EMAIL PROTECTED]> wrote: > Hi Wayne, > > We have done similar stuff using Synapse. So if you could send me a sample > request and the exact requirement including any other schemas of the > requests that has to be generated by synapse, (may be with sample services > or WSDL) I would be happy to give you the exact configuration for you to > use > for the scenario. You may send the requests to me privately if you feel > uncomfortable in sharing these in public. My email address is ruwan AT > wso2 > DOT com. > > Thanks, > Ruwan > > On Thu, Apr 17, 2008 at 1:25 PM, Wayne Keenan <[EMAIL PROTECTED]> > wrote: > > > Hi, > > > > Thanks for all your help, but the amount of configuration involved todo > > this > > is perhaps indicating my requirements are not a best fit for Synapse's > > intended use, no offence to Synapse. > > We have decided to find another mecanism to co-ordinate the service > > invocations, and I'm currently looking at Apache ODE. > > That is not to say we won't be using Synapse, quite the opposite, we > will > > still be Synapse on the 'front line', todo: routing, failover, load > > balancing etc. > > > > Regards > > Wayne > > > > > > On Wed, Apr 16, 2008 at 3:42 PM, Ruwan Linton <[EMAIL PROTECTED]> > > wrote: > > > > > Hi Wayne, > > > > > > I was thinking you are using the message mediation but not a proxy. In > > > your > > > case the out sequence of the proxy will not be called because the > > message > > > does not go out on the normal path. So here is the workaround for > that. > > > > > > You will need to put a dummy outSequence for the proxy because that is > > > required, but you need to append the ossj_fault_out to the end of the > > > proxy > > > in sequence execution. Since there is a clone mediator these linkages > > > should > > > happen at the two cloned targets. In effect you should modify the > > > ossj_fault_main and ossj_fault_comment_wrapper sequences and add the > > > following configuration point to the end of these sequences. > > > > > > <sequence key="ossj_fault_out"/> > > > > > > Modify the config as I proposed and let me know the results. I will > > guide > > > you for any other changes to get this done if you get any more issues > on > > > this. > > > > > > Thanks, > > > Ruwan > > > > > > On Wed, Apr 16, 2008 at 7:33 PM, Wayne Keenan <[EMAIL PROTECTED]> > > > wrote: > > > > > > > Hi, > > > > > > > > Help, I am being quite thick and was wonodering if someone could > > sanity > > > > check my config please, liberlay doused with printf debugging. > > > > My backend service (a RESTful POX service that accept the SOAP > payload > > > as > > > > the 'callout' doesn't support POX) is called and a responds, but the > > > > processing stops at : DEBUG SequenceMediator End : Sequence > > > > <ossj_fault_main> > > > > > > > > The out sequence 'ossj_fault_out' is never called and I am at a loss > > as > > > to > > > > why. (The namings are an unfortunate clash, but its a > FaultReporting > > > > interface) > > > > > > > > My config is below: > > > > > > > > <definitions xmlns="http://ws.apache.org/ns/synapse"> > > > > > > > > > > > > <!-- the SimpleURLRegistry allows access to a URL based registry > > > (e.g. > > > > file:/// or http://) --> > > > > <registry > > > > provider="org.apache.synapse.registry.url.SimpleURLRegistry"> > > > > <parameter name="root"> > > > > > > > > > > > > > > > > > > file:../../workspace/OS3_SOA_POC/src/test/config/Synapse/repository/conf/os3/resources/ > > > > </parameter> > > > > <!-- the root property of the simple URL registry helps > resolve > > a > > > > resource URL as root + key --> > > > > <parameter name="cachableDuration">1000</parameter><!-- all > > > > resources loaded from the URL registry would be cached for this > number > > > of > > > > milli seconds --> > > > > </registry> > > > > > > > > <!-- Entry point --> > > > > <proxy name="JVTAlarmCreationSession" transports="https"> > > > > <publishWSDL > > > > > > > > key="OSSJ/wsdl/FaultManagement/v1-0/JVTAlarmCreationSession.wsdl" /> > > > > <target inSequence="ossj_fault_in" > outSequence="ossj_fault_out" > > > /> > > > > </proxy> > > > > > > > > <!-- handle incoming messages --> > > > > <sequence name="ossj_fault_in" trace="enable"> > > > > <log level="full"> > > > > <property name="SECTION" value="inSequence" /> > > > > </log> > > > > <clone> > > > > <target sequence="ossj_fault_main" /> > > > > <target sequence="ossj_fault_comments_wrapper" /> > > > > </clone> > > > > </sequence> > > > > > > > > <!-- send response messages to client --> > > > > <sequence name="ossj_fault_out" trace="enable"> > > > > <log level="full"> > > > > <property name="SECTION" value="ossj_fault_out" /> > > > > </log> > > > > <xslt key="OSSJ/transform/AddWrapperTag.xslt" /> > > > > <aggregate> > > > > <correlateOn expression="//wrapper" /> > > > > <onComplete> > > > > <iterate preservePayload="true" > > > > > > > > > > > > > > > > > > expression="/wrapper/*[local-name()='createAlarmByValueRequest']/*[local-name()='alarmValue']/*[local-name()='comments']/*[local-name()='item']"> > > > > <log level="full"> > > > > <property name="SECTION" value="iterate" /> > > > > </log> > > > > <target sequence="final" /> > > > > </iterate> > > > > </onComplete> > > > > </aggregate> > > > > </sequence> > > > > > > > > > > > > <sequence name="ossj_fault_main" trace="enable"> > > > > <log level="full"> > > > > <property name="SECTION" > > > > value="ossj_faults_main_precallout_prexslt" /> > > > > </log> > > > > > > > > <xslt > > > > > > > > > > > > > > > > > > key="OSSJ/transform/FaultManagement/v1-0/createAlarmByValueRequest_Main.xslt" > > > > /> > > > > <log level="full"> > > > > <property name="SECTION" > > > > value="ossj_faults_main_precallout_postxslt" /> > > > > </log> > > > > <callout serviceURL="http://localhost:8764/ars/create/"> > > > > <source > > > > xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/" > > > > xmlns:s12="http://www.w3.org/2003/05/soap-envelope" > > > > xpath="s11:Body/child::*[fn:position()=1] | > > > > s12:Body/child::*[fn:position()=1]" /> > > > > <target > > > > xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/" > > > > xmlns:s12="http://www.w3.org/2003/05/soap-envelope" > > > > xpath="s11:Body/child::*[fn:position()=1] | > > > > s12:Body/child::*[fn:position()=1]" /> > > > > </callout> > > > > <log level="full"> > > > > <property name="SECTION" > > > > value="ossj_faults_main_post_callout" /> > > > > </log> > > > > <property name="RESPONSE" value="true" scope="axis2" /> > > > > </sequence> > > > > > > > > <sequence name="ossj_fault_comments_wrapper" trace="enable"> > > > > <log level="full"> > > > > <property name="SECTION" > > > > value="ossj_fault_comments_wrapper" /> > > > > </log> > > > > > > > > <property name="RESPONSE" value="true" scope="axis2" /> > > > > <send/> > > > > </sequence> > > > > > > > > <sequence name="final" trace="enable"> > > > > <log level="full"> > > > > <property name="SECTION" value="final" /> > > > > </log> > > > > <!-- xslt --> > > > > <send /> > > > > </sequence> > > > > > > > > </definitions> > > > > > > > > > > > > On Wed, Apr 16, 2008 at 11:06 AM, Wayne Keenan < > [EMAIL PROTECTED] > > > > > > > wrote: > > > > > > > > > Thanks very much, when I have something working I will make it > less > > > > > specific to my needs and post an article, or create a Synapse > > sample. > > > > > > > > > > All the best, > > > > > Wayne > > > > > > > > > > > > > > > On Wed, Apr 16, 2008 at 9:31 AM, Ruwan Linton < > > [EMAIL PROTECTED]> > > > > > wrote: > > > > > > > > > > > Hi Wayne, > > > > > > > > > > > > According to your problem here is the optimized solution that I > > can > > > > see; > > > > > > > > > > > > - Inside an in mediator Clone the message in to two messages > and > > > > give > > > > > > the messages to two sequences (lets say sequence A and B) > > > > > > - Inside sequence A put a callout mediator after an XSLT > > mediator > > > to > > > > > > transform the message to relevant format (or you can use a > > custom > > > > > > mediator > > > > > > to do the callout), then set the property "RESPONSE" on the > > axis2 > > > > > > level to > > > > > > make it an outgoing message > > > > > > - Inside sequence B set the property "RESPONSE" on the axis2 > > level > > > > to > > > > > > make it an outgoing message > > > > > > > > > > > > > > > > > > - On the out mediator put a XSLT mediator to wrap the messages > > > into > > > > a > > > > > > wrapping tag > > > > > > - Then put an aggregate mediator to aggregate the parent > message > > > and > > > > > > the response from the callout using the wrapping element > > > > > > - Now you will have a message with both the first incoming > > request > > > > and > > > > > > the response from the callout mediator aggregated inside the > > > > wrapping > > > > > > element you used in the transformation above > > > > > > - Then use the iterate mediator to iterate over the child > > elements > > > > > > make sure to use the preservePayload=true to preserve the > whole > > > > > > payload on > > > > > > the iterated (splitted) messages (this will provide number of > > > > > > identical > > > > > > messages according to the number of child elements in the > > message) > > > > > > - Now again use an XSLT mediator to include the required > callout > > > > > > response contents to the child elements to for the new > messages. > > > > > > - Then use the normal send mediator to invoke the service with > > > child > > > > > > messages. > > > > > > > > > > > > following is an abstract config that has to be used, and you can > > > > replace > > > > > > all > > > > > > the XSLT mediators with script mediators with groovy, also you > can > > > > write > > > > > > your own mediators to handle any of these actions if required. > > > > > > > > > > > > <defnitions> > > > > > > <in> > > > > > > <clone><target sequence="A"/><target sequence="B"/></clone> > > > > > > </in> > > > > > > <out> > > > > > > <xslt ... [to add the <wrapper> tag as a wrapping]/> > > > > > > <aggregate expression="//wrapper"/> > > > > > > <iterate expression="[child-element]"><target > > > > > > sequence="final"/></iterate> > > > > > > </out> > > > > > > <sequence name="A"> > > > > > > <xslt /> > > > > > > <callout/> > > > > > > <property name="RESPONSE" value="true" scope="axis2"/> > > > > > > </sequence> > > > > > > <sequence name="B"> > > > > > > <property name="RESPONSE" value="true" scope="axis2"/> > > > > > > </sequence> > > > > > > <sequence name="final"> > > > > > > <xslt /> > > > > > > <send/> > > > > > > </sequence> > > > > > > > > > > > > Hope this will help you. > > > > > > > > > > > > If you want to block a particular message you can do so by > > > evaluating > > > > > > the > > > > > > following code over that message; > > > > > > > > > > > > OperationContext opCtx > > > > > > = ((Axis2MessageContext) > > > > > > synCtx).getAxis2MessageContext().getOperationContext(); > > > > > > if (!continueParent && opCtx != null) { > > > > > > opCtx.setProperty(Constants.RESPONSE_WRITTEN, > "SKIP"); > > > > > > } > > > > > > > > > > > > Thanks, > > > > > > Ruwan > > > > > > > > > > > > On Wed, Apr 16, 2008 at 12:26 PM, Wayne Keenan < > > > [EMAIL PROTECTED] > > > > > > > > > > > wrote: > > > > > > > > > > > > > Hi, > > > > > > > > > > > > > > The incoming message to my proxy contains a parent record with > > > many > > > > > > child > > > > > > > records. > > > > > > > I need to send the parent record to an atomic create record > > > service > > > > > > and > > > > > > > with > > > > > > > the response from that atomic service I extract a key which I > > then > > > > > > > subsequently need to use when sending the child records to > > further > > > > > > atomic > > > > > > > create services. > > > > > > > > > > > > > > What I can't not see is how to easily preserve the original > > > message > > > > > > AND > > > > > > > wait > > > > > > > for the 1st message to complete, e.g. a clone isn't viable as > > the > > > > > > > sequences > > > > > > > are triggered in parallel and I need to wait for the parent > ket > > > from > > > > > > the > > > > > > > 1st > > > > > > > create. > > > > > > > > > > > > > > Would one approach be to: > > > > > > > > > > > > > > 1. insert a generated unique message id on input, for use > later > > in > > > > the > > > > > > > proxy > > > > > > > only > > > > > > > 2. clone the message, send the 1st to the create for the > parent, > > > > > > keeping > > > > > > > the > > > > > > > 2nd untouched > > > > > > > 3. aggregate based on id created in #1 > > > > > > > 4. take the unaltered child messages from the 2nd in #2 and > use > > > for > > > > > > the > > > > > > > child creates > > > > > > > > > > > > > > To me that seems inefficient (I will have approx. 6 'types' of > > > child > > > > > > > records), so I'm wondering if mm overlooking something and/or > > > going > > > > > > > against > > > > > > > the grain. > > > > > > > > > > > > > > > > > > > > > Thanks > > > > > > > Wayne > > > > > > > > > > > > > > On Tue, Apr 15, 2008 at 9:51 AM, Ruwan Linton < > > > > [EMAIL PROTECTED]> > > > > > > > wrote: > > > > > > > > > > > > > > > Hi Wayne, > > > > > > > > > > > > > > > > You should have a look at the callout mediator [1] and also > > this > > > > [2] > > > > > > > case > > > > > > > > study, which covers some ground and do something similar. > Also > > > you > > > > > > can > > > > > > > use > > > > > > > > the SynapseEnvironment.createMessageContext() to get a new > > > message > > > > > > > context > > > > > > > > created. You can use java inside groovy and hence this call > > will > > > > be > > > > > > > > possible > > > > > > > > inside groovy as well. > > > > > > > > > > > > > > > > Hope this will help. > > > > > > > > > > > > > > > > [1] - http://synapse.apache.org/Synapse_Samples.html#Callout > > > > > > > > [2] - https://wso2.org/library/3325 > > > > > > > > > > > > > > > > Thanks, > > > > > > > > Ruwan > > > > > > > > > > > > > > > > On Tue, Apr 15, 2008 at 1:57 PM, Wayne Keenan < > > > > > > [EMAIL PROTECTED]> > > > > > > > > wrote: > > > > > > > > > > > > > > > > > Hi, > > > > > > > > > > > > > > > > > > I think I might be pushing/abusing mediators, by doing > more > > > that > > > > > > > message > > > > > > > > > manipulation, I'm trying to call endpoint from within a > > > script, > > > > > > and > > > > > > > > would > > > > > > > > > be > > > > > > > > > grateful for some advice. > > > > > > > > > > > > > > > > > > Here is the setup: > > > > > > > > > > > > > > > > > > 1. Synapse > > > > > > > > > > > > > > > > > > a) publishing a predefined WSDL of 'composite' services. > > e.g. > > > > > > > > > createTroubleTicket. > > > > > > > > > b) a mediator chops up incoming SOAP Payload XML into > parent > > > > child > > > > > > > > records > > > > > > > > > c) the mediator calls (external) lower level atomic > services > > > > (e.g. > > > > > > > > create > > > > > > > > > record) for the parent > > > > > > > > > d) the mediator needs to either calculate child id (e.g. > > > > > > sequential > > > > > > > > index) > > > > > > > > > or use the result of parent ids created at runtime > > > > > > > > > e) the mediator calls (external) lower level create record > > for > > > > the > > > > > > > > > children > > > > > > > > > > > > > > > > > > 2. RESTful server for the (external) Atomic services > > > > > > > > > a). create record in a DB (not JPA, uses propritary API to > > > > create > > > > > > 1 > > > > > > > row > > > > > > > > in > > > > > > > > > an underlying DB) > > > > > > > > > > > > > > > > > > > > > > > > > > > I am writing a Groovy mediator to take the parent and > child > > > > > > records > > > > > > > and > > > > > > > > > then > > > > > > > > > call the atomic service endpoitns using somehtin glike: > > > > > > > > > > > > > > > > > > def createEP = mc.getEndpoint("SOME_API_CREATE") > > > > > > > > > createEP.send(newMc) > > > > > > > > > > > > > > > > > > I've basically got 1a,1b & 2a working, but for 1c-e > trying > > to > > > > > > create > > > > > > > > the > > > > > > > > > new MessaceContext ('newMc') is perhaps telling me I > should > > > not > > > > be > > > > > > > doing > > > > > > > > > this? > > > > > > > > > > > > > > > > > > I wanted to avoid 'programming in XML' via the declarative > > > > Synapse > > > > > > > > > mediators, but perhaps I will have to? > > > > > > > > > > > > > > > > > > Regards > > > > > > > > > Wayne > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > Ruwan Linton > > > > > > > > http://www.wso2.org - "Oxygenating the Web Services > Platform" > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > Ruwan Linton > > > > > > http://www.wso2.org - "Oxygenating the Web Services Platform" > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > Ruwan Linton > > > http://www.wso2.org - "Oxygenating the Web Services Platform" > > > > > > > > > -- > Ruwan Linton > http://www.wso2.org - "Oxygenating the Web Services Platform" >
