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 >> >> >> >
