我們有一個提供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字符串?
有些想法?
謝謝,好點。無論如何,我實際上並沒有嘗試重新交付,我不確定這是否與此有關。試圖用streamCaching添加一次,但沒有任何區別:( – Touko 2013-02-19 11:18:53