Search in sources :

Example 6 with DataTypeAware

use of org.apache.camel.spi.DataTypeAware in project camel by apache.

the class CamelClient method main.

public static void main(final String[] args) throws Exception {
    File csvLogFile = new File(CSV_PATH);
    if (csvLogFile.exists()) {
        LOG.info("---> Removing log file '{}'...", csvLogFile.getAbsolutePath());
        csvLogFile.delete();
    }
    // START SNIPPET: e1
    LOG.info("---> Starting 'order' camel route...");
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("META-INF/spring/camel-context.xml");
    context.start();
    CamelContext camelContext = context.getBean("order", CamelContext.class);
    ProducerTemplate producer = camelContext.createProducerTemplate();
    // END SNIPPET: e1
    Thread.sleep(1000);
    Order order = new Order().setOrderId("Order-Java-0001").setItemId("MILK").setQuantity(3);
    LOG.info("---> Sending '{}' to 'direct:java'", order);
    OrderResponse response = producer.requestBody("direct:java", order, OrderResponse.class);
    Thread.sleep(1000);
    LOG.info("---> Received '{}'", response);
    LOG.info("---> CSV log now contains:{}", getCsvLog());
    Thread.sleep(1000);
    String orderXml = "<order orderId=\"Order-XML-0001\" itemId=\"MIKAN\" quantity=\"365\"/>";
    LOG.info("---> Sending '{}' to 'direct:xml'", orderXml);
    Exchange answerXml = producer.send("direct:xml", ex -> {
        ((DataTypeAware) ex.getIn()).setBody(orderXml, new DataType("xml:XMLOrder"));
    });
    Thread.sleep(1000);
    LOG.info("---> Received '{}'", answerXml.getOut().getBody(String.class));
    LOG.info("---> CSV log now contains:{}", getCsvLog());
    Thread.sleep(1000);
    String orderJson = "{\"orderId\":\"Order-JSON-0001\", \"itemId\":\"MIZUYO-KAN\", \"quantity\":\"16350\"}";
    LOG.info("---> Sending '{}' to 'direct:json'", orderJson);
    Exchange answerJson = producer.send("direct:json", ex -> {
        ((DataTypeAware) ex.getIn()).setBody(orderJson, new DataType("json"));
    });
    Thread.sleep(1000);
    LOG.info("---> Received '{}'", answerJson.getOut().getBody(String.class));
    LOG.info("---> CSV log now contains:{}", getCsvLog());
    Thread.sleep(1000);
    context.stop();
}
Also used : CamelContext(org.apache.camel.CamelContext) Order(org.apache.camel.example.transformer.demo.Order) Exchange(org.apache.camel.Exchange) ProducerTemplate(org.apache.camel.ProducerTemplate) ClassPathXmlApplicationContext(org.springframework.context.support.ClassPathXmlApplicationContext) DataTypeAware(org.apache.camel.spi.DataTypeAware) DataType(org.apache.camel.spi.DataType) OrderResponse(org.apache.camel.example.transformer.demo.OrderResponse) File(java.io.File)

Example 7 with DataTypeAware

use of org.apache.camel.spi.DataTypeAware in project camel by apache.

the class OrderRouteSpringTest method testJSON.

@Test
public void testJSON() throws Exception {
    mockCsv.whenAnyExchangeReceived(new Processor() {

        public void process(Exchange exchange) {
            Object mockBody = exchange.getIn().getBody();
            assertEquals(Order.class, mockBody.getClass());
            Order mockOrder = (Order) mockBody;
            assertEquals("Order-JSON-0001", mockOrder.getOrderId());
            assertEquals("MIZUYO-KAN", mockOrder.getItemId());
            assertEquals(16350, mockOrder.getQuantity());
        }
    });
    mockCsv.setExpectedMessageCount(1);
    String order = "{\"orderId\":\"Order-JSON-0001\", \"itemId\":\"MIZUYO-KAN\", \"quantity\":\"16350\"}";
    OrderResponse expected = new OrderResponse().setAccepted(true).setOrderId("Order-JSON-0001").setDescription("Order accepted:[item='MIZUYO-KAN' quantity='16350']");
    ObjectMapper jsonMapper = new ObjectMapper();
    String expectedJson = jsonMapper.writeValueAsString(expected);
    Exchange answer = jsonProducer.send("direct:json", ex -> {
        ((DataTypeAware) ex.getIn()).setBody(order, new DataType("json"));
    });
    assertEquals(expectedJson, answer.getOut().getBody(String.class));
    mockCsv.assertIsSatisfied();
}
Also used : Exchange(org.apache.camel.Exchange) Order(org.apache.camel.example.transformer.demo.Order) Processor(org.apache.camel.Processor) DataTypeAware(org.apache.camel.spi.DataTypeAware) DataType(org.apache.camel.spi.DataType) OrderResponse(org.apache.camel.example.transformer.demo.OrderResponse) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) Test(org.junit.Test)

Example 8 with DataTypeAware

use of org.apache.camel.spi.DataTypeAware in project camel by apache.

the class ContractAdvice method before.

@Override
public Object before(Exchange exchange) throws Exception {
    if (!(exchange.getIn() instanceof DataTypeAware)) {
        return null;
    }
    DataTypeAware target = (DataTypeAware) exchange.getIn();
    DataType from = target.getDataType();
    DataType to = contract.getInputType();
    if (to != null) {
        if (!to.equals(from)) {
            LOG.debug("Looking for transformer for INPUT: from='{}', to='{}'", from, to);
            doTransform(exchange.getIn(), from, to);
            target.setDataType(to);
        }
        if (contract.isValidateInput()) {
            doValidate(exchange.getIn(), to);
        }
    }
    return null;
}
Also used : DataTypeAware(org.apache.camel.spi.DataTypeAware) DataType(org.apache.camel.spi.DataType)

Aggregations

DataType (org.apache.camel.spi.DataType)8 DataTypeAware (org.apache.camel.spi.DataTypeAware)8 Exchange (org.apache.camel.Exchange)5 Processor (org.apache.camel.Processor)3 Order (org.apache.camel.example.transformer.demo.Order)3 Test (org.junit.Test)3 MockEndpoint (org.apache.camel.component.mock.MockEndpoint)2 OrderResponse (org.apache.camel.example.transformer.demo.OrderResponse)2 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)1 BufferedReader (java.io.BufferedReader)1 File (java.io.File)1 InputStream (java.io.InputStream)1 InputStreamReader (java.io.InputStreamReader)1 OutputStream (java.io.OutputStream)1 OutputStreamWriter (java.io.OutputStreamWriter)1 PrintWriter (java.io.PrintWriter)1 HashMap (java.util.HashMap)1 Map (java.util.Map)1 CamelContext (org.apache.camel.CamelContext)1 ContextTestSupport (org.apache.camel.ContextTestSupport)1