You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@camel.apache.org by "Willem Jiang (JIRA)" <ji...@apache.org> on 2011/07/11 09:34:00 UTC

[jira] [Resolved] (CAMEL-4207) Test case CxfEndpointBeanBusSettingTest should use ExtensionManagerBus instead of CXFBusImpl

     [ https://issues.apache.org/jira/browse/CAMEL-4207?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Willem Jiang resolved CAMEL-4207.
---------------------------------

       Resolution: Fixed
    Fix Version/s:     (was: 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