我已经定义了像这样的驼峰上下文
<camelContext xmlns="http://camel.apache.org/schema/spring"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:hel="http://cxf.apache.org/wsse/handler/helloworld"
trace="true" id="camel-poc">
<route id="wsProxyRedirection">
<from uri="cxf:bean:cdcPocProxyWebServiceStartPoint" />
<choice>
<when>
<simple>${body} contains 'normal'</simple>
<to uri="jms:queue:NORMAL_QUEUE" />
</when>
<when>
<simple>${body} contains 'urgent'</simple>
<to uri="jms:queue:URGENT_QUEUE" />
</when>
<when>
<simple>${body} contains 'very_urgent'</simple>
<to uri="jms:queue:VERY_URGENT_QUEUE" />
</when>
<otherwise>
</otherwise>
</choice>
</route>
</camelContext>
<cxf:cxfEndpoint id="cdcPocProxyWebServiceStartPoint"
address="http://localhost:7779/Start" serviceClass="poc.camel.routing.ws.CdcPocProxyWebService"
xmlns:a="http://javainuse.com">
</cxf:cxfEndpoint>
CxfEndpoint的服务类是
package poc.camel.routing.ws;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService(name = "HelloWorld", targetNamespace = "http://cxf.apache.org/wsse/handler/helloworld")
public interface CdcPocProxyWebService {
@WebMethod
String message(@WebParam(name = "type") String type, @WebParam(name = "document_number") Integer documentNumber,
@WebParam(name = "production_step_number") Integer productionStepNumber,
@WebParam(name = "message") String message);
}
它有效。但我想在SpringBoot项目中使用Camel Java DSL编写它,这是我已经做过的事情:
@Component
public class TypeQueuesRouteBuilder extends RouteBuilder {
private static final String SERVICE_ADDRESS = "http://localhost:7779/Start";
@Autowired
private CamelContext camelContext;
@Override
public void configure() throws Exception {
final CxfEndpoint cxfEndpoint = new CxfEndpoint();
cxfEndpoint.setBeanId("cdcPocProxyWebServiceStartPoint");
cxfEndpoint.setAddress(SERVICE_ADDRESS);
cxfEndpoint.setServiceClass("poc.camel.routing.ws.CdcPocProxyWebService");
cxfEndpoint.setCamelContext(camelContext);
from(cxfEndpoint)
.choice()
.when(body().contains("normal"))
.to("jms:queue:NORMAL_QUEUE")
.when(body().contains("urgent"))
.to("jms:queue:URGENT_QUEUE")
.when(body().contains("very_urgent"))
.to("jms:queue:VERY_URGENT_QUEUE");
}
}
当我使用此配置进行构建时,我有java.lang.IllegalStateException: Failed to load ApplicationContext
,我非常确定它来自错误的cxf配置...我做错了什么/丢失了?
编辑(stacktrace):
java.lang.IllegalStateException: Failed to load ApplicationContext
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:189)
at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:131)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:247)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191)
at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:283)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:173)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:128)
at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:203)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:155)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)
Caused by: org.apache.camel.RuntimeCamelException: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1831)
at org.apache.camel.spring.SpringCamelContext.start(SpringCamelContext.java:136)
at org.apache.camel.spring.SpringCamelContext.onApplicationEvent(SpringCamelContext.java:174)
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:393)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:347)
at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:883)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:303)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:120)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
... 26 common frames omitted
Caused by: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at org.apache.cxf.transport.http_jetty.JettyHTTPServerEngine.createConnectorJetty9(JettyHTTPServerEngine.java:691)
at org.apache.cxf.transport.http_jetty.JettyHTTPServerEngine.createConnector(JettyHTTPServerEngine.java:627)
at org.apache.cxf.transport.http_jetty.JettyHTTPServerEngine.addServant(JettyHTTPServerEngine.java:403)
at org.apache.cxf.transport.http_jetty.JettyHTTPDestination.activate(JettyHTTPDestination.java:175)
at org.apache.cxf.transport.AbstractObservable.setMessageObserver(AbstractObservable.java:53)
at org.apache.cxf.binding.AbstractBindingFactory.addListener(AbstractBindingFactory.java:95)
at org.apache.cxf.binding.soap.SoapBindingFactory.addListener(SoapBindingFactory.java:893)
at org.apache.cxf.endpoint.ServerImpl.start(ServerImpl.java:123)
at org.apache.camel.component.cxf.CxfConsumer.doStart(CxfConsumer.java:129)
at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
at org.apache.camel.impl.DefaultCamelContext.startService(DefaultCamelContext.java:3688)
at org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRouteConsumers(DefaultCamelContext.java:4006)
at org.apache.camel.impl.DefaultCamelContext.doStartRouteConsumers(DefaultCamelContext.java:3941)
at org.apache.camel.impl.DefaultCamelContext.safelyStartRouteServices(DefaultCamelContext.java:3861)
at org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRoutes(DefaultCamelContext.java:3625)
at org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:3477)
at org.apache.camel.impl.DefaultCamelContext.access$000(DefaultCamelContext.java:208)
at org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:3236)
at org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:3232)
at org.apache.camel.impl.DefaultCamelContext.doWithDefinedClassLoader(DefaultCamelContext.java:3255)
at org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:3232)
at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:3155)
at org.apache.camel.spring.SpringCamelContext.start(SpringCamelContext.java:133)
... 40 common frames omitted
Caused by: java.lang.reflect.InvocationTargetException: null
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.cxf.transport.http_jetty.JettyHTTPServerEngine.createConnectorJetty9(JettyHTTPServerEngine.java:682)
... 63 common frames omitted
Caused by: java.lang.IllegalStateException: Locker is not reentrant
at org.eclipse.jetty.util.thread.Locker.lock(Locker.java:47)
at org.eclipse.jetty.server.AbstractConnector.removeConnectionFactory(AbstractConnector.java:465)
at org.eclipse.jetty.server.AbstractConnector.setConnectionFactories(AbstractConnector.java:488)
... 68 common frames omitted