使用SOAP端点进行Apache骆驼节流->;变换异常

使用SOAP端点进行Apache骆驼节流->;变换异常,soap,cxf,apache-camel,throttling,Soap,Cxf,Apache Camel,Throttling,我们有一个apachecamel应用程序提供SOAP服务。“初始路由”从Apache CFX提供的端点开始 我们需要一个简单的机制来防止消息被处理得“太快”(并且不需要大规模的可伸缩性) 因此,我们最终尝试了。现在的问题是,在我们的路线上增加油门后,出现了一些问题 最初的路线有点干净: from("cxf:bean:sapEndpoint").routeId(SOAP_ENDPOINT) .throttle(1) .onException(Exception.class)

我们有一个apachecamel应用程序提供SOAP服务。“初始路由”从Apache CFX提供的端点开始

我们需要一个简单的机制来防止消息被处理得“太快”(并且不需要大规模的可伸缩性)

因此,我们最终尝试了。现在的问题是,在我们的路线上增加油门后,出现了一些问题

最初的路线有点干净:

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字符串


一些想法?

当使用驼峰错误处理进行重新交付时,请注意流式有效负载。有关流缓存,请参见:


Camel CXF文档页面顶部还有一个提示:关于这个

最后,解决方案比我想象的要简单。我没有在从“cxf:bean:sapEndpoint”开始的路由中使用节流,而是在路由处理“direct:inboundWorkOrderXml”中添加节流


不知道确切的原因,可能与节流功能的某些部分可能在路由的from端点上发生变化有关。(所以cxf端点的问题与direct端点没有遇到)

谢谢,这是一个很好的观点。不管怎么说,我并不是真的想重新交付,我也不确定这是否与此有关。尝试了一次添加了streamCaching,但没有任何区别:(