You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomee.apache.org by Jacek Laskowski <ja...@japila.pl> on 2014/01/12 13:44:09 UTC

Re: svn commit: r1557507 - in /tomee/tomee/trunk/server/openejb-cxf/src: main/java/org/apache/openejb/server/cxf/pojo/PojoEndpoint.java test/java/org/apache/openejb/server/cxf/CdiPojoTest.java

Hi,

Is the feature of "jaxws endpoints as cdi beans" something
TomEE-specific or spec-compliant? What spec would that feature be
described in?

Jacek

On Sun, Jan 12, 2014 at 10:48 AM,  <rm...@apache.org> wrote:
> Author: rmannibucau
> Date: Sun Jan 12 09:48:00 2014
> New Revision: 1557507
>
> URL: http://svn.apache.org/r1557507
> Log:
> TOMEE-1105 jaxws endpoints as cdi beans
>
> Added:
>     tomee/tomee/trunk/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/CdiPojoTest.java
>       - copied, changed from r1556736, tomee/tomee/trunk/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/PojoWebServiceContextTest.java
> Modified:
>     tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoEndpoint.java
>
> Modified: tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoEndpoint.java
> URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoEndpoint.java?rev=1557507&r1=1557506&r2=1557507&view=diff
> ==============================================================================
> --- tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoEndpoint.java (original)
> +++ tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoEndpoint.java Sun Jan 12 09:48:00 2014
> @@ -29,12 +29,24 @@ import org.apache.cxf.transport.http.HTT
>  import org.apache.openejb.Injection;
>  import org.apache.openejb.InjectionProcessor;
>  import org.apache.openejb.assembler.classic.util.ServiceConfiguration;
> +import org.apache.openejb.cdi.CdiAppContextsService;
>  import org.apache.openejb.core.webservices.JaxWsUtils;
>  import org.apache.openejb.core.webservices.PortData;
>  import org.apache.openejb.server.cxf.CxfEndpoint;
>  import org.apache.openejb.server.cxf.CxfServiceConfiguration;
>  import org.apache.openejb.server.cxf.JaxWsImplementorInfoImpl;
> -
> +import org.apache.openejb.util.LogCategory;
> +import org.apache.openejb.util.Logger;
> +import org.apache.webbeans.component.AbstractOwbBean;
> +import org.apache.webbeans.config.WebBeansContext;
> +import org.apache.webbeans.container.BeanManagerImpl;
> +import org.apache.webbeans.context.creational.CreationalContextImpl;
> +import org.apache.webbeans.util.WebBeansUtil;
> +
> +import javax.enterprise.context.Dependent;
> +import javax.enterprise.inject.spi.Bean;
> +import javax.enterprise.inject.spi.InjectionTarget;
> +import javax.enterprise.inject.spi.Producer;
>  import javax.naming.Context;
>  import javax.xml.ws.WebServiceContext;
>  import javax.xml.ws.WebServiceException;
> @@ -42,10 +54,12 @@ import java.lang.reflect.Type;
>  import java.util.Iterator;
>  import java.util.List;
>  import java.util.Map;
> +import java.util.Set;
>
>  import static org.apache.openejb.InjectionProcessor.unwrap;
>
>  public class PojoEndpoint extends CxfEndpoint {
> +    private static final Logger LOGGER = Logger.getInstance(LogCategory.CXF, PojoEndpoint.class);
>      private static final WebServiceContextResourceResolver WEB_SERVICE_CONTEXT_RESOURCE_RESOLVER = new WebServiceContextResourceResolver();
>
>      private final ResourceInjector injector;
> @@ -53,7 +67,7 @@ public class PojoEndpoint extends CxfEnd
>      public PojoEndpoint(ClassLoader loader, Bus bus, PortData port, Context context, Class<?> instance,
>                          HTTPTransportFactory httpTransportFactory,
>                          Map<String, Object> bindings, ServiceConfiguration config) {
> -       super(bus, port, context, instance, httpTransportFactory, config);
> +        super(bus, port, context, instance, httpTransportFactory, config);
>
>          String bindingURI = null;
>          if (port.getBindingID() != null) {
> @@ -81,21 +95,67 @@ public class PojoEndpoint extends CxfEnd
>              }
>          }
>
> +        ResourceInjector injector = null;
> +
>          // instantiate and inject resources into service using the app classloader to be sure to get the right InitialContext
> +        implementor = null;
> +
>          final ClassLoader old = Thread.currentThread().getContextClassLoader();
>          Thread.currentThread().setContextClassLoader(loader);
>          try {
> -            final InjectionProcessor<Object> injectionProcessor = new InjectionProcessor<Object>(instance, port.getInjections(), null, null, unwrap(context), bindings);
> -            injectionProcessor.createInstance();
> -            implementor = injectionProcessor.getInstance();
> -            injector = injectCxfResources(implementor);
> -            injector.invokePostConstruct();
> +            final WebBeansContext webBeansContext = WebBeansContext.currentInstance();
> +            final BeanManagerImpl bm = webBeansContext.getBeanManagerImpl();
> +            if (bm.isInUse()) { // try cdi bean
> +                try {
> +                    final Set<Bean<?>> beans = bm.getBeans(instance);
> +                    final Bean<?> bean = bm.resolve(beans);
> +                    CreationalContextImpl creationalContext = bm.createCreationalContext(bean);
> +                    if (bean != null) {
> +                        Bean<?> oldBean = creationalContext.putBean(bean);
> +                        try {
> +                            if (AbstractOwbBean.class.isInstance(bean)) {
> +                                final AbstractOwbBean<?> aob = AbstractOwbBean.class.cast(bean);
> +
> +                                final Producer producer = aob.getProducer();
> +                                implementor = producer.produce(creationalContext);
> +                                if (producer instanceof InjectionTarget) {
> +                                    final InjectionTarget injectionTarget = (InjectionTarget) producer;
> +                                    injectionTarget.inject(implementor, creationalContext);
> +                                    injector = injectCxfResources(implementor); // we need it before postconstruct
> +                                    injectionTarget.postConstruct(implementor);
> +                                }
> +                                if (aob.getScope().equals(Dependent.class)) {
> +                                    creationalContext.addDependent(aob, instance);
> +                                }
> +                            }
> +                        } finally {
> +                            creationalContext.putBean(oldBean);
> +                        }
> +                    } else {
> +                        implementor = bm.getReference(bean, instance, creationalContext);
> +                        injector = injectCxfResources(implementor);
> +                    }
> +                    if (WebBeansUtil.isDependent(bean)) { // should be isPseudoScope but should be ok for jaxws
> +                        CdiAppContextsService.pushRequestReleasable(new RealeaseCreationalContextRunnable(creationalContext));
> +                    }
> +                } catch (final Exception ie) {
> +                    LOGGER.info("Can't use cdi to create " + instance + " webservice: " + ie.getMessage());
> +                }
> +            }
> +            if (implementor == null) { // old pojo style
> +                final InjectionProcessor<Object> injectionProcessor = new InjectionProcessor<Object>(instance, port.getInjections(), null, null, unwrap(context), bindings);
> +                injectionProcessor.createInstance();
> +                implementor = injectionProcessor.getInstance();
> +                injector = injectCxfResources(implementor);
> +                injector.invokePostConstruct();
> +            }
>          } catch (final Exception e) {
>              throw new WebServiceException("Service resource injection failed", e);
>          } finally {
>              Thread.currentThread().setContextClassLoader(old);
>          }
>
> +        this.injector = injector;
>          service.setInvoker(new JAXWSMethodInvoker(implementor));
>      }
>
> @@ -141,4 +201,17 @@ public class PojoEndpoint extends CxfEnd
>          // shutdown server
>          super.stop();
>      }
> +
> +    private static class RealeaseCreationalContextRunnable implements Runnable {
> +        private final CreationalContextImpl<?> cc;
> +
> +        public RealeaseCreationalContextRunnable(final CreationalContextImpl<?> creationalContext) {
> +            this.cc = creationalContext;
> +        }
> +
> +        @Override
> +        public void run() {
> +            cc.release();
> +        }
> +    }
>  }
>
> Copied: tomee/tomee/trunk/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/CdiPojoTest.java (from r1556736, tomee/tomee/trunk/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/PojoWebServiceContextTest.java)
> URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/CdiPojoTest.java?p2=tomee/tomee/trunk/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/CdiPojoTest.java&p1=tomee/tomee/trunk/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/PojoWebServiceContextTest.java&r1=1556736&r2=1557507&rev=1557507&view=diff
> ==============================================================================
> --- tomee/tomee/trunk/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/PojoWebServiceContextTest.java (original)
> +++ tomee/tomee/trunk/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/CdiPojoTest.java Sun Jan 12 09:48:00 2014
> @@ -18,6 +18,7 @@ package org.apache.openejb.server.cxf;
>
>  import org.apache.openejb.jee.WebApp;
>  import org.apache.openejb.junit.ApplicationComposer;
> +import org.apache.openejb.testing.Classes;
>  import org.apache.openejb.testing.EnableServices;
>  import org.apache.openejb.testing.Module;
>  import org.junit.Test;
> @@ -25,22 +26,39 @@ import org.junit.runner.RunWith;
>
>  import javax.annotation.PostConstruct;
>  import javax.annotation.Resource;
> +import javax.inject.Inject;
>  import javax.jws.WebService;
> +import javax.xml.namespace.QName;
> +import javax.xml.ws.Service;
>  import javax.xml.ws.WebServiceContext;
>
> +import java.net.MalformedURLException;
> +import java.net.URL;
> +
> +import static org.junit.Assert.assertEquals;
>  import static org.junit.Assert.assertTrue;
>
>  @EnableServices("jax-ws")
>  @RunWith(ApplicationComposer.class)
> -public class PojoWebServiceContextTest {
> +public class CdiPojoTest {
>      @Module
> +    @Classes(value = { MyWebservice.class, ACdiTaste.class }, cdi = true)
>      public WebApp module() {
>          return new WebApp().contextRoot("/test").addServlet("ws", MyWebservice.class.getName(), "/ws");
>      }
>
>      @Test
> -    public void checkInjection() {
> -        assertTrue(MyWebservice.ok);
> +    public void checkInjection() throws MalformedURLException {
> +        final MyWsApi api = Service.create(new URL("http://localhost:4204/test/ws?wsdl"),
> +                                           new QName("http://cxf.server.openejb.apache.org/", "MyWebserviceService"))
> +                .getPort(MyWsApi.class);
> +        assertEquals("ok", api.test());
> +    }
> +
> +    public static class ACdiTaste {
> +        public String ok() {
> +            return "ok";
> +        }
>      }
>
>      @WebService
> @@ -50,19 +68,15 @@ public class PojoWebServiceContextTest {
>
>      @WebService
>      public static class MyWebservice implements MyWsApi {
> -        private static boolean ok = false;
> -
> -        @Resource
> -        private WebServiceContext ctx;
> -
> -        @PostConstruct
> -        public void check() {
> -            ok = ctx != null;
> -        }
> +        @Inject
> +        private ACdiTaste cdi;
>
>          @Override
>          public String test() {
> -            return "ok";
> +            if (cdi == null) {
> +                return "cdi injection failed";
> +            }
> +            return cdi.ok();
>          }
>      }
>  }
>
>



-- 
Jacek Laskowski
Functional languages (Clojure), Java EE, and IBM WebSphere -
http://blog.japila.pl
"Never discourage anyone who continually makes progress, no matter how
slow." Plato

Re: svn commit: r1557507 - in /tomee/tomee/trunk/server/openejb-cxf/src: main/java/org/apache/openejb/server/cxf/pojo/PojoEndpoint.java test/java/org/apache/openejb/server/cxf/CdiPojoTest.java

Posted by Romain Manni-Bucau <rm...@gmail.com>.
tomee specific I guess but just a general case of cdi injections in
jaxws endpoints, btw i have to cleanup this commit, will try in 1h
Romain Manni-Bucau
Twitter: @rmannibucau
Blog: http://rmannibucau.wordpress.com/
LinkedIn: http://fr.linkedin.com/in/rmannibucau
Github: https://github.com/rmannibucau



2014/1/12 Jacek Laskowski <ja...@japila.pl>:
> Hi,
>
> Is the feature of "jaxws endpoints as cdi beans" something
> TomEE-specific or spec-compliant? What spec would that feature be
> described in?
>
> Jacek
>
> On Sun, Jan 12, 2014 at 10:48 AM,  <rm...@apache.org> wrote:
>> Author: rmannibucau
>> Date: Sun Jan 12 09:48:00 2014
>> New Revision: 1557507
>>
>> URL: http://svn.apache.org/r1557507
>> Log:
>> TOMEE-1105 jaxws endpoints as cdi beans
>>
>> Added:
>>     tomee/tomee/trunk/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/CdiPojoTest.java
>>       - copied, changed from r1556736, tomee/tomee/trunk/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/PojoWebServiceContextTest.java
>> Modified:
>>     tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoEndpoint.java
>>
>> Modified: tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoEndpoint.java
>> URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoEndpoint.java?rev=1557507&r1=1557506&r2=1557507&view=diff
>> ==============================================================================
>> --- tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoEndpoint.java (original)
>> +++ tomee/tomee/trunk/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/pojo/PojoEndpoint.java Sun Jan 12 09:48:00 2014
>> @@ -29,12 +29,24 @@ import org.apache.cxf.transport.http.HTT
>>  import org.apache.openejb.Injection;
>>  import org.apache.openejb.InjectionProcessor;
>>  import org.apache.openejb.assembler.classic.util.ServiceConfiguration;
>> +import org.apache.openejb.cdi.CdiAppContextsService;
>>  import org.apache.openejb.core.webservices.JaxWsUtils;
>>  import org.apache.openejb.core.webservices.PortData;
>>  import org.apache.openejb.server.cxf.CxfEndpoint;
>>  import org.apache.openejb.server.cxf.CxfServiceConfiguration;
>>  import org.apache.openejb.server.cxf.JaxWsImplementorInfoImpl;
>> -
>> +import org.apache.openejb.util.LogCategory;
>> +import org.apache.openejb.util.Logger;
>> +import org.apache.webbeans.component.AbstractOwbBean;
>> +import org.apache.webbeans.config.WebBeansContext;
>> +import org.apache.webbeans.container.BeanManagerImpl;
>> +import org.apache.webbeans.context.creational.CreationalContextImpl;
>> +import org.apache.webbeans.util.WebBeansUtil;
>> +
>> +import javax.enterprise.context.Dependent;
>> +import javax.enterprise.inject.spi.Bean;
>> +import javax.enterprise.inject.spi.InjectionTarget;
>> +import javax.enterprise.inject.spi.Producer;
>>  import javax.naming.Context;
>>  import javax.xml.ws.WebServiceContext;
>>  import javax.xml.ws.WebServiceException;
>> @@ -42,10 +54,12 @@ import java.lang.reflect.Type;
>>  import java.util.Iterator;
>>  import java.util.List;
>>  import java.util.Map;
>> +import java.util.Set;
>>
>>  import static org.apache.openejb.InjectionProcessor.unwrap;
>>
>>  public class PojoEndpoint extends CxfEndpoint {
>> +    private static final Logger LOGGER = Logger.getInstance(LogCategory.CXF, PojoEndpoint.class);
>>      private static final WebServiceContextResourceResolver WEB_SERVICE_CONTEXT_RESOURCE_RESOLVER = new WebServiceContextResourceResolver();
>>
>>      private final ResourceInjector injector;
>> @@ -53,7 +67,7 @@ public class PojoEndpoint extends CxfEnd
>>      public PojoEndpoint(ClassLoader loader, Bus bus, PortData port, Context context, Class<?> instance,
>>                          HTTPTransportFactory httpTransportFactory,
>>                          Map<String, Object> bindings, ServiceConfiguration config) {
>> -       super(bus, port, context, instance, httpTransportFactory, config);
>> +        super(bus, port, context, instance, httpTransportFactory, config);
>>
>>          String bindingURI = null;
>>          if (port.getBindingID() != null) {
>> @@ -81,21 +95,67 @@ public class PojoEndpoint extends CxfEnd
>>              }
>>          }
>>
>> +        ResourceInjector injector = null;
>> +
>>          // instantiate and inject resources into service using the app classloader to be sure to get the right InitialContext
>> +        implementor = null;
>> +
>>          final ClassLoader old = Thread.currentThread().getContextClassLoader();
>>          Thread.currentThread().setContextClassLoader(loader);
>>          try {
>> -            final InjectionProcessor<Object> injectionProcessor = new InjectionProcessor<Object>(instance, port.getInjections(), null, null, unwrap(context), bindings);
>> -            injectionProcessor.createInstance();
>> -            implementor = injectionProcessor.getInstance();
>> -            injector = injectCxfResources(implementor);
>> -            injector.invokePostConstruct();
>> +            final WebBeansContext webBeansContext = WebBeansContext.currentInstance();
>> +            final BeanManagerImpl bm = webBeansContext.getBeanManagerImpl();
>> +            if (bm.isInUse()) { // try cdi bean
>> +                try {
>> +                    final Set<Bean<?>> beans = bm.getBeans(instance);
>> +                    final Bean<?> bean = bm.resolve(beans);
>> +                    CreationalContextImpl creationalContext = bm.createCreationalContext(bean);
>> +                    if (bean != null) {
>> +                        Bean<?> oldBean = creationalContext.putBean(bean);
>> +                        try {
>> +                            if (AbstractOwbBean.class.isInstance(bean)) {
>> +                                final AbstractOwbBean<?> aob = AbstractOwbBean.class.cast(bean);
>> +
>> +                                final Producer producer = aob.getProducer();
>> +                                implementor = producer.produce(creationalContext);
>> +                                if (producer instanceof InjectionTarget) {
>> +                                    final InjectionTarget injectionTarget = (InjectionTarget) producer;
>> +                                    injectionTarget.inject(implementor, creationalContext);
>> +                                    injector = injectCxfResources(implementor); // we need it before postconstruct
>> +                                    injectionTarget.postConstruct(implementor);
>> +                                }
>> +                                if (aob.getScope().equals(Dependent.class)) {
>> +                                    creationalContext.addDependent(aob, instance);
>> +                                }
>> +                            }
>> +                        } finally {
>> +                            creationalContext.putBean(oldBean);
>> +                        }
>> +                    } else {
>> +                        implementor = bm.getReference(bean, instance, creationalContext);
>> +                        injector = injectCxfResources(implementor);
>> +                    }
>> +                    if (WebBeansUtil.isDependent(bean)) { // should be isPseudoScope but should be ok for jaxws
>> +                        CdiAppContextsService.pushRequestReleasable(new RealeaseCreationalContextRunnable(creationalContext));
>> +                    }
>> +                } catch (final Exception ie) {
>> +                    LOGGER.info("Can't use cdi to create " + instance + " webservice: " + ie.getMessage());
>> +                }
>> +            }
>> +            if (implementor == null) { // old pojo style
>> +                final InjectionProcessor<Object> injectionProcessor = new InjectionProcessor<Object>(instance, port.getInjections(), null, null, unwrap(context), bindings);
>> +                injectionProcessor.createInstance();
>> +                implementor = injectionProcessor.getInstance();
>> +                injector = injectCxfResources(implementor);
>> +                injector.invokePostConstruct();
>> +            }
>>          } catch (final Exception e) {
>>              throw new WebServiceException("Service resource injection failed", e);
>>          } finally {
>>              Thread.currentThread().setContextClassLoader(old);
>>          }
>>
>> +        this.injector = injector;
>>          service.setInvoker(new JAXWSMethodInvoker(implementor));
>>      }
>>
>> @@ -141,4 +201,17 @@ public class PojoEndpoint extends CxfEnd
>>          // shutdown server
>>          super.stop();
>>      }
>> +
>> +    private static class RealeaseCreationalContextRunnable implements Runnable {
>> +        private final CreationalContextImpl<?> cc;
>> +
>> +        public RealeaseCreationalContextRunnable(final CreationalContextImpl<?> creationalContext) {
>> +            this.cc = creationalContext;
>> +        }
>> +
>> +        @Override
>> +        public void run() {
>> +            cc.release();
>> +        }
>> +    }
>>  }
>>
>> Copied: tomee/tomee/trunk/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/CdiPojoTest.java (from r1556736, tomee/tomee/trunk/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/PojoWebServiceContextTest.java)
>> URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/CdiPojoTest.java?p2=tomee/tomee/trunk/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/CdiPojoTest.java&p1=tomee/tomee/trunk/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/PojoWebServiceContextTest.java&r1=1556736&r2=1557507&rev=1557507&view=diff
>> ==============================================================================
>> --- tomee/tomee/trunk/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/PojoWebServiceContextTest.java (original)
>> +++ tomee/tomee/trunk/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/CdiPojoTest.java Sun Jan 12 09:48:00 2014
>> @@ -18,6 +18,7 @@ package org.apache.openejb.server.cxf;
>>
>>  import org.apache.openejb.jee.WebApp;
>>  import org.apache.openejb.junit.ApplicationComposer;
>> +import org.apache.openejb.testing.Classes;
>>  import org.apache.openejb.testing.EnableServices;
>>  import org.apache.openejb.testing.Module;
>>  import org.junit.Test;
>> @@ -25,22 +26,39 @@ import org.junit.runner.RunWith;
>>
>>  import javax.annotation.PostConstruct;
>>  import javax.annotation.Resource;
>> +import javax.inject.Inject;
>>  import javax.jws.WebService;
>> +import javax.xml.namespace.QName;
>> +import javax.xml.ws.Service;
>>  import javax.xml.ws.WebServiceContext;
>>
>> +import java.net.MalformedURLException;
>> +import java.net.URL;
>> +
>> +import static org.junit.Assert.assertEquals;
>>  import static org.junit.Assert.assertTrue;
>>
>>  @EnableServices("jax-ws")
>>  @RunWith(ApplicationComposer.class)
>> -public class PojoWebServiceContextTest {
>> +public class CdiPojoTest {
>>      @Module
>> +    @Classes(value = { MyWebservice.class, ACdiTaste.class }, cdi = true)
>>      public WebApp module() {
>>          return new WebApp().contextRoot("/test").addServlet("ws", MyWebservice.class.getName(), "/ws");
>>      }
>>
>>      @Test
>> -    public void checkInjection() {
>> -        assertTrue(MyWebservice.ok);
>> +    public void checkInjection() throws MalformedURLException {
>> +        final MyWsApi api = Service.create(new URL("http://localhost:4204/test/ws?wsdl"),
>> +                                           new QName("http://cxf.server.openejb.apache.org/", "MyWebserviceService"))
>> +                .getPort(MyWsApi.class);
>> +        assertEquals("ok", api.test());
>> +    }
>> +
>> +    public static class ACdiTaste {
>> +        public String ok() {
>> +            return "ok";
>> +        }
>>      }
>>
>>      @WebService
>> @@ -50,19 +68,15 @@ public class PojoWebServiceContextTest {
>>
>>      @WebService
>>      public static class MyWebservice implements MyWsApi {
>> -        private static boolean ok = false;
>> -
>> -        @Resource
>> -        private WebServiceContext ctx;
>> -
>> -        @PostConstruct
>> -        public void check() {
>> -            ok = ctx != null;
>> -        }
>> +        @Inject
>> +        private ACdiTaste cdi;
>>
>>          @Override
>>          public String test() {
>> -            return "ok";
>> +            if (cdi == null) {
>> +                return "cdi injection failed";
>> +            }
>> +            return cdi.ok();
>>          }
>>      }
>>  }
>>
>>
>
>
>
> --
> Jacek Laskowski
> Functional languages (Clojure), Java EE, and IBM WebSphere -
> http://blog.japila.pl
> "Never discourage anyone who continually makes progress, no matter how
> slow." Plato