2014-09-04 59 views
0

我有一個駱駝路線設置如下:駱駝,JAXB成的ActiveMQ創建XML自動

<camelContext xmlns="http://camel.apache.org/schema/spring"> 
    <route> 
     <from uri="file://C:/incoming?noop=true"/> 
     <log message="File Recieved"/> 
     <unmarshal> 
      <jaxb contextPath="org.ben.camel.spareparts.model" ignoreJAXBElement="true"/> 
     </unmarshal> 
     <log message="Store: ${body.getStore}"/> 
     <choice> 
      <when> 
       <simple>${body.getStore} == 2</simple> 
       <log message="New Item from Store 2"/> 
       <bean ref="processor" beanType="org.ben.camel.spareparts.model.StockReportProcessor"/> 
       <split> 
        <simple>${body}</simple> 
        <log message="item split!"/> 
        <marshal> 
         <jaxb contextPath="org.ben.camel.spareparts.model" ignoreJAXBElement="false"/> 
        </marshal> 
        <to uri="activemq:queue:store2"/> 
       </split> 
      </when> 
      <when> 
       <simple>${body.getStore} == 1</simple> 
       <log message="New Item from Store 1"/> 
       <bean ref="processor" beanType="org.ben.camel.spareparts.model.StockReportProcessor"/> 
      </when> 
     </choice> 
    </route> 
</camelContext> 

它需要一個XML對象,通過XML元素分裂它,並將該元素的隊列。我將編組解析爲一個POJO,僅提取元素列表,然後將其分解到拆分組件中。

我的問題是,我似乎無法成爲沒有XML的POJO到ActiveMQ。即使我在提交之前再次嘗試將它編入POJO,它仍以XML的形式到達MQ。我想知道,如果我有一個對象被放入ActiveMQ的JAXB註釋,它會自動轉換爲XML嗎?如果是這樣,我該如何阻止?

回答

1

第一個元帥只是將jaxb對象轉換爲xml輸入流。

<marshal> 
    <jaxb contextPath="org.ben.camel.spareparts.model" ignoreJAXBElement="false"/> 
    </marshal> 

二,駱駝可以通過查看正文實例來告訴消息類型。

protected JmsMessageType getJMSMessageTypeForBody(Exchange exchange, Object body, Map<String, Object> headers, Session session, CamelContext context) { 
    JmsMessageType type = null; 
    // let body determine the type 
    if (body instanceof Node || body instanceof String) { 
     type = Text; 
    } else if (body instanceof byte[] || body instanceof WrappedFile || body instanceof File || body instanceof Reader 
      || body instanceof InputStream || body instanceof ByteBuffer || body instanceof StreamCache) { 
     type = Bytes; 
    } else if (body instanceof Map) { 
     type = Map; 
    } else if (body instanceof Serializable) { 
     type = Object;    
    } else if (exchange.getContext().getTypeConverter().tryConvertTo(File.class, body) != null 
      || exchange.getContext().getTypeConverter().tryConvertTo(InputStream.class, body) != null) { 
     type = Bytes; 
    } 
    return type; 
} 

如果你想發送的對象信息的ActiveMQ的,你需要確保郵件正文是序列化的情況下,否則駝會把它變成一個輸入流與JAXB後備轉換器的幫助下,即使你將xml轉換爲Java對象。