You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@servicemix.apache.org by "Andrzej Kulakowski (JIRA)" <ji...@apache.org> on 2010/08/24 17:04:51 UTC

[jira] Commented: (SMXCOMP-688) servicemix-cxf-bc endpoint cannot load busCfg file when packaged as an OSGi bundle

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

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

I've been trying to accomplish the same thing (hoping it to be fixed), but to no avail it is not working still. Results seem to be exactly the same as prior.


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