[ https://issues.apache.org/jira/browse/ARIES-1140?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Daniel Kulp updated ARIES-1140: ------------------------------- Description: Hi, I have a problem in using Blueprint together with CXF and Karaf projects. The use case is quite trivial: I inject OSGi service into java class source. This OSGi service is exposed by declared jax-ws client. 1. Blueprint configuration exporting service: {code:xml} <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cxf="http://cxf.apache.org/blueprint/core" xmlns:jaxws="http://cxf.apache.org/blueprint/jaxws" xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd http://cxf.apache.org/blueprint/jaxws http://cxf.apache.org/schemas/blueprint/jaxws.xsd http://cxf.apache.org/blueprint/core http://cxf.apache.org/schemas/blueprint/core.xsd "> <jaxws:client id="crmClient" xmlns:serviceNamespace="http://services.talend.org/CRMService" serviceClass="org.talend.services.crmservice.CRMService" serviceName="serviceNamespace:CRMServiceProvider" endpointName="serviceNamespace:CRMServicePort" address="http://localhost:8080/service/CRMService"/> <service ref="crmClient" interface="org.talend.services.crmservice.CRMService" /> </blueprint> {code} Where org.talend.services.crmservice.CRMService is generated jax-ws interface 2. Blueprint configuration importing service: {code:xml} <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"> <reference id="CRMServiceClient" interface="org.talend.services.crmservice.CRMService" /> <bean id="TestClass" class="org.talend..demo.TestClass"> <property name="crms" ref="CRMServiceClient" /> </bean> </blueprint> {code} 3. Code in TestClass: {code:java} ... private CRMService crms; public void setCrms(CRMService crms) { this.crms = crms; System.out.println(crms.getClass()); System.out.println(crms.toString()); System.out.println(crms instanceof BindingProvider); } ... {code} Problem: The problem is that crms proxy, injected into TestClass, implements only org.talend.services.crmservice.CRMService. The proxy calls methods of org.apache.cxf.jaxws.JaxWsClientProxy which implements javax.xml.ws.BindingProvider interface. I expect that crms proxy also implements javax.xml.ws.BindingProvider, but it is not the case. I have the following output from setCrms: class com.sun.proxy.$Proxy151 org.apache.cxf.jaxws.JaxWsClientProxy@c3f8b42 false The proxy calls toString() method of JaxWsClientProxy, but it is not instance of BindingProvider interface. The problem is that this proxy is not jax-ws compatible, because spec requires that all proxies implementing BindingProvider interface. Interesting that Spring DM proxy hasn't such problem: it implements BindingProvider interface in this scenario. Is it Blueprint problem? (seems to be true for me) Is there way to fix this in Blueprint? Regards, Andrei. was: Hi, I have a problem in using Blueprint together with CXF and Karaf projects. The use case is quite trivial: I inject OSGi service into java class source. This OSGi service is exposed by declared jax-ws client. 1. Blueprint configuration exporting service: <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cxf="http://cxf.apache.org/blueprint/core" xmlns:jaxws="http://cxf.apache.org/blueprint/jaxws" xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd http://cxf.apache.org/blueprint/jaxws http://cxf.apache.org/schemas/blueprint/jaxws.xsd http://cxf.apache.org/blueprint/core http://cxf.apache.org/schemas/blueprint/core.xsd "> <jaxws:client id="crmClient" xmlns:serviceNamespace="http://services.talend.org/CRMService" serviceClass="org.talend.services.crmservice.CRMService" serviceName="serviceNamespace:CRMServiceProvider" endpointName="serviceNamespace:CRMServicePort" address="http://localhost:8080/service/CRMService"/> <service ref="crmClient" interface="org.talend.services.crmservice.CRMService" /> </blueprint> Where org.talend.services.crmservice.CRMService is generated jax-ws interface 2. Blueprint configuration importing service: <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"> <reference id="CRMServiceClient" interface="org.talend.services.crmservice.CRMService" /> <bean id="TestClass" class="org.talend..demo.TestClass"> <property name="crms" ref="CRMServiceClient" /> </bean> </blueprint> 3. Code in TestClass: ... private CRMService crms; public void setCrms(CRMService crms) { this.crms = crms; System.out.println(crms.getClass()); System.out.println(crms.toString()); System.out.println(crms instanceof BindingProvider); } ... Problem: The problem is that crms proxy, injected into TestClass, implements only org.talend.services.crmservice.CRMService. The proxy calls methods of org.apache.cxf.jaxws.JaxWsClientProxy which implements javax.xml.ws.BindingProvider interface. I expect that crms proxy also implements javax.xml.ws.BindingProvider, but it is not the case. I have the following output from setCrms: class com.sun.proxy.$Proxy151 org.apache.cxf.jaxws.JaxWsClientProxy@c3f8b42 false The proxy calls toString() method of JaxWsClientProxy, but it is not instance of BindingProvider interface. The problem is that this proxy is not jax-ws compatible, because spec requires that all proxies implementing BindingProvider interface. Interesting that Spring DM proxy hasn't such problem: it implements BindingProvider interface in this scenario. Is it Blueprint problem? (seems to be true for me) Is there way to fix this in Blueprint? Regards, Andrei. > Injected java.lang.reflect.Proxy implements only single interface > ----------------------------------------------------------------- > > Key: ARIES-1140 > URL: https://issues.apache.org/jira/browse/ARIES-1140 > Project: Aries > Issue Type: Improvement > Components: Proxy > Affects Versions: proxy-impl-1.0.1 > Reporter: Andrei Shakirin > > Hi, > I have a problem in using Blueprint together with CXF and Karaf projects. The > use case is quite trivial: I inject OSGi service into java class source. This > OSGi service is exposed by declared jax-ws client. > 1. Blueprint configuration exporting service: > {code:xml} > <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xmlns:cxf="http://cxf.apache.org/blueprint/core" > xmlns:jaxws="http://cxf.apache.org/blueprint/jaxws" > xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 > http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd > http://cxf.apache.org/blueprint/jaxws > http://cxf.apache.org/schemas/blueprint/jaxws.xsd > http://cxf.apache.org/blueprint/core > http://cxf.apache.org/schemas/blueprint/core.xsd > "> > <jaxws:client id="crmClient" > xmlns:serviceNamespace="http://services.talend.org/CRMService" > serviceClass="org.talend.services.crmservice.CRMService" > serviceName="serviceNamespace:CRMServiceProvider" > endpointName="serviceNamespace:CRMServicePort" > address="http://localhost:8080/service/CRMService"/> > <service ref="crmClient" > interface="org.talend.services.crmservice.CRMService" /> > </blueprint> > {code} > Where org.talend.services.crmservice.CRMService is generated jax-ws interface > 2. Blueprint configuration importing service: > {code:xml} > <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 > http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"> > <reference id="CRMServiceClient" > interface="org.talend.services.crmservice.CRMService" /> > <bean id="TestClass" > class="org.talend..demo.TestClass"> > <property name="crms" ref="CRMServiceClient" /> > </bean> > </blueprint> > {code} > 3. Code in TestClass: > {code:java} > ... > private CRMService crms; > public void setCrms(CRMService crms) { > this.crms = crms; > System.out.println(crms.getClass()); > System.out.println(crms.toString()); > System.out.println(crms instanceof BindingProvider); > } > ... > {code} > Problem: > The problem is that crms proxy, injected into TestClass, implements only > org.talend.services.crmservice.CRMService. > The proxy calls methods of org.apache.cxf.jaxws.JaxWsClientProxy which > implements javax.xml.ws.BindingProvider interface. I expect that crms proxy > also implements javax.xml.ws.BindingProvider, but it is not the case. I have > the following output from setCrms: > class com.sun.proxy.$Proxy151 > org.apache.cxf.jaxws.JaxWsClientProxy@c3f8b42 > false > The proxy calls toString() method of JaxWsClientProxy, but it is not instance > of BindingProvider interface. The problem is that this proxy is not jax-ws > compatible, because spec requires that all proxies implementing > BindingProvider interface. > Interesting that Spring DM proxy hasn't such problem: it implements > BindingProvider interface in this scenario. > Is it Blueprint problem? (seems to be true for me) > Is there way to fix this in Blueprint? > Regards, > Andrei. -- This message was sent by Atlassian JIRA (v6.1.4#6159)