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

Willem Jiang commented on CAMEL-1427:
-------------------------------------

Hi Charles,

After studied the Spring Osgi relates ApplicationContext code, I found they 
will use the managed thread to refresh the application.
Since your application context didn't import any CXF relates components, CXF 
bus will try to create the application context itself, 
then you may hit that kind of  java.lang.IllegalStateException: BeanFactory not 
initialized or already closed , 
if the CXF bus's application context doesn't finish the initialization before 
camel setup the  cxf endpoint for your.

So please include the below line into your Spring configuration to load the bus 
explicitly.
{code}
 <import resource="classpath:META-INF/cxf/cxf.xml"/>
 <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
 <import resource="classpath:META-INF/cxf/cxf-extension-http-jetty.xml"/>
{code}

Willem


> java.lang.IllegalStateException: BeanFactory not initialized or already 
> closed - call 'refresh' before accessing beans via the ApplicationContext
> -------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-1427
>                 URL: https://issues.apache.org/activemq/browse/CAMEL-1427
>             Project: Apache Camel
>          Issue Type: Bug
>          Components: camel-osgi
>            Reporter: Charles Moulliard
>            Assignee: Willem Jiang
>
> Hi,
> When I run the following spring DSL in SMX4
> <?xml version="1.0" encoding="UTF-8"?>
> <beans xmlns="http://www.springframework.org/schema/beans";
>       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>       xmlns:camel="http://camel.apache.org/schema/spring";
>       xmlns:cxf="http://camel.apache.org/schema/cxf";
>       xsi:schemaLocation=" http://www.springframework.org/schema/beans
>               http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
>               http://camel.apache.org/schema/osgi
>               http://camel.apache.org/schema/osgi/camel-osgi.xsd
>               http://camel.apache.org/schema/spring
>               http://camel.apache.org/schema/spring/camel-spring.xsd
>               http://camel.apache.org/schema/cxf
>               http://camel.apache.org/schema/cxf/camel-cxf.xsd";>
>  
>       <bean id="bindyDataformat"
>                 
> class="org.apache.camel.dataformat.bindy.csv.BindyCsvDataFormat">
>            <constructor-arg type="java.lang.String" 
> value="org.apache.camel.example.reportincident.model" />
>       </bean>
>       
>       <bean id="csv" 
> class="org.apache.camel.example.reportincident.csv.CsvBean" />
>       <bean id="OK" 
> class="org.apache.camel.example.reportincident.OutputReportIncident">
>               <property name="code" value="0"/>
>       </bean>
>       <camelContext trace="true" xmlns="http://camel.apache.org/schema/osgi";>
>               
> <camel:package>org.apache.camel.example.reportincident.routing</camel:package>
>               
>               <!-- File route  -->
>               <camel:route>
>                       <camel:from     
> uri="file://d:/temp/data/?moveExpression=d:/temp/done/${file:name}" />
>                       <camel:unmarshal ref="bindyDataformat" />
>                       <camel:to uri="bean:csv" />
>               </camel:route>
>               
>               <!-- CXF route -->
>               <camel:route>
>                       <camel:from 
> uri="cxf://http://localhost:8080/camel-example/incident?serviceClass=org.apache.camel.example.reportincident.service.ReportIncidentEndpoint&amp;wsdlURL=wsdl/report_incident.wsdl";
>  />
>                       <camel:convertBodyTo 
> type="org.apache.camel.example.reportincident.InputReportIncident" />
>                       <camel:to uri="log:cxf" />
>                       <camel:transform>
>                           <camel:method bean="OK" method="code"/>
>                       </camel:transform>
>               </camel:route>
>        
>       </camelContext>
> </beans>
> , I receive the following error :
> 15:48:59,209 | ERROR | xtenderThread-15 | OsgiBundleXmlApplicationContext  | 
> gatedExecutionApplicationContext  366 | Post refresh error
> java.lang.IllegalStateException: BeanFactory not initialized or already 
> closed - call 'refresh' before accessing beans via the ApplicationContext
>       at 
> org.springframework.context.support.AbstractRefreshableApplicationContext.getBeanFactory(AbstractRefreshableApplicationContext.java:153)
>       at 
> org.springframework.context.support.AbstractApplicationContext.containsBean(AbstractApplicationContext.java:892)
>       at 
> org.apache.cxf.configuration.spring.ConfigurerImpl.configureBean(ConfigurerImpl.java:141)
>       at 
> org.apache.cxf.configuration.spring.ConfigurerImpl.configureBean(ConfigurerImpl.java:111)
>       at 
> org.apache.cxf.transport.http.AbstractHTTPTransportFactory.configure(AbstractHTTPTransportFactory.java:229)
>       at 
> org.apache.cxf.transport.http.AbstractHTTPTransportFactory.configure(AbstractHTTPTransportFactory.java:224)
>       at 
> org.apache.cxf.transport.http_jetty.JettyHTTPTransportFactory.createDestination(JettyHTTPTransportFactory.java:121)
>       at 
> org.apache.cxf.transport.http_jetty.JettyHTTPTransportFactory.getDestination(JettyHTTPTransportFactory.java:103)
>       at 
> org.apache.cxf.endpoint.ServerImpl.initDestination(ServerImpl.java:90)
>       at org.apache.cxf.endpoint.ServerImpl.<init>(ServerImpl.java:69)
>       at 
> org.apache.cxf.frontend.ServerFactoryBean.create(ServerFactoryBean.java:121)
>       at 
> org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBean.java:168)
>       at 
> org.apache.camel.component.cxf.CxfConsumer.<init>(CxfConsumer.java:102)
>       at 
> org.apache.camel.component.cxf.CxfEndpoint.createConsumer(CxfEndpoint.java:95)
>       at 
> org.apache.camel.impl.EventDrivenConsumerRoute.addServices(EventDrivenConsumerRoute.java:62)
>       at org.apache.camel.Route.getServicesForRoute(Route.java:74)
>       at org.apache.camel.impl.RouteService.doStart(RouteService.java:77)
>       at org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:50)
>       at 
> org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:743)
>       at 
> org.apache.camel.spring.SpringCamelContext.maybeDoStart(SpringCamelContext.java:165)
>       at 
> org.apache.camel.spring.SpringCamelContext.doStart(SpringCamelContext.java:160)
>       at org.apache.camel.impl.ServiceSupport.start(ServiceSupport.java:50)
>       at 
> org.apache.camel.spring.SpringCamelContext.maybeStart(SpringCamelContext.java:95)
>       at 
> org.apache.camel.spring.SpringCamelContext.onApplicationEvent(SpringCamelContext.java:114)
>       at 
> org.springframework.context.event.SimpleApplicationEventMulticaster$1.run(SimpleApplicationEventMulticaster.java:78)
>       at 
> org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:49)
>       at 
> org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:76)
>       at 
> org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:274)
>       at 
> org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:736)
>       at 
> org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.finishRefresh(AbstractDelegatedExecutionApplicationContext.java:380)
>       at 
> org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext$4.run(AbstractDelegatedExecutionApplicationContext.java:346)
>       at 
> org.springframework.osgi.util.internal.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:85)
>       at 
> org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.completeRefresh(AbstractDelegatedExecutionApplicationContext.java:308)
>       at 
> org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run(DependencyWaiterApplicationContextExecutor.java:138)
>       at java.lang.Thread.run(Thread.java:595)
> but the error is not generated when running outside of an OSGI server (SMX4)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to