[ 
https://issues.apache.org/activemq/browse/SMXCOMP-688?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=61453#action_61453
 ] 

Andrzej Kulakowski commented on SMXCOMP-688:
--------------------------------------------

Hello Mr. Freeman,
 I am still fruitlessly struggling to get bus config loaded into cxf-bc 
provider. Here is the list of my approaches so far:

1) I have tried to supply cxf.xml file for Cxf-bc provider in OSGi package via 
<import resource="classpath:cxf.xml" /> and/or simply placing cxf.xml on the 
classpath so CXF would load it automatically upon starting up. This approach at 
least was runnable, but authentication parameters supplied in cxf.xml were not 
taken into effect. I am curious if this approach is supported at all? here is 
where i found it [1] .
[1] http://cxf.apache.org/docs/configuration.html

2) I tried to create a class that implements org.apache.cxf.Bus and then pass 
it to the providedBus, but I have failed to achieve any plausible effect, 
largely due to not knowing exactly what values should I set in that class etc.. 
Could you be more precise on contents of this class and how to deliver it in a 
optimal way? Google didn't find any samples nor tutorials regarding "cxf bc 
providedBus" query.

3) Out of sheer curiosity I took the supplied "cxf-wsdl-first" sample from smx4 
package and merely modified cxf-bc module's pom to make sure it uses 
servicemix-cxf-bc version 2010.01 and added "busCfg="classpath:auth.xml" to the 
xbean.xml file. File auth.xml resides in the same place as the person.wsdl.
Here are the contents of auth.xml:

<?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:sec="http://cxf.apache.org/configuration/security";
        xmlns:http="http://cxf.apache.org/transports/http/configuration";
        xsi:schemaLocation="
        http://cxf.apache.org/configuration/security 
http://cxf.apache.org/schemas/configuration/security.xsd
        http://cxf.apache.org/transports/http/configuration 
http://cxf.apache.org/schemas/configuration/http-conf.xsd
        http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd";>

        <http:conduit name="*.http-conduit">
                <http:client AllowChunking="false" />
                </http:conduit>
</beans>

After successfully packaging (JBI service assembly in a *.zip file) and 
deploying into smx4 I get the following exception after starting the component:

16:12:27,355 | ERROR | use-01-00/deploy | ServiceAssemblyInstaller         | 
er.impl.ServiceAssemblyInstaller  100 | Error deploying SU wsdl-first-cxfbc-su
16:12:27,355 | ERROR | use-01-00/deploy | Deployer                         | 
cemix.jbi.deployer.impl.Deployer  360 | Error handling bundle start event
javax.jbi.JBIException: java.lang.Exception: Error deploying SU 
wsdl-first-cxfbc-su
        at 
org.apache.servicemix.jbi.deployer.impl.ServiceAssemblyInstaller.install(ServiceAssemblyInstaller.java:101)
        at 
org.apache.servicemix.jbi.deployer.impl.Deployer.onBundleStarted(Deployer.java:352)
        at 
org.apache.servicemix.jbi.deployer.impl.Deployer.bundleChanged(Deployer.java:282)
        at 
org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:919)
        at 
org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:227)
        at 
org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:149)
        at 
org.eclipse.osgi.framework.internal.core.Framework.publishBundleEventPrivileged(Framework.java:1350)
        at 
org.eclipse.osgi.framework.internal.core.Framework.publishBundleEvent(Framework.java:1301)
        at 
org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:362)
        at 
org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:280)
        at 
org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:272)
        at 
org.apache.felix.fileinstall.internal.DirectoryWatcher.start(DirectoryWatcher.java:1090)
        at 
org.apache.felix.fileinstall.internal.DirectoryWatcher.start(DirectoryWatcher.java:1076)
        at 
org.apache.felix.fileinstall.internal.DirectoryWatcher.process(DirectoryWatcher.java:405)
        at 
org.apache.felix.fileinstall.internal.DirectoryWatcher.run(DirectoryWatcher.java:212)
Caused by: java.lang.Exception: Error deploying SU wsdl-first-cxfbc-su
        at 
org.apache.servicemix.jbi.deployer.impl.ServiceAssemblyInstaller.deploySUs(ServiceAssemblyInstaller.java:213)
        at 
