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