note of camel in action--chapter 3~8

3~8章  csdn有翻译.

https://blog.csdn.net/daydaylearn/article/details/52994176

第三章:

   数据格式转换, 一般有processor,bean,transform三种方式, 前两种不必要介绍了.  transform()使用方式主要如下:

  1   from("direct:start") 
  .transform(body().regexReplaceAll("\n", "<br/>")) 
  .to("mock:result");

  2  from("direct:start") 
  .transform(new Expression() { 
    public <T> T evaluate(Exchange exchange, Class<T> type) { 
    String body = exchange.getIn().getBody(String.class); 
    body = body.replaceAll("\n", "<br/>"); 
    body = "<body>" + body + "</body>"; 
    return (T) body; 
    } 
  }) 
  .to("mock:result");

  3  xml 配置

<bean id="htmlBean" class="camelinaction.HtmlBean"/> 
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> 
<route> 
<from uri="direct:start"/> 
<transform> 
<method bean="htmlBean" method="toHtml"/> 
</transform> 
<to uri="mock:result"/> 
</route> 
</camelContext> 
public class HtmlBean {

    public static String toHtml(String body) {
        body = body.replaceAll("\n", "<br/>");
        body = "<body>" + body + "</body>";
        return body;
    }
    
}

  4  simple 脚本语言

 

 <camelContext trace="true" id="camel" xmlns="http://camel.apache.org/schema/spring">
        <route>
            <from uri="direct:start"/>
            <transform>
                <simple>Hello ${body} how are you?</simple>
            </transform>
            <to uri="mock:result"/>
        </route>
    </camelContext>

 5 数据格式转换 
  在Camel中,数据格式转换时可插拔的数据转换,可将消息从一种形式转换为另一种形式。Camel中,每一种数据格式转换都由接口org.apace.camel.spi.DataFormat  代表,此接口包含两个方法: 
  1、marshal方法:封存一个消息为另一种形式,比如封存java对象为XML, CSV, EDI, HL7等数据模型;即对象--->二进制 
  2、unmarshal方法:进行一种反向操作,将某种格式的数据转换为消息,即二进制--->对象

 

 

  marshal举例:

      

public class PurchaseOrderJSONTest extends CamelTestSupport {

    private static Logger LOG = LoggerFactory.getLogger(PurchaseOrderJSONTest.class);

    @Override
    protected JndiRegistry createRegistry() throws Exception {
        // register our service bean in the Camel registry
        JndiRegistry jndi = super.createRegistry();
        jndi.bind("orderService", new OrderServiceBean());
        return jndi;
    }

    @Test
    public void testJSON() throws Exception {
        String out = template.requestBody("http://localhost:8080/order/service?id=123", null, String.class);
        LOG.info("Response from order service:+++++++ " + out);

        assertNotNull(out);
        assertTrue(out.contains("Camel in Action"));
    }

    @Override
    protected RouteBuilder createRouteBuilder() throws Exception {
        return new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                from("jetty://http://0.0.0.0:8080/order/service")
                    .beanRef("orderService", "lookup")
                    .marshal().json(JsonLibrary.Jackson);
            }
        };
    }

    public static class OrderServiceBean {

        public PurchaseOrder lookup(@Header("id") String id) {
            LOG.info("Finding purchase order for id " + id);
            // just return a fixed response
            PurchaseOrder order = new PurchaseOrder();
            order.setPrice(49.95);
            order.setAmount(1);
            order.setName("Camel in Action");
            return order;
        }

    }

}
@CsvRecord(separator = ",", crlf = "UNIX")
public class PurchaseOrder {

    @DataField(pos = 1)
    private String name;

    @DataField(pos = 2, precision = 2)
    private BigDecimal price;

    @DataField(pos = 3)
    private int amount;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    public int getAmount() {
        return amount;
    }

    public void setAmount(int amount) {
        this.amount = amount;
    }
}

 

posted @ 2019-03-23 17:47  老骥伏枥,志在千里  阅读(178)  评论(0编辑  收藏  举报