HTTP -> FIX Response Handling

View: New views
10 Messages — Rating Filter:   Alert me  

HTTP -> FIX Response Handling

by PrgTrdr () :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

I have cloned Sample 259 to implement a use case where a FIX client communicates with a Web Service.  

Synapse is working well as far as:

1) establishing the FIX session from the client to Synapse (Synapse is configured as a FIX acceptor only--no initiator config is specified)
2) FIX Logon
3) Receiving a FIX a New Order message
4) performing an XSLT to create a WS request
5) sending the Request to the WS
6) receiving back multiple SOAP Responses from the WS (the second response should be returned to the FIX client)
7) performing an XSLT to convert the second 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).  (Below is an example of a response message that is being 'lost'.)

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?

Thanks,
Bill

Sample Response message:

2009-07-15 17:45:00,288 [-] [SynapseWorker-6]  INFO LogMediator To: http://www.w3.org/2005/08/addressing/anonymous, WSAction: , SOAPAction: , MessageID: urn:uuid:0C3E6DDCF68F3F9501225830875365611438557154, 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">20090715-12:35:27.027</field>
<field id="56">BROKER</field>
</header>
<body>
<field id="37">ON-1-1247679327423-1</field>
<field id="11">ClientOrd1</field>
<field id="38">1000</field>
<field id="40">2</field>
<field id="54">1</field>
<field id="55">MSQ</field>
<field id="59">0</field>
<field id="60">20090715-12:35:27.027</field>
</body>
</message>
 </soapenv:Body></soapenv:Envelope>

Re: HTTP -> FIX Response Handling

by Asanka Abeysinghe :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi,
Sample 259 drop the response due to the sample service does not provide
a proper request that can convert into FIX. But with a service that
sends a response with required values to create a FIX response,
execution(fill/partly fill) or an ACK can send back to the sender using
the FIX session created with Synapse and FIX client.
Please attach your Synapse confiuration to provide detailed information.
Regards
Asanka

PrgTrdr 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?
>
> Thanks,
> Bill
>  


Re: HTTP -> FIX Response Handling

by Hiranya Jayathilaka-3 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi Bill,

On Thu, Jul 16, 2009 at 2:40 AM, PrgTrdr <prgtrdr@...> 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: hiranya@...;  Mobile: +94 77 633 3491
Blog: http://techfeast-hiranya.blogspot.com

Re: HTTP -> FIX Response Handling

by PrgTrdr :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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.

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 <prgtrdr@gmail.com> 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: hiranya@wso2.com;  Mobile: +94 77 633 3491
Blog: http://techfeast-hiranya.blogspot.com

Re: HTTP -> FIX Response Handling

by Hiranya Jayathilaka-3 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi Bill,

On Thu, Jul 16, 2009 at 6:17 PM, PrgTrdr <prgtrdr@...> 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 <prgtrdr@...> 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: hiranya@...;  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: hiranya@...;  Mobile: +94 77 633 3491
Blog: http://techfeast-hiranya.blogspot.com

Re: HTTP -> FIX Response Handling

by PrgTrdr () :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

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&amp;SenderCompID=OPTMED&amp;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

More notes:
. I am using a snapshot that is about 1 month old.

. It looks like Asanka Abeysinghe was having a similar problem back in June of 2008 but no one posted a response <http://mail-archives.apache.org/mod_mbox/synapse-user/200806.mbox/%3CBLU129-W29E370152010834E19E8AED4A60@phx.gbl%3E>.

Thanks again for your help.
Bill

Hiranya Jayathilaka-3 wrote:
Hi Bill,

On Thu, Jul 16, 2009 at 6:17 PM, PrgTrdr <prgtrdr@gmail.com> 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 <prgtrdr@gmail.com> 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: hiranya@wso2.com;  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: hiranya@wso2.com;  Mobile: +94 77 633 3491
Blog: http://techfeast-hiranya.blogspot.com

More DEBUG output Re: HTTP -> FIX Response Handling

by PrgTrdr :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Here is the synapse.log output with DEBUG level tracing when it gets to the <send> mediator:

