问题可能由于Apache CXF版本不兼容Camel版本而导致。解决方法是更新CXF版本,或者使用兼容的Camel版本。以下是一个使用Apache CXF和Camel的代码示例,可以避免这个问题:
public class MyRouteBuilder extends RouteBuilder {
@Override
public void configure() throws Exception {
// MyProcessor is a custom Processor that handles SOAP faults
MyProcessor myProcessor = new MyProcessor();
// set the binding style to document/literal wrapped
JaxbDataFormat jaxb = new JaxbDataFormat("com.example.mypackage");
// create the CXF endpoint
CxfEndpoint endpoint = new CxfEndpoint();
endpoint.setAddress("http://localhost:9000/MyService");
endpoint.setServiceClass(MyService.class);
endpoint.setDataFormat(jaxb);
endpoint.setCamelContext(getContext());
// create the CXF producer
CxfProducer producer = (CxfProducer)endpoint.createProducer();
producer.setProcessor(myProcessor);
// create the Camel route
from("direct:start")
.to(endpoint)
.to("log:output");
}
}
此代码将设置CXF数据绑定格式为'document/literal wrapped”,并为CxfEndpoint创建一个自定义处理器(MyProcessor),以处理SOAP故障。然后,创建CxfProducer并将其与Camel路由器绑定。这将确保在处理SOAP故障时不会达到100%的CPU占用率。