org.apache.servicemix.jbi.deployer.impl.ServiceAssemblyInstaller.install(ServiceAssemblyInstaller.java:85)
        ... 14 more
Caused by: javax.jbi.management.DeploymentException: 
java.lang.RuntimeException: 
org.springframework.context.ApplicationContextException: Failed to load 
configuration classpath:aut
h.xml
        at 
org.apache.servicemix.cxfbc.CxfBcConsumer.validate(CxfBcConsumer.java:535)
        at 
org.apache.servicemix.common.AbstractDeployer.validate(AbstractDeployer.java:58)
        at 
org.apache.servicemix.common.xbean.BaseXBeanDeployer.validate(BaseXBeanDeployer.java:55)
        at 
org.apache.servicemix.common.xbean.AbstractXBeanDeployer.deploy(AbstractXBeanDeployer.java:97)
        at 
org.apache.servicemix.common.BaseServiceUnitManager.doDeploy(BaseServiceUnitManager.java:88)
        at 
org.apache.servicemix.common.BaseServiceUnitManager.deploy(BaseServiceUnitManager.java:69)
        at 
org.apache.servicemix.jbi.deployer.artifacts.ServiceUnitImpl.deploy(ServiceUnitImpl.java:104)
        at 
org.apache.servicemix.jbi.deployer.impl.ServiceAssemblyInstaller.deploySUs(ServiceAssemblyInstaller.java:207)
        ... 15 more
Caused by: java.lang.RuntimeException: 
org.springframework.context.ApplicationContextException: Failed to load 
configuration classpath:auth.xml
        at 
org.apache.cxf.bus.spring.SpringBusFactory.createBus(SpringBusFactory.java:96)
        at 
org.apache.cxf.bus.spring.SpringBusFactory.createBus(SpringBusFactory.java:88)
        at 
org.apache.cxf.bus.spring.SpringBusFactory.createBus(SpringBusFactory.java:64)
        at 
org.apache.servicemix.cxfbc.CxfBcConsumer.getBus(CxfBcConsumer.java:623)
        at 
org.apache.servicemix.cxfbc.CxfBcConsumer.retrieveWSDL(CxfBcConsumer.java:605)
        at 
org.apache.servicemix.cxfbc.CxfBcConsumer.validate(CxfBcConsumer.java:406)
        ... 22 more
Caused by: org.springframework.context.ApplicationContextException: Failed to 
load configuration classpath:auth.xml
        at 
org.apache.cxf.bus.spring.BusApplicationContext.getConfigResources(BusApplicationContext.java:152)
        at 
org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:107)
        at 
org.apache.cxf.bus.spring.BusApplicationContext.loadBeanDefinitions(BusApplicationContext.java:262)
        at 
org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:123)
        at 
org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:422)
        at 
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
        at 
org.apache.cxf.bus.spring.BusApplicationContext.<init>(BusApplicationContext.java:91)
        at 
org.apache.cxf.bus.spring.SpringBusFactory.createApplicationContext(SpringBusFactory.java:110)
        at 
org.apache.cxf.bus.spring.SpringBusFactory.createBus(SpringBusFactory.java:93)
        ... 27 more

The reason here seems to be the inability to load the config file, which can be 
noticed in the middle of the exception stack. What's wrong with this piece of 
code? As it is am totally lost of what I am doing wrong here, I have already 
spent 3 days researching this matter.


Thanks in advance for Your help,
Andrzej

