I have created a unit test to unmarshal a FIX message into a model
(copy the model into another one) and marshal the result into a CSV
The result received by the mock is null. If I try to read the object,
I have this :
>>> Class : [B
>>> CSV generated : [...@12b19c5
Remark : the FIX message is well transformed into a model of objects
and bindy does not generate any error during the generation of the
outputstream from the model object
public class VresEmxToCsvTest extends AbstractJUnit4SpringContextTests {
private static final transient Log LOG =
LogFactory.getLog(VresEmxToCsvTest.class);
@Produce(uri = "direct:start")
private ProducerTemplate template;
@EndpointInject(uri = "mock:result")
private MockEndpoint resultEndpoint;
@Test
@DirtiesContext
public void testEmxtoCsv() throws Exception {
String record =
"8=FIX.4.19=98035=U334=6149=SERVER50=EMXSV52=20091021-14:58:0956=X3S115=AHPRO116=AHPADMIN128=AHINT129=AHIADMIN9426=VRES15=GBP58=TEXT117=first
response131=VAL
Multiple9400=*9442=UT9464=20090910-14:00:009469=Q9477=119488=AHINT9490=AHPRO9494=AGENCY
NO9504=desig29450=39470=122=448=ISINLU8989429=20091013-09:54:459448=2432.454549493=fgfhgfhg9470=222=448=ISINLU8989429=20091013-09:54:459448=2432.454549493=fgfhgfhg9470=322=448=ISINLU8989429=20091013-09:54:459448=2432.454549493=fgfhgfhg9425=20091008-13:11:129452=20091008-13:11:169453=20091008-13:11:169480=1.0~SHA-1~RSA~CN=EMX
Certificate Authority,OU=Certificate Authority,O=EMX Company
Limited,C=GB~3ea639ba~3ee270f7e32929b5fb32eede09dd10c4f8e6809b83b7831165534be991e7845d6bfa7b6964f4336896d8f43e86e22d58b38362b6b6d096643d00351221df9b6d74ce9852689dc599c641182286de2b4ec8d47df6883d61a0664233daf34ec24026b985205ea2dbba5ca5856bb64ab911b8122c326bd1ccdd5d2b415b4d97ad949481=20091008-13:11:129491=400318210=190";
String result = "";
template.sendBody(record);
resultEndpoint.expectedMessageCount(1);
// resultEndpoint.expectedBodiesReceived(result);
resultEndpoint.assertIsSatisfied();
for (Exchange exch : resultEndpoint.getExchanges()) {
Object obj = exch.getIn().getBody();
System.out.println(">>> Class : " + obj.getClass().getName());
System.out.println(">>> CSV generated : " + obj.toString());
}
}
/* @Test
@DirtiesContext
public void testUnMarshallWithNullFields() throws Exception {
// TODO add null fields
String record =
"8=FIX.4.19=8935=U234=8449=SERVER52=20090630-10:29:2556=X3S9426=TBKD11=ORDER122=237=WWWWWW48=ISIN2432434354=158=TTT67=168=1121=Y152=33.43173=TTTTTTT174=TTTTTTTTTTT182=BIGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG183=HHHHHH184=YYYYYYYYY185=FFFFFFFFFFFFFF9400=TTTTTTTTTTT9401=19402=31.239403=19404=TTT9405=TTT9406=TTT9407=TTT9408=TTT9409=TTT9410=TTT9411=TTT9412=TTT9413=N9414=TTT9415=TTT9416=R9417=USD9418=DEM9419=8.659420=3349422=M9423=Y9424=HJHJKHJKHJ9428=20090303-12:25:559435=200803269436=jhkjkj9437=dddddddddd9438=eeeeeeeeee9439=12099440=AA9441=89442=PROTYP39443=19444=safdewfw9449=fsgsg9451=E9455=EUR9462=59468=?9471=433.4439474=E9475=Y9482=fwrfw9483=KKKKK9484=KLKLKL9485=JKIJKJKJ9488=ORIG19489=JJJJJ9490=PRV039492=kjlklk9494=AGENCY339495=23.189491=TBKD-5776517710=111";
template.sendBody(record);
resultEndpoint.expectedMessageCount(1);
resultEndpoint.assertIsSatisfied();
List<Exchange> exchanges = resultEndpoint.getExchanges();
for(Exchange exchange : exchanges) {
models = (List<Map<String, Object>>) exchange.getIn().getBody();
for (int i=0; i< models.size(); i++) {
model = models.get(i);
OutTbkdMessage tbkd =
(OutTbkdMessage)model.get("com.xpectis.x3s.model.backoffice.emx.tbkd.out.OutTbkdMessage");
Assert.assertEquals(tbkd.getOrdUntNb(), null);
LOG.debug("Model : " + tbkd.toString());
}
}
}*/
@Configuration
public static class ContextConfig extends SingleRouteCamelConfiguration {
BindyKeyValuePairDataFormat emxBindyDataFormat = new
BindyKeyValuePairDataFormat("com.xpectis.x3s.model.backoffice.emx.vres.out","com.xpectis.x3s.model.backoffice.emx.common");
BindyCsvDataFormat csvBindyDataFormat = new
BindyCsvDataFormat("com.xpectis.x3s.model.backoffice.emx.vres.in");
@Override
@Bean
public RouteBuilder route() {
return new RouteBuilder() {
@Override
public void configure() {
from("direct:start")
.unmarshal(emxBindyDataFormat)
.process(new Processor() {
public void process(Exchange exchange) throws
Exception {
InVresMessage
inVresMessage = new InVresMessage();
List<Map<String, Object>> models = new
ArrayList<Map<String, Object>>();
List<Map<String, Object>> modelsReceived;
Map<String, Object> model = new
HashMap<String, Object>();
modelsReceived =
(List<Map<String, Object>>) exchange.getIn().getBody();
OutVresMessage outVresMessage =
(OutVresMessage)
modelsReceived.get(0).get("com.xpectis.x3s.model.backoffice.emx.vres.out.OutVresMessage");
PropertyUtils.copyProperties(inVresMessage, outVresMessage);
model.put(inVresMessage.getClass().getName(), inVresMessage);
models.add( model );
exchange.getIn().setBody(models);
}
}
)
.marshal(csvBindyDataFormat)
.to("mock:result");
}
};
}
}
}
Regards,
Charles Moulliard
Senior Enterprise Architect
Apache Camel Committer
*****************************
blog : http://cmoulliard.blogspot.com
twitter : http://twitter.com/cmoulliard