繁体   English   中英

骆驼 cxf 有效载荷模式拦截器抛出 org.apache.camel.component.cxf.CxfPayload 无法转换为 javax.xml.transform

[英]camel cxf payload mode interceptor throws org.apache.camel.component.cxf.CxfPayload cannot be cast to javax.xml.transform

我正在使用同事编写的 CXF 拦截器将第三方 web 服务所需的soap 标头添加到由xsl 文件创建的apache 骆驼消息的soap 信封中。 拦截器为我的同事正常工作,在他的路线上,但在我的路线上却失败了。 我直接从他的路线复制了我的端点,所以我认为这不是问题。 我问过我的同事,他从来没有见过这样的事情。

我的路线是:

<to uri="bean:applicationName?method=setBodyToBlankXML" />
<to uri="xslt:xsl/applicationName-thirdPartyWebserviceOperationName.xsl" />
<setHeader headerName="operationName">
<constant>OperationName</constant>
</setHeader>
<setHeader headerName="operationNamespace">
<constant>thirdPartyNamespace</constant>
</setHeader>
<to uri="cxf:bean:thirdPartyWebserviceBean" />

他的路线是:

<to uri="bean:applicationName?method=setBodyToBlankXML" />
                        <to uri="xslt:xsl/applicationName-thirdPartyWebserviceOperationName.xsl" />
                        <log message="Display Request ${body}" loggingLevel="INFO" />
                        <to uri="cxf:bean:thirdPartyWebserviceBean" />

完整的堆栈跟踪是:

java.lang.ClassCastException: org.apache.camel.component.cxf.CxfPayload cannot be cast to javax.xml.transform.Source
    at org.apache.cxf.databinding.source.XMLStreamDataWriter.write(XMLStreamDataWriter.java:79) ~[cxf-core-3.0.2.jar:3.0.2]
    at org.apache.cxf.databinding.source.XMLStreamDataWriter.write(XMLStreamDataWriter.java:54) ~[cxf-core-3.0.2.jar:3.0.2]
    at org.apache.camel.component.cxf.HybridSourceDataBinding$1.write(HybridSourceDataBinding.java:100) ~[camel-cxf-2.14.1.jar:2.14.1]
    at org.apache.camel.component.cxf.HybridSourceDataBinding$1.write(HybridSourceDataBinding.java:81) ~[camel-cxf-2.14.1.jar:2.14.1]
    at org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.handleHeaderPart(SoapOutInterceptor.java:256) ~[cxf-rt-bindings-soap-3.0.2.jar:3.0.2]
    at org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.writeSoapEnvelopeStart(SoapOutInterceptor.java:177) ~[cxf-rt-bindings-soap-3.0.2.jar:3.0.2]
    at org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.handleMessage(SoapOutInterceptor.java:87) ~[cxf-rt-bindings-soap-3.0.2.jar:3.0.2]
    at org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor.handleMessage(SoapOutInterceptor.java:67) ~[cxf-rt-bindings-soap-3.0.2.jar:3.0.2]
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307) ~[cxf-core-3.0.2.jar:3.0.2]
    at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:514) [cxf-core-3.0.2.jar:3.0.2]
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:416) [cxf-core-3.0.2.jar:3.0.2]
    at org.apache.camel.component.cxf.CxfProducer.process(CxfProducer.java:112) [camel-cxf-2.14.1.jar:2.14.1]
    at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:120) [camel-core-2.14.1.jar:2.14.1]
    at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72) [camel-core-2.14.1.jar:2.14.1]
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:416) [camel-core-2.14.1.jar:2.14.1]
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191) [camel-core-2.14.1.jar:2.14.1]
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:118) [camel-core-2.14.1.jar:2.14.1]
    at org.apache.camel.processor.Pipeline.access$100(Pipeline.java:43) [camel-core-2.14.1.jar:2.14.1]
    at org.apache.camel.processor.Pipeline$1.done(Pipeline.java:136) [camel-core-2.14.1.jar:2.14.1]
    at org.apache.camel.processor.CamelInternalProcessor$InternalCallback.done(CamelInternalProcessor.java:251) [camel-core-2.14.1.jar:2.14.1]
    at org.apache.camel.impl.MDCUnitOfWork$MDCCallback.done(MDCUnitOfWork.java:231) [camel-core-2.14.1.jar:2.14.1]
    at org.apache.camel.processor.RedeliveryErrorHandler$1.done(RedeliveryErrorHandler.java:428) [camel-core-2.14.1.jar:2.14.1]
    at org.apache.camel.management.InstrumentationProcessor$1.done(InstrumentationProcessor.java:81) [camel-core-2.14.1.jar:2.14.1]
    at org.apache.camel.processor.SendProcessor$1.done(SendProcessor.java:131) [camel-core-2.14.1.jar:2.14.1]
    at org.apache.camel.component.cxf.CxfClientCallback.handleResponse(CxfClientCallback.java:61) [camel-cxf-2.14.1.jar:2.14.1]
    at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:819) [cxf-core-3.0.2.jar:3.0.2]
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1638) [cxf-rt-transports-http-3.0.2.jar:3.0.2]
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream$1.run(HTTPConduit.java:1145) [cxf-rt-transports-http-3.0.2.jar:3.0.2]
    at org.apache.cxf.workqueue.AutomaticWorkQueueImpl$3.run(AutomaticWorkQueueImpl.java:428) [cxf-core-3.0.2.jar:3.0.2]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_25]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_25]
    at org.apache.cxf.workqueue.AutomaticWorkQueueImpl$AWQThreadFactory$1.run(AutomaticWorkQueueImpl.java:353) [cxf-core-3.0.2.jar:3.0.2]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_25]

Anylizing 堆栈跟踪,看起来实际异常是在 CXF 本身中抛出的。 似乎在发生异常的时候,CXF 正在执行其发送请求所需的任何内部处理。

互联网上似乎没有太多关于这个问题的信息,我得到的唯一命中是邮件列表档案中的一条未答复的旧消息。 我做错了什么,这可能是 CXF 中的一个不起眼的错误,还是我完全遗漏了其他一些东西。

我的团队遇到了类似的问题,我也看到了那个邮件列表

我们的解决方案是对生产者和消费者使用相同的数据格式。

最初我们在 from("cxf:bean:") 使用 dataFormat.PAYLOAD,在 to("cxf:bean:") 使用 dataFormat.RAW。 在两个端点使用 dataFormat.PAYLOAD 解决了这个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM