[
https://issues.apache.org/activemq/browse/CAMEL-1427?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Charles Moulliard resolved CAMEL-1427.
--------------------------------------
Resolution: Fixed
Hi,
I have been able to deploy successfully camel cxf:endpoint in ServiceMix
engine. Both configuration (using the cxf:endpoint or uri=cxf:///) works except
that I have to restart the SMX server in order to launch correctly the Camel
CXF bundle after an update of the bundle.
To run it correctly, I have imported in my bundle MANIFEST file different
packages. Here is the list. This could be helpfull for others :
{code}
<Import-Package>
META-INF.cxf,
META-INF.wsdl,
org.apache.commons.logging,
org.apache.camel,
org.apache.camel.component,
org.apache.camel.component.cxf,
org.apache.camel.component.cxf.converter,
org.apache.camel.component.jms,
org.apache.camel.dataformat.bindy,
org.apache.camel.dataformat.bindy.csv,
org.apache.camel.example.reportincident,
org.apache.camel.example.reportincident.model,
org.apache.camel.processor,
org.apache.activemq.camel.component;${activemq.osgi.version},
org.apache.activemq.camel.converter;${activemq.osgi.version},
org.apache.activemq.pool,
org.apache.cxf,
org.apache.cxf.binding,
org.apache.cxf.binding.corba,
org.apache.cxf.binding.soap,
org.apache.cxf.binding.soap.spring,
org.apache.cxf.bus,
org.apache.cxf.bus.resource,
org.apache.cxf.bus.spring,
org.apache.cxf.buslifecycle,
org.apache.cxf.catalog,
org.apache.cxf.configuration,
org.apache.cxf.configuration.spring,
org.apache.cxf.endpoint,
org.apache.cxf.headers,
org.apache.cxf.management,
org.apache.cxf.management.jmx,
org.apache.cxf.phase,
org.apache.cxf.resource,
org.apache.cxf.transport,
org.apache.cxf.transport.http,
org.apache.cxf.transport.http.policy,
org.apache.cxf.transport.http_jetty,
org.apache.cxf.transport.jms,
org.apache.cxf.transports.http,
org.apache.cxf.workqueue,
org.apache.cxf.wsdl,
org.apache.cxf.wsdl11,
org.springframework.beans.factory.config,
*
</Import-Package>
{code}
I will discuss this point with G. Nodet.
Here is an example of the config used :
{code}
<?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:osgi="http://www.springframework.org/schema/osgi"
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://www.springframework.org/schema/osgi
http://www.springframework.org/schema/osgi/spring-osgi.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">
<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"/>
<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.beans.Csv" />
<bean id="webservice"
class="org.apache.camel.example.reportincident.beans.WebService" />
<bean id="feedback"
class="org.apache.camel.example.reportincident.beans.Feedback" />
<!-- webservice endpoint -->
<cxf:cxfEndpoint id="reportIncident"
address="http://localhost:8080/camel-example/incident"
wsdlURL="report_incident.wsdl"
serviceClass="org.apache.camel.example.reportincident.ReportIncidentEndpoint"
xmlns:s="http://reportincident.example.camel.apache.org">
</cxf:cxfEndpoint>
<osgi:reference id="queuingservice"
interface="org.apache.camel.Component" />
<camelContext trace="true" xmlns="http://camel.apache.org/schema/osgi">
<!-- File route -->
<camel:route>
<camel:from
uri="file://d:/temp/data/?move=d:/temp/done/${file:name}" />
<camel:unmarshal ref="bindyDataformat" />
<camel:to uri="bean:csv" />
<camel:to uri="queuingservice:queue:in" />
</camel:route>
<!-- -->
<camel:route>
<camel:from uri="queuingservice:queue:in" />
<camel:marshal ref="bindyDataformat" />
<camel:to uri="file://d:/temp/data/queue" />
</camel:route>
<!-- CXF route -->
<camel:route>
<camel:from uri="cxf:bean:reportIncident" />
<camel:convertBodyTo
type="org.apache.camel.example.reportincident.InputReportIncident" />
<camel:to uri="bean:webservice" />
<camel:transform>
<camel:method bean="feedback" method="setOk" />
</camel:transform>
</camel:route>
</camelContext>
</beans>
{code}
> 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.