[ 
https://issues.apache.org/jira/browse/CAMEL-17618?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17901578#comment-17901578
 ] 

Gordon Freeman commented on CAMEL-17618:
----------------------------------------

It's as if the getCamelContext().getEndpoint method is expected to return null, 
but it seems to always throw a NoSuchEndpointException.

I have the following spring configuration:
{code:java}
    <camel-cxf-jaxws:cxfEndpoint id="myCxfEndpoint" address="/getMyCxfEndpoint"
        serviceClass="org.example.MyTestPortType">
    </camel-cxf-jaxws:cxfEndpoint>

    <route id="getMyCxfEndpointService">
        <from uri="ref:myCxfEndpoint" />
        <to uri="bean:myProcessor?method=processMyCxfEndpoint"/>
    </route>
{code}
And it no longer works on version 4.8.1.
{code:java}
Context initialization failed
org.apache.camel.FailedToCreateRouteException: Failed to create route 
getMyCxfEndpointService: 
Route(getMyCxfEndpointService)[From[ref:myCxfEndpoint... because of No endpoint 
could be found for: /getMyCxfEndpoint, please check your classpath contains the 
needed Camel component jar.
        at 
org.apache.camel.reifier.RouteReifier.createRoute(RouteReifier.java:92)
        at 
org.apache.camel.impl.DefaultModelReifierFactory.createRoute(DefaultModelReifierFactory.java:49)
        at 
org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:726)
        at 
org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:592)
        at 
org.apache.camel.impl.engine.AbstractCamelContext.doInit(AbstractCamelContext.java:2433)
        at 
org.apache.camel.support.service.BaseService.init(BaseService.java:85)
        at 
org.apache.camel.impl.engine.AbstractCamelContext.init(AbstractCamelContext.java:2068)
        at 
org.apache.camel.support.service.BaseService.start(BaseService.java:115)
        at 
org.apache.camel.impl.engine.AbstractCamelContext.start(AbstractCamelContext.java:2087)
        at 
org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:211)
        at 
org.apache.camel.spring.SpringCamelContext.start(SpringCamelContext.java:121)
        at 
org.apache.camel.spring.xml.CamelContextFactoryBean.start(CamelContextFactoryBean.java:430)
        at 
org.apache.camel.spring.xml.CamelContextFactoryBean.onApplicationEvent(CamelContextFactoryBean.java:485)
        at 
org.apache.camel.spring.xml.CamelContextFactoryBean.onApplicationEvent(CamelContextFactoryBean.java:100)
        at 
org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:185)
        at 
org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:178)
        at 
org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:156)
        at 
org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:454)
        at 
org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:387)
        at 
org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:1009)
        at 
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:630)
        at 
org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:394)
        at 
org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:274)
        at 
org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:126)
        at 
org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4008)
        at 
org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4436)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:164)
        at 
org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:599)
        at 
org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:571)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:654)
        at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:969)
        at 
org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1911)
        at 
java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at 
java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
        at 
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
        at 
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
        at 
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
        at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: org.apache.camel.NoSuchEndpointException: No endpoint could be found 
for: /getMyCxfEndpoint, please check your classpath contains the needed Camel 
component jar.
        at 
org.apache.camel.impl.engine.AbstractCamelContext.doGetEndpoint(AbstractCamelContext.java:793)
        at 
org.apache.camel.impl.engine.AbstractCamelContext.getEndpoint(AbstractCamelContext.java:739)
        at 
org.apache.camel.component.ref.RefEndpoint.doInit(RefEndpoint.java:85)
        at 
org.apache.camel.support.service.BaseService.init(BaseService.java:85)
        at 
org.apache.camel.support.service.ServiceHelper.initService(ServiceHelper.java:84)
        at 
org.apache.camel.impl.engine.InternalServiceManager.doAddService(InternalServiceManager.java:118)
        at 
org.apache.camel.impl.engine.AbstractCamelContext.addService(AbstractCamelContext.java:1364)
        at 
org.apache.camel.impl.engine.AbstractCamelContext.addService(AbstractCamelContext.java:1359)
        at 
org.apache.camel.impl.engine.AbstractCamelContext.addService(AbstractCamelContext.java:1354)
        at 
org.apache.camel.impl.engine.AbstractCamelContext.doGetEndpoint(AbstractCamelContext.java:823)
        at 
org.apache.camel.impl.engine.AbstractCamelContext.getEndpoint(AbstractCamelContext.java:739)
        at 
org.apache.camel.support.CamelContextHelper.getMandatoryEndpoint(CamelContextHelper.java:66)
        at 
org.apache.camel.reifier.AbstractReifier.resolveEndpoint(AbstractReifier.java:199)
        at 
org.apache.camel.reifier.RouteReifier.doCreateRoute(RouteReifier.java:106)
        at 
org.apache.camel.reifier.RouteReifier.createRoute(RouteReifier.java:86)
        ... 38 more
{code}

> camel-ref: only add the endpoint into camelContext when not exist
> -----------------------------------------------------------------
>
>                 Key: CAMEL-17618
>                 URL: https://issues.apache.org/jira/browse/CAMEL-17618
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-core
>    Affects Versions: 3.15.0
>            Reporter: Freeman Yue Fang
>            Assignee: Freeman Yue Fang
>            Priority: Minor
>             Fix For: 3.11.6, 3.14.2, 3.16.0
>
>
> Currently camel-ref endpoint always adds the underlying endpoint like
> getCamelContext().addEndpoint(getEndpoint().getEndpointUri(), endpoint);
> We should check if it exists or not firstly like
>         if (getCamelContext().getEndpoint(getEndpoint().getEndpointUri()) == 
> null) {
>                getCamelContext().addEndpoint(getEndpoint().getEndpointUri(), 
> endpoint);
>        }
> Because if we re-add the same endpoint, this endpoint actually will be stopped



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to