Web services 使用拦截器进行Apache CXF端点验证 我想做的是:
在CXF端点中通过架构验证实现从a到a 已在CXF终结点中启用验证: CXF拦截器: 问题: 如果我发送了一条有效的SOAP消息,那么它就可以正常工作。如果我发送了一个无效的SOAP消息,handleFault方法就会生效,记录错误,仅此而已。 对于无效SOAP消息场景,我是否可以使用handleFault方法记录故障,并且仍然将无效消息路由到JMS队列? 这是我添加到端点的唯一拦截器 我正在使用: Apache ServiceMix 5.0.0 ApacheCamel 2.12.3 Apache CXF 2.7.10Web services 使用拦截器进行Apache CXF端点验证 我想做的是:,web-services,cxf,apache-camel,interceptor,Web Services,Cxf,Apache Camel,Interceptor,在CXF端点中通过架构验证实现从a到a 已在CXF终结点中启用验证: CXF拦截器: 问题: 如果我发送了一条有效的SOAP消息,那么它就可以正常工作。如果我发送了一个无效的SOAP消息,handleFault方法就会生效,记录错误,仅此而已。 对于无效SOAP消息场景,我是否可以使用handleFault方法记录故障,并且仍然将无效消息路由到JMS队列? 这是我添加到端点的唯一拦截器 我正在使用: Apache ServiceMix 5.0.0 ApacheCamel 2.12.3 Apach
无法执行try/catch语句,因为错误发生在from子句中 但是,您可以使用
我已经添加了errorHandler,但没有任何更改,我仍然在Karaf中得到由以下原因引起的错误:org.xml.sax.saxpasseeption:cvc datatype valid.1.2.1:“go”不是“integer”的有效值。并且没有消息路由到无效队列。
/* Set endpoint properties */
Map<String, Object> propertiesMap = new HashMap<String, Object>();
propertiesMap.put("schema-validation-enabled", "true");
/* Create endpoint */
CxfEndpoint cxfEndpoint = new CxfEndpoint();
cxfEndpoint.setWsdlURL("wsdl/input.wsdl");
cxfEndpoint.setDataFormat(DataFormat.CXF_MESSAGE);
cxfEndpoint.setProperties(propertiesMap);
cxfEndpoint.getInInterceptors().add(new FaultInterceptor());
from(cxfEndpoint)
.routeId("INPUT_ROUTE")
.to("jms:foo.bar");
public class FaultInterceptor extends AbstractSoapInterceptor {
private static final Logger LOGGER = Logger.getLogger(FaultInterceptor.class);
public FaultInterceptor() {
super(Phase.UNMARSHAL);
}
public void handleMessage(SoapMessage message) throws Fault {
LOGGER.info("handleMessage=" + message.getExchange().getInMessage());
}
@Override
public void handleFault(SoapMessage message) {
Fault fault = (Fault) message.getContent(Exception.class);
LOGGER.info("handleFault='" + fault + "'");
/* Add some header property that says the message is invalid */
}
}
errorHandler(deadLetterChannel("jms:foo.bar.invalid"));
from(cxfEndpoint)
.routeId("INPUT_ROUTE")
.to("jms:foo.bar");