> servicemix-cxf-bc endpoint cannot load busCfg file when packaged as an OSGi 
> bundle
> ----------------------------------------------------------------------------------
>
>                 Key: SMXCOMP-688
>                 URL: https://issues.apache.org/activemq/browse/SMXCOMP-688
>             Project: ServiceMix Components
>          Issue Type: Bug
>          Components: servicemix-cxf-bc
>    Affects Versions: servicemix-cxf-bc-2009.02
>         Environment: apache-servicemix-4.1.0-SNAPSHOT build 164
> OSX
> java version "1.6.0_17"
> Java(TM) SE Runtime Environment (build 1.6.0_17-b04-248-10M3025)
> Java HotSpot(TM) 64-Bit Server VM (build 14.3-b01-101, mixed mode)
>            Reporter: Paul Mietz Egli
>            Assignee: Freeman Fang
>             Fix For: servicemix-cxf-bc-2010.01
>
>         Attachments: smx4-bus-config.tar.gz, smx4-provided-bus.diff
>
>
> I've been attempting to set up CXF to use digest authentication by specifying 
> a value for the busCfg attribute of a cxfbc:provider endpoint.  When I use a 
> relative file path like the example code, I get a "Failed to load 
> configuration com/example/cxf/bus.xml", which I more or less would expect.  
> Using a "classpath:" prefix for the attribute value, I this 
> IllegalArgumentException:
> Caused by: java.lang.IllegalArgumentException: name
>       at sun.misc.URLClassPath$Loader.findResource(URLClassPath.java:458)
>       at sun.misc.URLClassPath.findResource(URLClassPath.java:145)
>       at java.net.URLClassLoader$2.run(URLClassLoader.java:362)
>       at java.security.AccessController.doPrivileged(Native Method)
>       at java.net.URLClassLoader.findResource(URLClassLoader.java:359)
>       at java.lang.ClassLoader.getResource(ClassLoader.java:1040)
>       at 
> org.springframework.osgi.context.internal.classloader.ChainedClassLoader.doGetResource(ChainedClassLoader.java:128)
>       at 
> org.springframework.osgi.context.internal.classloader.ChainedClassLoader.getResource(ChainedClassLoader.java:110)
>       at 
> org.springframework.core.io.ClassPathResource.getURL(ClassPathResource.java:160)
>       at 
> org.springframework.core.io.ClassPathResource.getFile(ClassPathResource.java:175)
>       at 
> org.springframework.core.io.AbstractResource.exists(AbstractResource.java:51)
>       at 
> org.apache.cxf.bus.spring.BusApplicationContext.findResource(BusApplicationContext.java:196)
>       at 
> org.apache.cxf.bus.spring.BusApplicationContext.getConfigResources(BusApplicationContext.java:144)
>       at 
> org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:107)
>       at 
> org.apache.cxf.bus.spring.BusApplicationContext.loadBeanDefinitions(BusApplicationContext.java:262)
>       at 
> org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:123)
>       at 
> org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:422)
>       at 
> org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
>       at 
> org.apache.cxf.bus.spring.BusApplicationContext.<init>(BusApplicationContext.java:91)
>       at 
> org.apache.cxf.bus.spring.SpringBusFactory.createApplicationContext(SpringBusFactory.java:102)
>       at 
> org.apache.cxf.bus.spring.SpringBusFactory.createBus(SpringBusFactory.java:93)
>       at 
> org.apache.cxf.bus.spring.SpringBusFactory.createBus(SpringBusFactory.java:88)
>       at 
> org.apache.cxf.bus.spring.SpringBusFactory.createBus(SpringBusFactory.java:64)
>       at 
> org.apache.servicemix.cxfbc.CxfBcProvider.getBus(CxfBcProvider.java:601)
>       at 
> org.apache.servicemix.cxfbc.CxfBcProvider.validate(CxfBcProvider.java:422)
>       ... 41 more
> Using a debugger, I can see that the ChainedClassLoader contains the 
> following objects:
>   [BundleDelegatingClassLoader for [ServiceMix :: CXF Binding Component 
> (servicemix-cxf-bc)], 37.0, 40.0, 42.0, 69.0]
> where 37 is spring-aop, 40 is cglib, 42 is spring-osgi-core, and 69 is 
> servicemix-common.  There is no bundle classloader for my bundle, so even 
> though I've exported com/example/cxf, I wouldn't expect the 
> ChainedClassLoader to find it.
> It seems to me that we have a chicken-and-egg problem: we need the bus to 
> validate the component, yet we can't load the bus configuration from our 
> bundle when the component is being validated.  I thought about attaching a 
> fragment bundle to the CXF binding component, but I'm not sure if that would 
> work and it seems like a lot of trouble.
> One way around the issue would be to create a means of setting the bus object 
> using Spring, like Camel's CXF component.  I'm attaching a patch for 
> consideration which adds a setBus() method to CxfBcProvider and modifies 
> getBus() to return the object from setBus() if any.  With these changes, I'm 
> able to configure my CXF bus for Digest auth and provide it to the endpoint.

-- 
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