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

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

Hello Freeman, 
 thanks for Your swift reply and here are the details I am testing with:
1) apache-servicemix-4.2.0-fuse-01-00
2) servicemix-cxf-bc (2010.01.0.fuse-01-00)
3) spring config:

<?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:cxfbc="http://servicemix.apache.org/cxfbc/1.0";
       xmlns:test="http://vf.balticamadeus.lt/employee/1.0/";
       xsi:schemaLocation="
                http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
                http://servicemix.apache.org/cxfbc/1.0 
http://servicemix.apache.org/schema/servicemix-cxf-bc-2009.01.xsd";>

        <cxfbc:provider wsdl="classpath:META-INF/EmployeeData.wsdl"
                                        locationURI="http://localhost:8084/root";
                                        
service="test:EmployeeDataServiceImplService"
                                        endpoint="EmployeeDataServiceImplPort"
                                        interfaceName="test:EmpProvider"
                                        
busCfg="classpath:META-INF/spring/auth.xml">
        </cxfbc:provider>

        <cxfbc:consumer wsdl="classpath:META-INF/EmployeeData.wsdl"
                                        
endpoint="test:EmployeeDataServiceImplPort2"
                                        
service="test:EmployeeDataServiceImplService"
                                        
targetService="test:EmployeeDataServiceImplService"
                                        
targetEndpoint="EmployeeDataServiceImplPort"
                                        targetInterface="test:EmpProvider"
                                        mtomEnabled="true" />

  <bean class="org.apache.servicemix.common.osgi.EndpointExporter" />
</beans>

4) my 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://my_namespace_here/employee/1.0/}EmployeeDataServiceImplPort.http-conduit";>
                        <http:authorization>
                                <sec:UserName>my_username_here</sec:UserName>
                                <sec:Password>my_password_here</sec:Password>
                        </http:authorization>
                </http:conduit>
</beans>

5) exception:

javax.jbi.management.DeploymentException: java.lang.RuntimeException: 
org.springframework.context.ApplicationContextException: Failed to load 
configuration classpath:META-INF/sprin
g/auth.xml
        at 
org.apache.servicemix.cxfbc.CxfBcProvider.validate(CxfBcProvider.java:521)
        at 
org.apache.servicemix.common.osgi.EndpointTracker$OsgiServiceUnit.<init>(EndpointTracker.java:77)
        at 
org.apache.servicemix.common.osgi.EndpointTracker.register(EndpointTracker.java:58)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at 
org.springframework.osgi.util.internal.ReflectionUtils.invokeMethod(ReflectionUtils.java:108)
        at 
org.springframework.osgi.config.internal.adapter.CustomListenerAdapterUtils.invokeCustomMethods(CustomListenerAdapterUtils.java:155)
        at 
org.springframework.osgi.config.internal.adapter.OsgiServiceLifecycleListenerAdapter.bind(OsgiServiceLifecycleListenerAdapter.java:201)
        at 
org.springframework.osgi.service.importer.support.internal.util.OsgiServiceBindingUtils.callListenersBind(OsgiServiceBindingUtils.java:50)
        at 
org.springframework.osgi.service.importer.support.internal.collection.OsgiServiceCollection$Listener.serviceChanged(OsgiServiceCollection.java:107)
        at 
org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:104)
        at 
org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:933)
        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.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:755)
        at 
org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:710)
        at 
org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:129)
        at 
org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:206)
        at 
org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:507)
        at 
org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:525)
        at 
org.apache.servicemix.common.osgi.EndpointExporter.deploy(EndpointExporter.java:121)
        at 
org.apache.servicemix.common.osgi.EndpointExporter.afterPropertiesSet(EndpointExporter.java:174)
        at 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1369)
        at 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1335)
        at 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
        at 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
        at java.security.AccessController.doPrivileged(Native Method)
        at 
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
        at 
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
        at 
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
        at 
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
        at 
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
        at 
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
        at 
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
        at 
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
        at 
org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.access$1600(AbstractDelegatedExecutionApplicationContext.java:69)
        at 
org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext$4.run(AbstractDelegatedExecutionApplicationContext.java:355)
        at 
org.springframework.osgi.util.internal.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:85)
        at 
org.springframework.osgi.context.support.AbstractDelegatedExecutionApplicationContext.completeRefresh(AbstractDelegatedExecutionApplicationContext.java:320)
        at 
org.springframework.osgi.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor$CompleteRefreshTask.run(DependencyWaiterApplicationContextExec
utor.java:136)
        at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.RuntimeException: 
org.springframework.context.ApplicationContextException: Failed to load 
configuration classpath:META-INF/spring/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.CxfBcProvider.getBus(CxfBcProvider.java:612)
        at 
org.apache.servicemix.cxfbc.CxfBcProvider.validate(CxfBcProvider.java:413)
        ... 42 more
Caused by: org.springframework.context.ApplicationContextException: Failed to 
load configuration classpath:META-INF/spring/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)
        ... 46 more

While I am awaiting at Your reply I am going to take a deeper look at this 
piece code changes in Your latest commit:
-                      
busCfg="org/apache/servicemix/cxfbc/ws/security/provider/CherryServer.xml"
                       >
+        <cxfbc:providedBus>
+           <ref bean="cxf"/>
+        </cxfbc:providedBus> 

I hope that I am missing something here and the answer is all here nearby.

> 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