The quickfix component was rewritten as part of Camel 2.5, what Camel
version are you using? Prior to the rewrite the quickfix component did
contain a simple converter to convert quickfix messages to inputstreams.

On Wed, Jun 15, 2011 at 10:43 PM, Richard Kettelerij <
[email protected]> wrote:

> Since your going from Quickfix to Bindy you have an Exchange which contains
> a Quickfix message (specifically quickfix.fix44.NewOrderSingle) as its body.
> The bindy component expects a Java inputstream. However, there's no
> converter available to translate Quickfix messages to inputstreams.
>
> You might be able to write such a converter. Otherwise take a look at the
> quickfix unit tests to see how these messages are handled.
>
>
> On Wed, Jun 15, 2011 at 9:29 PM, Pablo Venini <[email protected]>wrote:
>
>> Hi, I'm trying to build a translator that processes FIX messages and
>> translate the parameters into the query string of a HTTP request. I'am
>> using
>> bindy but I don't seem to get the hang of it.
>> I created a route and three model classes:
>>
>> package gateway;
>> public class MyRouteBuilder extends RouteBuilder {
>>   public void configure() {
>>        BindyKeyValuePairDataFormat camelDataFormat = new
>>  BindyKeyValuePairDataFormat("gateway.model");
>>                from("quickfix:config.cfg").
>>        choice().
>>
>>
>> when(header(QuickfixjEndpoint.MESSAGE_TYPE_KEY).isEqualTo(MsgType.ORDER_SINGLE)).
>>                        unmarshal(camelDataFormat).
>>                        to("http4://www.server.com").
>>                otherwise().
>>                    to("log:localhost");
>>   }
>> }
>>
>>
>> package gateway.model;
>> @Message(keyValuePairSeparator = "=", pairSeparator = "\\u0001", type =
>> "FIX", version = "4.4")
>> public class Order{
>>   @Link
>>   Header header;
>>
>>   @Link
>>   Trailer trailer;
>>
>>   @KeyValuePairField(tag = 1)
>>   // Client reference
>>   private String account;
>>
>>   @KeyValuePairField(tag = 11)
>>   // Order reference
>>   private String clOrdId;
>>
>>   @KeyValuePairField(tag = 22)
>>   // Fund ID type (Sedol, ISIN, ...)
>>   private String iDSource;
>>
>>   @KeyValuePairField(tag = 48)
>>   // Fund code
>>   private String securityId;
>>
>>   @KeyValuePairField(tag = 54)
>>   // Movement type ( 1 = Buy, 2 = sell)
>>   private String side;
>>
>>   @KeyValuePairField(tag = 58)
>>   // Free text
>>   private String text;
>>
>>   public Header getHeader() {
>>       return header;
>>   }
>>
>>   public void setHeader(Header header) {
>>       this.header = header;
>>   }
>>
>>   public Trailer getTrailer() {
>>       return trailer;
>>   }
>>
>>   public void setTrailer(Trailer trailer) {
>>       this.trailer = trailer;
>>   }
>>
>>   public String getAccount() {
>>       return account;
>>   }
>>
>>   public void setAccount(String account) {
>>       this.account = account;
>>   }
>>
>>   public String getClOrdId() {
>>       return clOrdId;
>>   }
>>
>>   public void setClOrdId(String clOrdId) {
>>       this.clOrdId = clOrdId;
>>   }
>>
>>   public String getIDSource() {
>>       return iDSource;
>>   }
>>
>>   public void setIDSource(String source) {
>>       this.iDSource = source;
>>   }
>>
>>   public String getSecurityId() {
>>       return securityId;
>>   }
>>
>>   public void setSecurityId(String securityId) {
>>       this.securityId = securityId;
>>   }
>>
>>   public String getSide() {
>>       return side;
>>   }
>>
>>   public void setSide(String side) {
>>       this.side = side;
>>   }
>>
>>   public String getText() {
>>       return this.text;
>>   }
>>
>>   public void setText(String text) {
>>       this.text = text;
>>   }
>>
>>   @Override
>>   public String toString() {
>>       return Order.class.getName() + " --> 1: " + this.account + ", 11: "
>> + this.clOrdId + ", 22: " + this.iDSource + ", 48: " + this.securityId +
>> ",
>> 54: " + this.side
>>              + ", 58: " + this.text;
>>   }
>> }
>>
>>
>> package gateway.model;
>> @Link
>> public class Header{
>>   @KeyValuePairField(tag = 8)
>>   // Message Header
>>   private String beginString;
>>
>>   @KeyValuePairField(tag = 9)
>>   // Checksum
>>   private int bodyLength;
>>
>>   @KeyValuePairField(tag = 34)
>>   // Sequence number
>>   private int msgSeqNum;
>>
>>   @KeyValuePairField(tag = 35)
>>   // Message Type
>>   private String msgType;
>>
>>   @KeyValuePairField(tag = 49)
>>   // Company sender Id
>>   private String sendCompId;
>>
>>   @KeyValuePairField(tag = 56)
>>   // target company id
>>   private String targetCompId;
>>
>>   public String getBeginString() {
>>       return beginString;
>>   }
>>
>>   public void setBeginString(String beginString) {
>>       this.beginString = beginString;
>>   }
>>
>>   public int getBodyLength() {
>>       return bodyLength;
>>   }
>>
>>   public void setBodyLength(int bodyLength) {
>>       this.bodyLength = bodyLength;
>>   }
>>
>>   public int getMsgSeqNum() {
>>       return msgSeqNum;
>>   }
>>
>>   public void setMsgSeqNum(int msgSeqNum) {
>>       this.msgSeqNum = msgSeqNum;
>>   }
>>
>>   public String getMsgType() {
>>       return msgType;
>>   }
>>
>>   public void setMsgType(String msgType) {
>>       this.msgType = msgType;
>>   }
>>
>>   public String getSendCompId() {
>>       return sendCompId;
>>   }
>>
>>   public void setSendCompId(String sendCompId) {
>>       this.sendCompId = sendCompId;
>>   }
>>
>>   public String getTargetCompId() {
>>       return targetCompId;
>>   }
>>
>>   public void setTargetCompId(String targetCompId) {
>>       this.targetCompId = targetCompId;
>>   }
>>
>>   @Override
>>   public String toString() {
>>       return Header.class.getName() + " --> 8: " + this.beginString + ",
>> 9: " + this.bodyLength + ", 34: " + this.msgSeqNum + " , 35: " +
>> this.msgType + ", 49: "
>>              + this.sendCompId + ", 56: " + this.targetCompId;
>>   }
>> }
>>
>>
>>
>>
>> package gateway.model;
>> @Link
>> public class Trailer{
>>   @KeyValuePairField(tag = 10)
>>   // CheckSum
>>   private int checkSum;
>>
>>   public int getCheckSum() {
>>       return checkSum;
>>   }
>>
>>   public void setCheckSum(int checkSum) {
>>       this.checkSum = checkSum;
>>   }
>>
>>   @Override
>>   public String toString() {
>>       return Trailer.class.getName() + " --> 10: " + this.checkSum;
>>   }
>> }
>>
>>
>>
>> Whenever I run the example and I receive a new order, I get an exception
>>
>> [         QFJ Message Processor] DefaultErrorHandler            ERROR
>> Failed
>> delivery for exchangeId: ID-Sinac-3-4710-1308159740143-0-6. Exhausted
>> after
>> delivery attempt: 1 caught: org.apache.camel.InvalidPayloadException: No
>> body available of type: java.io.InputStream but has value: 8=FIX.4.4.....
>> of
>> type: quickfix.fix44.NewOrderSingle on: Message: 8=FIX.4.4.... Caused by:
>> No
>> type converter available to convert from type:
>> quickfix.fix44.NewOrderSingle
>> to the required type: java.io.InputStream with value 8=FIX.4.4....
>> Exchange[Message: 8=FIX.4.4...]. Caused by:
>> [org.apache.camel.NoTypeConversionAvailableException - No type converter
>> available to convert from type: quickfix.fix44.NewOrderSingle to the
>> required type: java.io.InputStream with value
>>
>> I don't quite get what I must do to perform the translation.
>>
>> Any pointers would be appreciated
>>
>> Pablo
>>
>>
>>
>

Reply via email to