2009-07-16 10:25:38,255 [-] [SynapseWorker-1] DEBUG SendMediator Start : Send mediator
2009-07-16 10:25:38,255 [-] [SynapseWorker-1] DEBUG EndpointContext Checking if endpoint : AnonymousEndpoint currently at state ACTIVE can be used now?
2009-07-16 10:25:38,255 [-] [SynapseWorker-1] DEBUG AddressEndpoint Sending message through endpoint : null resolving to address = fix://localhost:9876?BeginString=FIX.4.2&SenderCompID=OPTMED&TargetCompID=BROKER
2009-07-16 10:25:38,255 [-] [SynapseWorker-1] DEBUG AddressEndpoint SOAPAction:
2009-07-16 10:25:38,255 [-] [SynapseWorker-1] DEBUG AddressEndpoint WSA-Action:
2009-07-16 10:25:38,255 [-] [SynapseWorker-1] DEBUG Axis2FlexibleMEPClient Sending [add = false] [sec = false] [rm = false] [mtom = false] [swa = false] [format = null] [force soap11=false] [force soap12=false] [pox=false] [get=false] [encoding=null] [to Address: http://www.w3.org/2005/08/addressing/anonymous]
2009-07-16 10:25:38,255 [-] [SynapseWorker-1] DEBUG Axis2FlexibleMEPClient Message [Original Request Message ID : urn:uuid:920AD729A39F5B343582610572454048-351516953] [New Cloned Request Message ID : urn:uuid:920AD729A39F5B343582624861297747737116756]
2009-07-16 10:25:38,255 [-] [SynapseWorker-1] DEBUG SynapseCallbackReceiver Callback added. Total callbacks waiting for : 1
2009-07-16 10:25:38,255 [-] [SynapseWorker-1] DEBUG FIXTransportSender Attempting to send a FIX message, Message ID:urn:uuid:920AD729A39F5B343582624861297747737116756
2009-07-16 10:25:38,375 [-] [SynapseWorker-1] 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 10:25:39,597 [-] [SynapseWorker-1]  WARN MediatorWorker Executing fault handler due to exception encountered



Thanks Hiranya,

I believe you are offering the correct solution, however I'm still not getting it right.  (FYI, I am using a snapshot that is about 1 month old.)

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&amp;SenderCompID=OPTMED&amp;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 <prgtrdr@gmail.com> 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 <prgtrdr@gmail.com> 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: hiranya@wso2.com;  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: hiranya@wso2.com;  Mobile: +94 77 633 3491
Blog: http://techfeast-hiranya.blogspot.com


Re: HTTP -> FIX Response Handling

by Hiranya Jayathilaka-3 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi Bill,
My bad! I forgot to mention that you need to set the service name property
using the property mediator, before calling the send mediator. Sorry about
that. Use the property mediator as follows in your out sequence before the
send mediator.

<property name="transport.fix.ServiceName" value="FIXProxy"
scope="axis2-client"/>

The FIX transport sender requires that message context carries service
information. If the message was received by the FIX transport listener it
will set the service information. But in your scenario the message arrives
over HTTP so we need to explicitly set it at service configuration level.

Thanks,
Hiranya

On Thu, Jul 16, 2009 at 7:33 PM, PrgTrdr <prgtrdr@...> wrote:

>
> 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 <prgtrdr@...> 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 <prgtrdr@...> 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: hiranya@...;  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: hiranya@...;  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.
>
>


--
Hiranya Jayathilaka
Software Engineer;
WSO2 Inc.;  http://wso2.org
E-mail: hiranya@...;  Mobile: +94 77 633 3491
Blog: http://techfeast-hiranya.blogspot.com

Re: HTTP -> FIX Response Handling

by PrgTrdr :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hiranya & Asankha,

Thanks very much for your help.  It's finally working!

It would be great to have a sample that shows asynchronous message handling.  If there's a need for one I will write it when I get a few extra minutes.  I'm already on the hook to extend the XSLT sample to show parameter passing.

Thanks,
Bill



Hiranya Jayathilaka-3 wrote:
Hi Bill,
My bad! I forgot to mention that you need to set the service name property
using the property mediator, before calling the send mediator. Sorry about
that. Use the property mediator as follows in your out sequence before the
send mediator.

<property name="transport.fix.ServiceName" value="FIXProxy"
scope="axis2-client"/>

The FIX transport sender requires that message context carries service
information. If the message was received by the FIX transport listener it
will set the service information. But in your scenario the message arrives
over HTTP so we need to explicitly set it at service configuration level.

Thanks,
Hiranya

On Thu, Jul 16, 2009 at 7:33 PM, PrgTrdr <prgtrdr@gmail.com> wrote:

>
> 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 <prgtrdr@gmail.com> 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 <prgtrdr@gmail.com> 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: hiranya@wso2.com;  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: hiranya@wso2.com;  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.
>
>


--
Hiranya Jayathilaka
Software Engineer;
WSO2 Inc.;  http://wso2.org
E-mail: hiranya@wso2.com;  Mobile: +94 77 633 3491
Blog: http://techfeast-hiranya.blogspot.com

Re: HTTP -> FIX Response Handling

by Hiranya Jayathilaka-3 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi Bill,

On Fri, Jul 17, 2009 at 7:56 PM, PrgTrdr <prgtrdr@...> wrote:

>
> Hiranya & Asankha,
>
> Thanks very much for your help.  It's finally working!


You are most welcome and it's great to hear that you got it all working.

>
>
> It would be great to have a sample that shows asynchronous message
> handling.
> If there's a need for one I will write it when I get a few extra minutes.
> I'm already on the hook to extend the XSLT sample to show parameter
> passing.


Excellent! Please make the necessary additions to the documentation and
provide a patch through our JIRA. We always welcome new useful documentation
:)

Thanks,
Hiranya


>
> Thanks,
> Bill
>
>
>
>
> Hiranya Jayathilaka-3 wrote:
> >
> > Hi Bill,
> > My bad! I forgot to mention that you need to set the service name
> property
> > using the property mediator, before calling the send mediator. Sorry
> about
> > that. Use the property mediator as follows in your out sequence before
> the
> > send mediator.
> >
> > <property name="transport.fix.ServiceName" value="FIXProxy"
> > scope="axis2-client"/>
> >
> > The FIX transport sender requires that message context carries service
> > information. If the message was received by the FIX transport listener it
> > will set the service information. But in your scenario the message
> arrives
> > over HTTP so we need to explicitly set it at service configuration level.
> >
> > Thanks,
> > Hiranya
> >
> > On Thu, Jul 16, 2009 at 7:33 PM, PrgTrdr <prgtrdr@...> wrote:
> >
> >>
> >> 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 <prgtrdr@...> 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 <prgtrdr@...>
> 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: hiranya@...;  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: hiranya@...;  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.
> >>
> >>
> >
> >
> > --
> > Hiranya Jayathilaka
> > Software Engineer;
> > WSO2 Inc.;  http://wso2.org
> > E-mail: hiranya@...;  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-tp24505424p24535501.html
> Sent from the Synapse - User mailing list archive at Nabble.com.
>
>


--
Hiranya Jayathilaka
Software Engineer;
WSO2 Inc.;  http://wso2.org
E-mail: hiranya@...;  Mobile: +94 77 633 3491
Blog: http://techfeast-hiranya.blogspot.com