You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@aries.apache.org by "Andrei Shakirin (JIRA)" <ji...@apache.org> on 2013/12/12 16:30:08 UTC

[jira] [Created] (ARIES-1140) Injected java.lang.reflect.Proxy implements only single interface

Andrei Shakirin created ARIES-1140:
--------------------------------------

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



--
This message was sent by Atlassian JIRA
(v6.1.4#6159)

Re: [jira] [Created] (ARIES-1140) Injected java.lang.reflect.Proxy implements only single interface

Posted by Daniel Kulp <dk...@apache.org>.
On Dec 12, 2013, at 10:30 AM, Andrei Shakirin (JIRA) <ji...@apache.org> wrote:

> Andrei Shakirin created ARIES-1140:
> --------------------------------------
> 
>             Summary: 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:
> <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.
> 
> 
> 
> --
> This message was sent by Atlassian JIRA
> (v6.1.4#6159)

-- 
Daniel Kulp
dkulp@apache.org - http://dankulp.com/blog
Talend Community Coder - http://coders.talend.com