[
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&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.