Cxfendpoint与骆驼java DSL

时间:2017-10-24 09:45:10

标签: java apache-camel cxf

我已经定义了像这样的驼峰上下文

<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

0 个答案:

没有答案