Getting "java.io.IOException: JBIDestination for Endpoint *** already be created" when registering two CXF NMR endpoints with the same wsdl

Solution Verified - Updated -

Issue

When creating two CXF endpoints, consuming from different NMR addresses but using the same wsdl file, the following error is thrown at deployment time:

Exception in thread "SpringOsgiExtenderThread-744" org.apache.camel.RuntimeCamelException: org.apache.cxf.service.factory.ServiceConstructionException
        at org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1326)
        at org.apache.camel.spring.SpringCamelContext.onApplicationEvent(SpringCamelContext.java:120)
        at org.apache.camel.spring.CamelContextFactoryBean.onApplicationEvent(CamelContextFactoryBean.java:283)
        at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:97)
        at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:327)
        at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:941)
        at org.springframework.osgi.context.support.AbstractOsgiBundleApplicationContext.finishRefresh(AbstractOsgiBundleApplicationContext.java:235)
        at org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext$4.run(AbstractDelegatedExecutionApplicationContext.java:358)
        at org.springframework.osgi.util.internal.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:85)
        at org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.completeRefresh(AbstractDelegatedExecutionApplicationContext.java:320)
        at org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run(DependencyWaiterApplicationContextExecutor.java:132)
        at java.lang.Thread.run(Thread.java:722)
Caused by: org.apache.cxf.service.factory.ServiceConstructionException
        at org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:178)
        at org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBean.java:211)
        at org.apache.camel.component.cxf.CxfConsumer.<init>(CxfConsumer.java:240)
        at org.apache.camel.component.cxf.CxfEndpoint.createConsumer(CxfEndpoint.java:203)
        at org.apache.camel.impl.EventDrivenConsumerRoute.addServices(EventDrivenConsumerRoute.java:65)
        at org.apache.camel.impl.DefaultRoute.onStartingServices(DefaultRoute.java:80)
        at org.apache.camel.impl.RouteService.warmUp(RouteService.java:133)
        at org.apache.camel.impl.DefaultCamelContext.doWarmUpRoutes(DefaultCamelContext.java:2000)
        at org.apache.camel.impl.DefaultCamelContext.safelyStartRouteServices(DefaultCamelContext.java:1928)
        at org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRoutes(DefaultCamelContext.java:1716)
        at org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:1597)
        at org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:1453)
        at org.apache.camel.spring.SpringCamelContext.doStart(SpringCamelContext.java:179)
        at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:60)
        at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:1421)
        at org.apache.camel.spring.SpringCamelContext.maybeStart(SpringCamelContext.java:228)
        at org.apache.camel.spring.SpringCamelContext.onApplicationEvent(SpringCamelContext.java:118)
        ... 10 more
Caused by: java.io.IOException: JBIDestination for Endpoint *** already be created
        at org.apache.servicemix.cxf.transport.nmr.NMRTransportFactory.getDestination(NMRTransportFactory.java:123)
        at org.apache.cxf.binding.soap.SoapTransportFactory.getDestination(SoapTransportFactory.java:135)
        at org.apache.cxf.endpoint.ServerImpl.initDestination(ServerImpl.java:93)
        at org.apache.cxf.endpoint.ServerImpl.<init>(ServerImpl.java:72)
        at org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:160)
        ... 26 more

A possible configuration that reproduces this error could be

<?xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans" ...>

    <import resource="classpath:META-INF/cxf/cxf.xml" />
    <import resource="classpath:META-INF/cxf/transport/nmr/cxf-transport-nmr.xml" />

    <cxf:cxfEndpoint id="nmrEndpoint1" address="nmr:simple1" wsdlURL="wsdl/demo.wsdl" serviceName="s:HelloService" xmlns:s="cxf.apache.org">
        <cxf:properties>
            <entry key="dataFormat" value="PAYLOAD" />
        </cxf:properties>
    </cxf:cxfEndpoint>

    <cxf:cxfEndpoint id="nmrEndpoint2" address="nmr:simple2" wsdlURL="wsdl/demo.wsdl" serviceName="s:HelloService" xmlns:s="cxf.apache.org">
        <cxf:properties>
            <entry key="dataFormat" value="MESSAGE" />
        </cxf:properties>
    </cxf:cxfEndpoint>

    <camelContext xmlns="http://camel.apache.org/schema/spring">
        <route>
            <from uri="cxf:bean:nmrEndpoint1" />
            <to uri="log:after-nmr?level=INFO" />
        </route>
        <route>
            <from uri="cxf:bean:nmrEndpoint2" />
            <to uri="log:after-nmr?level=INFO" />
        </route>
    </camelContext>
</beans>

Environment

  • JBoss Fuse 6.0

Subscriber exclusive content

A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.

Current Customers and Partners

Log in for full access

Log In

New to Red Hat?

Learn more about Red Hat subscriptions

Using a Red Hat product through a public cloud?

How to access this content