我有一条简单的路线:
public class PartnerRoute extends SpringRouteBuilder
{
@Value("${comm.async.req.incoming.queue}")
private String reqInputQueue;
@Override
public void configure() throws Exception
{
onException(Exception.class)
.to("activemq:queue:wrongMessages");
from("cxf:bean:partnerService")
.log("PartnerData arrived")
.to("activemq:queue:" + reqInputQueue);
}
}
如您所见,起点是CXF Web服务。
在camel-context.xml中定义的WS
<cxf:cxfEndpoint id="partnerService"
address="http://${comm.host}:${comm.port}/cxf/PartnerService"
serviceClass="esb.ws.partner.service.PartnerService" />
我想处理CXF异常。 (有人用错误的数据称呼WS。)
当我用wron结构调用WS时,出现了此错误:
2015-02-26 16:16:44,901 | WARN | org.apache.cxf.phase.PhaseInterceptorChain | org.apache.cxf.cxf-api | (LogUtils.java:452) | Interceptor for {http://service.partner.ws.esb.ivir.tsm.hu/}PartnerServiceService#{http://service.partner.ws.esb.ivir.tsm.hu/}startMessageProcessing has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: Unmarshalling Error: unexpected element (uri:"", local:"messageFilterx"). Expected elements are <{}messageFilter>,<{}hash>,<{}priority>,<{}referenceNumber>,<{}responseRequired>,<{}requestDate>,<{}messageType>,<{}consumer>,<{}requestor>
at org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:881)[139:org.apache.cxf.cxf-rt-databinding-jaxb:2.7.11]
at org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:702)[139:org.apache.cxf.cxf-rt-databinding-jaxb:2.7.11]
at org.apache.cxf.jaxb.io.DataReaderImpl.read(DataReaderImpl.java:160)[139:org.apache.cxf.cxf-rt-databinding-jaxb:2.7.11]
at org.apache.cxf.interceptor.DocLiteralInInterceptor.handleMessage(DocLiteralInInterceptor.java:192)[135:org.apache.cxf.cxf-api:2.7.11]
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)[135:org.apache.cxf.cxf-api:2.7.11]
at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)[135:org.apache.cxf.cxf-api:2.7.11]
at org.apache.cxf.transport.http_jetty.JettyHTTPDestination.serviceRequest(JettyHTTPDestination.java:355)[157:org.apache.cxf.cxf-rt-transports-http-jetty:2.7.11]
at org.apache.cxf.transport.http_jetty.JettyHTTPDestination.doService(JettyHTTPDestination.java:319)[157:org.apache.cxf.cxf-rt-transports-http-jetty:2.7.11]
at org.apache.cxf.transport.http_jetty.JettyHTTPHandler.handle(JettyHTTPHandler.java:65)[157:org.apache.cxf.cxf-rt-transports-http-jetty:2.7.11]
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1088)[63:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1024)[63:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)[63:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255)[63:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)[63:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
at org.eclipse.jetty.server.Server.handle(Server.java:370)[63:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:494)[63:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:982)[63:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1043)[63:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:865)[63:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240)[63:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)[63:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:696)[63:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:53)[63:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)[63:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)[63:org.eclipse.jetty.aggregate.jetty-all-server:8.1.15.v20140411]
at java.lang.Thread.run(Thread.java:744)[:1.7.0_51]
Caused by: javax.xml.bind.UnmarshalException
- with linked exception:
[javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"messageFilterx"). Expected elements are <{}messageFilter>,<{}hash>,<{}priority>,<{}referenceNumber>,<{}responseRequired>,<{}requestDate>,<{}messageType>,<{}consumer>,<{}requestor>]
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamException(UnmarshallerImpl.java:425)[84:org.apache.servicemix.bundles.jaxb-impl:2.2.1.1_2]
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:362)[84:org.apache.servicemix.bundles.jaxb-impl:2.2.1.1_2]
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:339)[84:org.apache.servicemix.bundles.jaxb-impl:2.2.1.1_2]
at org.apache.cxf.jaxb.JAXBEncoderDecoder.doUnmarshal(JAXBEncoderDecoder.java:842)[139:org.apache.cxf.cxf-rt-databinding-jaxb:2.7.11]
at org.apache.cxf.jaxb.JAXBEncoderDecoder.access$100(JAXBEncoderDecoder.java:101)[139:org.apache.cxf.cxf-rt-databinding-jaxb:2.7.11]
at org.apache.cxf.jaxb.JAXBEncoderDecoder$2.run(JAXBEncoderDecoder.java:870)
at java.security.AccessController.doPrivileged(Native Method)[:1.7.0_51]
at org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:868)[139:org.apache.cxf.cxf-rt-databinding-jaxb:2.7.11]
... 25 more
Caused by: javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"messageFilterx"). Expected elements are <{}messageFilter>,<{}hash>,<{}priority>,<{}referenceNumber>,<{}responseRequired>,<{}requestDate>,<{}messageType>,<{}consumer>,<{}requestor>
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:642)[84:org.apache.servicemix.bundles.jaxb-impl:2.2.1.1_2]
at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:254)[84:org.apache.servicemix.bundles.jaxb-impl:2.2.1.1_2]
at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:249)[84:org.apache.servicemix.bundles.jaxb-impl:2.2.1.1_2]
at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:116)[84:org.apache.servicemix.bundles.jaxb-impl:2.2.1.1_2]
at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.childElement(Loader.java:101)[84:org.apache.servicemix.bundles.jaxb-impl:2.2.1.1_2]
at com.sun.xml.bind.v2.runtime.unmarshaller.StructureLoader.childElement(StructureLoader.java:243)[84:org.apache.servicemix.bundles.jaxb-impl:2.2.1.1_2]
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:478)[84:org.apache.servicemix.bundles.jaxb-impl:2.2.1.1_2]
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:459)[84:org.apache.servicemix.bundles.jaxb-impl:2.2.1.1_2]
at com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.handleStartElement(StAXStreamConnector.java:242)[84:org.apache.servicemix.bundles.jaxb-impl:2.2.1.1_2]
at com.sun.xml.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:176)[84:org.apache.servicemix.bundles.jaxb-impl:2.2.1.1_2]
at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:360)[84:org.apache.servicemix.bundles.jaxb-impl:2.2.1.1_2]
... 31 more
Caused by: javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"messageFilterx"). Expected elements are <{}messageFilter>,<{}hash>,<{}priority>,<{}referenceNumber>,<{}responseRequired>,<{}requestDate>,<{}messageType>,<{}consumer>,<{}requestor>
... 42 more
我设置了“ onException”,但没有任何反应。
您能帮忙,我该如何处理该异常?
谢谢!
费里
最佳答案
这是鸡和蛋的情况。骆驼使用onException或errorHandler的错误处理程序是在路由期间。但这需要使用者能够接受传入的消息并创建Camel Exchange
实例并开始路由消息。
在stracktrace中不是这种情况,因为Apache CXF无法这样做。某些Camel组件支持使用consumer.bridgeErrorHandler=true
选项将使用者错误桥接到Camel错误处理程序。不确定CXF是否是这种情况。