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

Willem Jiang commented on CAMEL-4207:
-------------------------------------

As Camel 2.7.x is using CXF 2.3.x, there are some difference of the bus between 
CXF 2.3.x and CXF 2.4.x.
If you are using the CXF 2.3.x you have to wire the CXF components with the bus 
yourself, so I didn't back port the patch into 2.7.3.

> Test case CxfEndpointBeanBusSettingTest should use ExtensionManagerBus 
> instead of CXFBusImpl
> --------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-4207
>                 URL: https://issues.apache.org/jira/browse/CAMEL-4207
>             Project: Camel
>          Issue Type: Test
>          Components: camel-cxf
>    Affects Versions: 2.7.2
>            Reporter: Aki Yoshida
>            Assignee: Willem Jiang
>            Priority: Minor
>             Fix For: 2.8.0
>
>         Attachments: patch.txt
>
>
> I noticed a minor deficiency in one of the CXF spring configuration tests in 
> the current Camel trunk.
> In org.apache.camel.component.cxf.spring.CxfEndpointBeanBusSettingTest, the 
> two CXF bus instances are configured and referenced from the two Camel CXF 
> endpoints.
> This test runs without errors. But if you try to use this example in a real 
> scenario where these CXF endpoints are actually referenced in the Camel 
> route, you will get an NPE at the following code line.
>     protected BindingInfo createBindingInfo() {
>         BindingFactoryManager mgr = 
> bus.getExtension(BindingFactoryManager.class);
>                   ...
>            bindingFactory = mgr.getBindingFactory(binding); //<--- this line
> Caused by: java.lang.NullPointerException
>       at 
> org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createBindingInfo(AbstractWSDLBasedEndpointFactory.java:338)
>       at 
> org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpointInfo(AbstractWSDLBasedEndpointFactory.java:252)
>       at 
> org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:147)
>       at 
> org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:157)
>       at 
> org.apache.camel.component.cxf.CxfConsumer.<init>(CxfConsumer.java:226)
>       at 
> org.apache.camel.component.cxf.CxfEndpoint.createConsumer(CxfEndpoint.java:162)
>       at 
> org.apache.camel.impl.EventDrivenConsumerRoute.addServices(EventDrivenConsumerRoute.java:61)
>       at 
> org.apache.camel.impl.DefaultRoute.onStartingServices(DefaultRoute.java:75)
>       at org.apache.camel.impl.RouteService.warmUp(RouteService.java:124)
>       at 
> org.apache.camel.impl.DefaultCamelContext.doWarmUpRoutes(DefaultCamelContext.java:1843)
>       at 
> org.apache.camel.impl.DefaultCamelContext.safelyStartRouteServices(DefaultCamelContext.java:1771)
>       at 
> org.apache.camel.impl.DefaultCamelContext.doStartOrResumeRoutes(DefaultCamelContext.java:1556)
>       at 
> org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:1448)
>       at 
> org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:1338)
>       at 
> org.apache.camel.spring.SpringCamelContext.doStart(SpringCamelContext.java:160)
>       at org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:67)
>       at org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:54)
>       at 
> org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:1316)
>       at 
> org.apache.camel.spring.SpringCamelContext.maybeStart(SpringCamelContext.java:204)
>       at 
> org.apache.camel.spring.SpringCamelContext.onApplicationEvent(SpringCamelContext.java:99)
>       ... 31 more
> This null BindingFactoryManager instance is the result from the configuration 
> that uses CXFBusImpl directly, as
>     <bean id="cxf1" class="org.apache.cxf.bus.CXFBusImpl"/>
>     <bean id="cxf2" class="org.apache.cxf.bus.CXFBusImpl"/>
> In CXF 2.4, the standard extensions are inserted into the bus at 
> org.apache.cxf.bus.extension.ExtensionManagerBus's constructor.
> Therefore, in order to get the BindingFactoryManager inserted into the bus to 
> avoid this NPE, the ExtensionManagerBus class should be used instead of 
> CXFBusImpl as the class parameter. Alternatively, as this is a spring 
> configuration, we could use org.apache.cxf.bus.spring.SpringBus. But I think 
> ExtensionManagerBus is more neutral and therefore probably more suitable as 
> an example to the users.
>     <bean id="cxf1" class="org.apache.cxf.bus.extension.ExtensionManagerBus"/>
>     <bean id="cxf2" class="org.apache.cxf.bus.extension.ExtensionManagerBus"/>
> I am attaching a patch file suggesting this change and also another minor 
> change in the test program to add a few more assertion checks.
> Regards, aki

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to