[ 
https://issues.apache.org/jira/browse/ARIES-1140?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13847310#comment-13847310
 ] 

Andrei Shakirin commented on ARIES-1140:
----------------------------------------

Hi Richard,

No, org.talend.services.crmservice.CRMService itself doesn't extend 
javax.xml.ws.BindingProvider. However object created by <jaxws:client> is 
org.apache.cxf.jaxws.JaxWsClientProxy implementing javax.xml.ws.BindingProvider.

Yes, blueprint spec limited that very strictly:
"The proxy must only support the methods in the given interface. That is, it 
must not proxy methods available on the service object that are not available 
in the given interface. If no interface is defined, the proxy must be 
implemented as if the interface had no methods defined."

But in this case solution is not jax-ws compatible. Is there any other solution 
in addition to proposed by Dan?

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

Reply via email to