Thanks Hiranya,
I believe you are offering the correct solution, however I'm still not
getting it right.
1. At your suggestion, I inserted the following <send> mediator in my <out>
sequence.
<send>
<endpoint>
<address
uri="fix://localhost:9876?BeginString=FIX.4.2&SenderCompID=OPTMED&TargetCompID=BROKER"/>
</endpoint>
</send>
2. When it reaches this point, Synapse gives the exception, "Unable to find
a valid service for the message". Here is the log output:
2009-07-16 09:37:51,343 [-] [SynapseWorker-2] INFO LogMediator To:
http://www.w3.org/2005/08/addressing/anonymous, WSAction: , SOAPAction: ,
MessageID: urn:uuid:5191E37439E3958F4479756836588468614536389, Direction:
response, Envelope: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body>
<message xmlns:cfl="http://www.harts.com/cfl"
xmlns:fn="http://www.w3.org/2005/02/xpath-functions" counter="1"
inSession="FIX.4.2:OPTMED->BROKER">
<header>
<field id="8">FIX.4.2</field>
<field id="35">8</field>
<field id="49">OPTMED</field>
<field id="52">20090716-08:37:30.030</field>
<field id="56">BROKER</field>
</header>
<body>
<field id="37" />
<field id="11" />
<field id="38">1000</field>
<field id="40">2</field>
<field id="54">1</field>
<field id="55" />
<field id="59">3</field>
<field id="60">20090716-08:37:30.030</field>
</body>
</message>
</soapenv:Body></soapenv:Envelope>
2009-07-16 09:37:51,413 [-] [SynapseWorker-2] ERROR Axis2Sender Unexpected
error during sending message out
org.apache.axis2.AxisFault: Unable to find a valid service for the message
at
org.apache.synapse.transport.fix.FIXUtils.getServiceName(FIXUtils.java:655)
at
org.apache.synapse.transport.fix.FIXTransportSender.sendMessage(FIXTransportSender.java:103)
at
org.apache.axis2.transport.base.AbstractTransportSender.invoke(AbstractTransportSender.java:112)
at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:435)
at
org.apache.synapse.core.axis2.DynamicAxisOperation$DynamicOperationClient.send(DynamicAxisOperation.java:190)
at
org.apache.synapse.core.axis2.DynamicAxisOperation$DynamicOperationClient.executeImpl(DynamicAxisOperation.java:174)
at
org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
at
org.apache.synapse.core.axis2.Axis2FlexibleMEPClient.send(Axis2FlexibleMEPClient.java:343)
at org.apache.synapse.core.axis2.Axis2Sender.sendOn(Axis2Sender.java:56)
at
org.apache.synapse.core.axis2.Axis2SynapseEnvironment.send(Axis2SynapseEnvironment.java:176)
at
org.apache.synapse.endpoints.AbstractEndpoint.send(AbstractEndpoint.java:194)
at
org.apache.synapse.endpoints.AddressEndpoint.send(AddressEndpoint.java:59)
at
org.apache.synapse.mediators.builtin.SendMediator.mediate(SendMediator.java:75)
at
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:60)
at
org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:115)
at
org.apache.synapse.mediators.MediatorWorker.run(MediatorWorker.java:69)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:651)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:676)
at java.lang.Thread.run(Thread.java:595)
2009-07-16 09:37:51,423 [-] [SynapseWorker-2] WARN EndpointContext Endpoint
: AnonymousEndpoint will be marked SUSPENDED as it failed
3. Here is the FIXProxy definition (very similar to Sample 259):
<endpoint name="test-system" > <!-- Must use TCPMon as proxy -->
<address uri="http://localhost:2001/api/v1" format="soap11" />
</endpoint>
<proxy name="FIXProxy" transports="fix">
<target endpoint="test-system" >
<inSequence>
<log level="full" />
.
.
.
<!-- Translate the message -->
<xslt key="xslt-key-req" />
<log level="full" />
</inSequence>
<outSequence>
<log level="full" />
<sequence key="HandleResponse1" />
<sequence key="HandleResponse2" />
<log level="full" />
<send />
</outSequence>
</target>
<parameter
name="transport.fix.AcceptorConfigURL">file:repository/conf/OptMed/resources/fix/FIX-OptMed.cfg</parameter>
<parameter name="transport.fix.AcceptorMessageStore">file</parameter>
<parameter name="transport.fix.AcceptorLogFactory">file</parameter>
</proxy>
4. Here is the FIX configuration file FIX-OptMed.cfg referenced in the
FIXProxy definition (very similar to default Sample setup):
[default]
FileStorePath=logs/fix/OptMed
FileLogPath=logs/fix/OptMed
ConnectionType=acceptor
StartTime=00:00:00
EndTime=00:00:00
HeartBtInt=30
ValidOrderTypes=1,2,F
SenderCompID=OPTMED
TargetCompID=BROKER
UseDataDictionary=Y
DefaultMarketPrice=12.30
ResetOnLogon=Y
ResetOnDisconnect=Y
[session]
BeginString=FIX.4.2
SocketAcceptPort=9876
DataDictionary=C:\Apache\Synapse-Snapshot\repository\conf\OptMed\resources\fix\DD-OptMed42.xml
Thanks again for your help.
Bill
Hiranya Jayathilaka-3 wrote:
>
> Hi Bill,
>
> On Thu, Jul 16, 2009 at 6:17 PM, PrgTrdr <[email protected]> wrote:
>
>>
>> After more tracing and analysis I think I understand what is happening
>> but
>> I
>> still need a little help.
>>
>> My synapse.xml configuration includes an inline task whose purpose is to
>> periodically poll the WS for market data messages. When such a message
>> comes in it is received as an "asynchronous response message" and is
>> passed
>> to the Main Sequence. My problem is how to get it passed to the FIX
>> session--either directly through the proxy or indirectly through the Main
>> sequence.
>
>
> I believe what you want to do is to pass the market data messages coming
> from the WS to the FIX acceptor session on which your proxy service is
> listening on. Is that correct? In that case you could address the FIX
> session by giving it an EPR and then use the send mediator to forward
> messages to the FIX session. For an example let's say your FIX session has
> following parameters.
>
> BeginString=FIX.4.4
> SenderCompID=SYNAPSE
> TargetCompID=MyComp
>
> Then we can use the following EPR to address the FIX session:
>
> fix://localhost:9876?BeginString=FIX.4.4&SenderCompID=SYNAPSE&TargetCompID=MyComp
>
>
> Replace the port number (9876) with the actual port number on which your
> FIX
> proxy service is listening on. Now in the main sequence you can use the
> send
> mediator as follows to forward messages to the FIX session.
>
> <send>
> <endpoint>
> <address
> uri="fix://localhost:9876?BeginString=FIX.4.4&SenderCompID=SYNAPSE&TargetCompID=MyComp
> "/>
> </endpoint>
> </send>
>
> Does this achive your goal?
>
> Also please note that the initial FIX transport implementation did not
> support scenarios as complex as this. The enhancements required to run
> this
> scenario was done very recently and hence this will work only on Synapse
> snapshot builds until we get the next release out. On earlier releases you
> will get an NPE if you try to do this.
>
> Thanks,
> Hiranya
>
>
>
>>
>> Is there a different way to structure the task definition so Synapse
>> knows
>> to route the response to the FIX proxy? (I saw a couple of Nabble
>> messages
>> about a 'ProxyInjector' mediator but I don't know if that is the answer
>> to
>> this problem (if it exists).)
>>
>> Here's the task definition:
>> <task class="org.apache.synapse.startup.tasks.MessageInjector"
>> name="GetMarketMessages">
>> <property name="to" value="http://localhost:2001/api/v1"/>
>> <property name="format" value="soap11"/>
>> <property name="soapAction" value=""/>
>> <property name="message">
>> <GetMarketMessages xmlns="http://www.harts.com/cfl" />
>> </property>
>> <trigger interval="10"/>
>> </task>
>>
>> Here's the log output:
>> 2009-07-13 14:52:25,409 [-] [HttpClientWorker-15] DEBUG
>> SynapseCallbackReceiver Synapse received an asynchronous response message
>> 2009-07-13 14:52:25,539 [-] [HttpClientWorker-15] DEBUG
>> SynapseCallbackReceiver Received To: null
>> 2009-07-13 14:52:25,609 [-] [HttpClientWorker-15] DEBUG
>> SynapseCallbackReceiver SOAPAction:
>> 2009-07-13 14:52:25,609 [-] [HttpClientWorker-15] DEBUG
>> SynapseCallbackReceiver WSA-Action:
>> 2009-07-13 14:52:25,689 [-] [HttpClientWorker-15] DEBUG
>> SynapseCallbackReceiver Body :
>> <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope
>> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>> xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soapenv:Body>
>> <cfl:GetMarketMessagesResponse xmlns:cfl="http://www.harts.com/cfl">
>> <cfl:GetMarketMessagesResponseData
>> sessionID="A29A1D4D85AEF15F46D3229414619591" />
>> </cfl:GetMarketMessagesResponse>
>> </soapenv:Body></soapenv:Envelope>
>> 2009-07-13 14:52:25,860 [-] [HttpClientWorker-15] DEBUG
>> Axis2SynapseEnvironment Injecting MessageContext
>> 2009-07-13 14:52:25,860 [-] [HttpClientWorker-15] DEBUG
>> Axis2SynapseEnvironment Using Main Sequence for injected message
>> 2009-07-13 14:52:25,920 [-] [HttpClientWorker-15] DEBUG SequenceMediator
>> Start : Sequence <main>
>> 2009-07-13 14:52:25,950 [-] [HttpClientWorker-15] DEBUG SequenceMediator
>> Sequence <SequenceMediator> :: mediate()
>> 2009-07-13 14:52:26,050 [-] [HttpClientWorker-15] DEBUG InMediator Start
>> :
>> In mediator
>> 2009-07-13 14:52:26,050 [-] [HttpClientWorker-15] DEBUG InMediator
>> Current
>> message is a response - skipping child mediators
>> 2009-07-13 14:52:26,080 [-] [HttpClientWorker-15] DEBUG InMediator End :
>> In
>> mediator
>> 2009-07-13 14:52:26,080 [-] [HttpClientWorker-15] DEBUG OutMediator Start
>> :
>> Out mediator
>> 2009-07-13 14:52:26,140 [-] [HttpClientWorker-15] DEBUG OutMediator
>> Current
>> message is outgoing - executing child mediators
>> 2009-07-13 14:52:26,170 [-] [HttpClientWorker-15] DEBUG OutMediator
>> Sequence
>> <OutMediator> :: mediate()
>> 2009-07-13 14:52:26,170 [-] [HttpClientWorker-15] DEBUG FilterMediator
>> Start
>> : Filter mediator
>> 2009-07-13 14:52:26,280 [-] [HttpClientWorker-15] DEBUG FilterMediator
>> XPath
>> expression :
>> boolean(//cfl:LoginResponse/cfl:LoginResponseData/@sessionID)
>> evaluates to false and no else path - skipping child mediators
>> 2009-07-13 14:52:26,350 [-] [HttpClientWorker-15] DEBUG FilterMediator
>> End
>> :
>> Filter mediator
>> 2009-07-13 14:52:26,451 [-] [HttpClientWorker-15] DEBUG FilterMediator
>> Start
>> : Filter mediator
>> 2009-07-13 14:52:26,481 [-] [HttpClientWorker-15] DEBUG FilterMediator
>> XPath
>> expression : boolean(//cfl:GetMarketMessagesResponseData) evaluates to
>> true
>> - executing child mediators
>> 2009-07-13 14:52:26,531 [-] [HttpClientWorker-15] DEBUG FilterMediator
>> Sequence <FilterMediator> :: mediate()
>> .
>> .
>> .
>> 2009-07-13 14:52:26,851 [-] [HttpClientWorker-15] DEBUG FilterMediator
>> End
>> :
>> Filter mediator
>> 2009-07-13 14:52:26,851 [-] [HttpClientWorker-15] DEBUG OutMediator End :
>> Out mediator
>> 2009-07-13 14:52:26,931 [-] [HttpClientWorker-15] DEBUG SequenceMediator
>> End
>> : Sequence <main>
>>
>> Appreciate any help...
>> Thanks,
>> Bill
>>
>>
>> Hiranya Jayathilaka-3 wrote:
>> >
>> > Hi Bill,
>> >
>> > On Thu, Jul 16, 2009 at 2:40 AM, PrgTrdr <[email protected]> wrote:
>> >
>> >>
>> >> I have cloned Sample 259 to implement a use case where a FIX client
>> >> communicates with a Web Service. The system is working well as far as
>> 1)
>> >> establishing the FIX session from the client to Synapse, 2) Logon,
>> >> 3)Sending
>> >> a New Order message, 4)performing an XSLT to create a WS request,
>> >> 5)sending
>> >> the Request to the WS, 6)receiving back a Response from the WS,
>> >> 7)performing
>> >> an XSLT to convert the SOAP response to an XML-encapsulated FIX
>> message.
>> >> But then the response message never flows back to the FIX transport (I
>> >> can
>> >> tell by examining the QuickFIX/J logs).
>> >>
>> >> I am receiving (and converting) the WS Response message in a standard
>> >> "<out>" sequence. At the end I placed
>> >>
>> >> <send>
>> >> <endpoint key="FIXProxy"/>
>> >> </send>
>> >>
>> >> to see if that would make it work, but the message doesn't go out to
>> FIX,
>> >> nor does it show up in the FIXProxy <outSequence> (I put some log
>> >> mediators
>> >> in there to trace activity).
>> >>
>> >> Sample 259 is one-way only (FIX->SOAP). Can someone give me an idea
>> >> about
>> >> what needs to be done to make this two-way? Perhaps changes to the
>> >> FIXProxy
>> >> configuration?
>> >
>> >
>> > How about placing an empty <send/> element in the <outSequence> of your
>> > proxy service? I think that should do the trick. Anyway please send in
>> > your
>> > full Synapse configuration for us to get a clear idea of the scenario.
>> >
>> > Thanks,
>> > Hiranya
>> >
>> >
>> >>
>> >> Thanks,
>> >> Bill
>> >> --
>> >> View this message in context:
>> >>
>> http://www.nabble.com/HTTP--%3E-FIX-Response-Handling-tp24505424p24505424.html
>> >> Sent from the Synapse - User mailing list archive at Nabble.com.
>> >>
>> >>
>> >
>> >
>> > --
>> > Hiranya Jayathilaka
>> > Software Engineer;
>> > WSO2 Inc.; http://wso2.org
>> > E-mail: [email protected]; Mobile: +94 77 633 3491
>> > Blog: http://techfeast-hiranya.blogspot.com
>> >
>> >
>>
>> --
>> View this message in context:
>> http://www.nabble.com/HTTP--%3E-FIX-Response-Handling-tp24505424p24515672.html
>> Sent from the Synapse - User mailing list archive at Nabble.com.
>>
>>
>
>
> --
> Hiranya Jayathilaka
> Software Engineer;
> WSO2 Inc.; http://wso2.org
> E-mail: [email protected]; Mobile: +94 77 633 3491
> Blog: http://techfeast-hiranya.blogspot.com
>
>
--
View this message in context:
http://www.nabble.com/HTTP--%3E-FIX-Response-Handling-tp24505424p24517040.html
Sent from the Synapse - User mailing list archive at Nabble.com.