2013-02-18 36 views
0

我們有一個提供SOAP服務的Apache Camel應用程序。 「初始路由」從Apache CFX提供的端點開始。我們需要一個簡單的機制來防止「太快」處理消息(並且沒有大規模的可伸縮性需求)。Apache Camel使用SOAP端點進行限制 - > TransformerException

因此,我們結束了嘗試Throttler。現在問題是,在我們的路線上加入油門後,出現了問題。

最初的路線,有點清洗:

from("cxf:bean:sapEndpoint").routeId(SOAP_ENDPOINT) 
    .throttle(1) 
    .onException(Exception.class) 
     .to("direct:emailFaultNotification").handled(false) 
    .end() 
    .transacted(joinJpaTx) 
    .to(xsltRemoveEmptyElements) // Cleaning done with XSLT endpoint 
    .to("direct:inboundWorkOrderXml"); // Forward to actual processing 

// direct:inboundWorkOrderXml contains various validation, persistance & response 

錯誤在我們的日誌:

2013-02-18 16:50:16,257 [tp1636587648-50] ERROR DefaultErrorHandler   - Failed delivery for exchangeId: ID-...-4. Exhausted after delivery attempt: 1 caught: javax.xml.transform.TransformerException: javax.xml.transform.TransformerException: com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: Content is not allowed in prolog. 
javax.xml.transform.TransformerException: javax.xml.transform.TransformerException: com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: Content is not allowed in prolog. 
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:735)[:1.6.0_37] 
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:336)[:1.6.0_37] 
    at org.apache.camel.builder.xml.XsltBuilder.process(XsltBuilder.java:98)[camel-core-2.7.0.jar:2.7.0] 
    at org.apache.camel.impl.ProcessorEndpoint.onExchange(ProcessorEndpoint.java:102)[camel-core-2.7.0.jar:2.7.0] 
    at org.apache.camel.impl.ProcessorEndpoint$1.process(ProcessorEndpoint.java:72)[camel-core-2.7.0.jar:2.7.0] 
    ... 

我想這節流器不起作用直我猜的方式。

似乎啓用了限制,XSLT端點收到空的或無效的XML?沒有油門定義一切正常。短暫的嘗試,郵件正文仍然包含XML字符串?

有些想法?

回答

1

在使用駱駝錯誤處理進行重新傳送時,請注意流式傳輸的有效負載。看到在流緩存:http://camel.apache.org/stream-caching.html

還有在駱駝CXF文檔頁面的頂部提示:http://camel.apache.org/cxf這個

+0

謝謝,好點。無論如何,我實際上並沒有嘗試重新交付,我不確定這是否與此有關。試圖用streamCaching添加一次,但沒有任何區別:( – Touko 2013-02-19 11:18:53

0

最後的解決辦法是比我想象的更簡單。我沒有在從「cxf:bean:s​​apEndpoint」開始的路由中使用節流閥,而是將節流添加到路由處理「direct:inboundWorkOrderXml」中。

不知道確切原因,可能與油門功能的某些部分可能因路線的起點終點而異。 (所以與直接端點沒有遇到cxf端點問題)

相關問題