Richard:
thanks for your reply, I'm using Camel 2.7.2. Is the converter in 2.5.0 usable in a 2.7.0 environment or should I downgrade/modify it?. Another question: is bindy the way to go in this case (I thought so because of the annotations geared toward FIX use) or should I chose a different alternative?

Pablo


Richard Kettelerij escribió:
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






__________ Information from ESET NOD32 Antivirus, version of virus signature 
database 6211 (20110615) __________

The message was checked by ESET NOD32 Antivirus.

http://www.eset.com



--
/*Ing. Pablo Venini*/

/*Area Sistemas*/

/*Mercado de Valores de Rosario S.A.*/

/*(2000) Rosario - Santa Fe - Argentina*/

*TE: 0341 - 421-0125/424-7879 Int. 143*

Reply via email to