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

Thanks again for your help.
Bill


Hiranya Jayathilaka-3 wrote:
> 
> Hi Bill,
> 
> On Thu, Jul 16, 2009 at 6:17 PM, PrgTrdr <[email protected]> wrote:
> 
>>
>> After more tracing and analysis I think I understand what is happening
>> but
>> I
>> still need a little help.
>>
>> My synapse.xml configuration includes an inline task whose purpose is to
>> periodically poll the WS for market data messages.  When such a message
>> comes in it is received as an "asynchronous response message" and is
>> passed
>> to the Main Sequence.  My problem is how to get it passed to the FIX
>> session--either directly through the proxy or indirectly through the Main
>> sequence.
> 
> 
> I believe what you want to do is to pass the market data messages coming
> from the WS to the FIX acceptor session on which your proxy service is
> listening on. Is that correct? In that case you could address the FIX
> session by giving it an EPR and then use the send mediator to forward
> messages to the FIX session. For an example let's say your FIX session has
> following parameters.
> 
> BeginString=FIX.4.4
> SenderCompID=SYNAPSE
> TargetCompID=MyComp
> 
> Then we can use the following EPR to address the FIX session:
> 
> fix://localhost:9876?BeginString=FIX.4.4&SenderCompID=SYNAPSE&TargetCompID=MyComp
> 
> 
> Replace the port number (9876) with the actual port number on which your
> FIX
> proxy service is listening on. Now in the main sequence you can use the
> send
> mediator as follows to forward messages to the FIX session.
> 
> <send>
>   <endpoint>
>       <address
> uri="fix://localhost:9876?BeginString=FIX.4.4&SenderCompID=SYNAPSE&TargetCompID=MyComp
> "/>
>   </endpoint>
> </send>
> 
> Does this achive your goal?
> 
> Also please note that the initial FIX transport implementation did not
> support scenarios as complex as this. The enhancements required to run
> this
> scenario was done very recently and hence this will work only on Synapse
> snapshot builds until we get the next release out. On earlier releases you
> will get an NPE if you try to do this.
> 
> Thanks,
> Hiranya
> 
> 
> 
>>
>> Is there a different way to structure the task definition so Synapse
>> knows
>> to route the response to the FIX proxy?  (I saw a couple of Nabble
>> messages
>> about a 'ProxyInjector' mediator but I don't know if that is the answer
>> to
>> this problem (if it exists).)
>>
>> Here's the task definition:
>>    <task class="org.apache.synapse.startup.tasks.MessageInjector"
>> name="GetMarketMessages">
>>        <property name="to" value="http://localhost:2001/api/v1"/>
>>        <property name="format" value="soap11"/>
>>        <property name="soapAction" value=""/>
>>        <property name="message">
>>            <GetMarketMessages xmlns="http://www.harts.com/cfl"; />
>>        </property>
>>        <trigger interval="10"/>
>>    </task>
>>
>> Here's the log output:
>> 2009-07-13 14:52:25,409 [-] [HttpClientWorker-15] DEBUG
>> SynapseCallbackReceiver Synapse received an asynchronous response message
>> 2009-07-13 14:52:25,539 [-] [HttpClientWorker-15] DEBUG
>> SynapseCallbackReceiver Received To: null
>> 2009-07-13 14:52:25,609 [-] [HttpClientWorker-15] DEBUG
>> SynapseCallbackReceiver SOAPAction:
>> 2009-07-13 14:52:25,609 [-] [HttpClientWorker-15] DEBUG
>> SynapseCallbackReceiver WSA-Action:
>> 2009-07-13 14:52:25,689 [-] [HttpClientWorker-15] DEBUG
>> SynapseCallbackReceiver Body :
>> <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope
>> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";
>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>> xmlns:xsd="http://www.w3.org/2001/XMLSchema";><soapenv:Body>
>>  <cfl:GetMarketMessagesResponse xmlns:cfl="http://www.harts.com/cfl";>
>>   <cfl:GetMarketMessagesResponseData
>> sessionID="A29A1D4D85AEF15F46D3229414619591" />
>>  </cfl:GetMarketMessagesResponse>
>>  </soapenv:Body></soapenv:Envelope>
>> 2009-07-13 14:52:25,860 [-] [HttpClientWorker-15] DEBUG
>> Axis2SynapseEnvironment Injecting MessageContext
>> 2009-07-13 14:52:25,860 [-] [HttpClientWorker-15] DEBUG
>> Axis2SynapseEnvironment Using Main Sequence for injected message
>> 2009-07-13 14:52:25,920 [-] [HttpClientWorker-15] DEBUG SequenceMediator
>> Start : Sequence <main>
>> 2009-07-13 14:52:25,950 [-] [HttpClientWorker-15] DEBUG SequenceMediator
>> Sequence <SequenceMediator> :: mediate()
>> 2009-07-13 14:52:26,050 [-] [HttpClientWorker-15] DEBUG InMediator Start
>> :
>> In mediator
>> 2009-07-13 14:52:26,050 [-] [HttpClientWorker-15] DEBUG InMediator
>> Current
>> message is a response - skipping child mediators
>> 2009-07-13 14:52:26,080 [-] [HttpClientWorker-15] DEBUG InMediator End :
>> In
>> mediator
>> 2009-07-13 14:52:26,080 [-] [HttpClientWorker-15] DEBUG OutMediator Start
>> :
>> Out mediator
>> 2009-07-13 14:52:26,140 [-] [HttpClientWorker-15] DEBUG OutMediator
>> Current
>> message is outgoing - executing child mediators
>> 2009-07-13 14:52:26,170 [-] [HttpClientWorker-15] DEBUG OutMediator
>> Sequence
>> <OutMediator> :: mediate()
>> 2009-07-13 14:52:26,170 [-] [HttpClientWorker-15] DEBUG FilterMediator
>> Start
>> : Filter mediator
>> 2009-07-13 14:52:26,280 [-] [HttpClientWorker-15] DEBUG FilterMediator
>> XPath
>> expression :
>> boolean(//cfl:LoginResponse/cfl:LoginResponseData/@sessionID)
>> evaluates to false and no else path - skipping child mediators
>> 2009-07-13 14:52:26,350 [-] [HttpClientWorker-15] DEBUG FilterMediator
>> End
>> :
>> Filter mediator
>> 2009-07-13 14:52:26,451 [-] [HttpClientWorker-15] DEBUG FilterMediator
>> Start
>> : Filter mediator
>> 2009-07-13 14:52:26,481 [-] [HttpClientWorker-15] DEBUG FilterMediator
>> XPath
>> expression : boolean(//cfl:GetMarketMessagesResponseData) evaluates to
>> true
>> - executing child mediators
>> 2009-07-13 14:52:26,531 [-] [HttpClientWorker-15] DEBUG FilterMediator
>> Sequence <FilterMediator> :: mediate()
>> .
>> .
>> .
>> 2009-07-13 14:52:26,851 [-] [HttpClientWorker-15] DEBUG FilterMediator
>> End
>> :
>> Filter mediator
>> 2009-07-13 14:52:26,851 [-] [HttpClientWorker-15] DEBUG OutMediator End :
>> Out mediator
>> 2009-07-13 14:52:26,931 [-] [HttpClientWorker-15] DEBUG SequenceMediator
>> End
>> : Sequence <main>
>>
>> Appreciate any help...
>> Thanks,
>> Bill
>>
>>
>> Hiranya Jayathilaka-3 wrote:
>> >
>> > Hi Bill,
>> >
>> > On Thu, Jul 16, 2009 at 2:40 AM, PrgTrdr <[email protected]> wrote:
>> >
>> >>
>> >> I have cloned Sample 259 to implement a use case where a FIX client
>> >> communicates with a Web Service.  The system is working well as far as
>> 1)
>> >> establishing the FIX session from the client to Synapse, 2) Logon,
>> >> 3)Sending
>> >> a New Order message, 4)performing an XSLT to create a WS request,
>> >> 5)sending
>> >> the Request to the WS, 6)receiving back a Response from the WS,
>> >> 7)performing
>> >> an XSLT to convert the SOAP response to an XML-encapsulated FIX
>> message.
>> >> But then the response message never flows back to the FIX transport (I
>> >> can
>> >> tell by examining the QuickFIX/J logs).
>> >>
>> >> I am receiving (and converting) the WS Response message in a standard
>> >> "<out>" sequence.  At the end I placed
>> >>
>> >> <send>
>> >>    <endpoint key="FIXProxy"/>
>> >> </send>
>> >>
>> >> to see if that would make it work, but the message doesn't go out to
>> FIX,
>> >> nor does it show up in the FIXProxy <outSequence> (I put some log
>> >> mediators
>> >> in there to trace activity).
>> >>
>> >> Sample 259 is one-way only (FIX->SOAP).  Can someone give me an idea
>> >> about
>> >> what needs to be done to make this two-way?  Perhaps changes to the
>> >> FIXProxy
>> >> configuration?
>> >
>> >
>> > How about placing an empty <send/> element in the <outSequence> of your
>> > proxy service? I think that should do the trick. Anyway  please send in
>> > your
>> > full Synapse configuration for us to get a clear idea of the scenario.
>> >
>> > Thanks,
>> > Hiranya
>> >
>> >
>> >>
>> >> Thanks,
>> >> Bill
>> >> --
>> >> View this message in context:
>> >>
>> http://www.nabble.com/HTTP--%3E-FIX-Response-Handling-tp24505424p24505424.html
>> >> Sent from the Synapse - User mailing list archive at Nabble.com.
>> >>
>> >>
>> >
>> >
>> > --
>> > Hiranya Jayathilaka
>> > Software Engineer;
>> > WSO2 Inc.;  http://wso2.org
>> > E-mail: [email protected];  Mobile: +94 77 633 3491
>> > Blog: http://techfeast-hiranya.blogspot.com
>> >
>> >
>>
>> --
>> View this message in context:
>> http://www.nabble.com/HTTP--%3E-FIX-Response-Handling-tp24505424p24515672.html
>> Sent from the Synapse - User mailing list archive at Nabble.com.
>>
>>
> 
> 
> -- 
> Hiranya Jayathilaka
> Software Engineer;
> WSO2 Inc.;  http://wso2.org
> E-mail: [email protected];  Mobile: +94 77 633 3491
> Blog: http://techfeast-hiranya.blogspot.com
> 
> 

-- 
View this message in context: 
http://www.nabble.com/HTTP--%3E-FIX-Response-Handling-tp24505424p24517040.html
Sent from the Synapse - User mailing list archive at Nabble.com.

Reply via email to