簡體   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