You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Davide Gesino <wi...@libero.it> on 2008/02/27 09:31:54 UTC
WebServiceContext not injected in endpoint
trying customizing the JAxWSMethodInvoker I have problems injecting the web
service context with the @Resource annotation.
Maybe there's something wrong in what I am doing, maybe it could be a bug.
Assume you have a GreeterImpl endpoint with the web service context
injected.
Try the following:
case 1
ScopePolicy policy = ApplicationScopePolicy.instance();
// trying with the following is the same:
// ScopePolicy policy = RequestScopePolicy.instance();
org.apache.cxf.common.util.factory.Factory factory= new
LocalFactory(GreeterImpl.class);
JAXWSMethodInvoker invoker = new JAXWSMethodInvoker(fattorazza, policy);
JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();
factoryBean.setAddress(address);
factoryBean.setServiceBean(implementor);
factoryBean.setInvoker(invoker);
factoryBean.create();
case 2
Endpoint.publish(address,implementor);
the endpoint
public class GreeterImpl implements Greeter {
@Resource
private WebServiceContext context;
public java.lang.String greetMe(java.lang.String requestType) {
if (context != null) {
// in case 1 it is null, in case 2 it is !=null
}
return "hello "+ requestType;
}
in case 1 the method invocation works fine, but the context is not injected,
while in case 2 the context is injected.
where is the fault?
Davide
--
View this message in context: http://www.nabble.com/WebServiceContext-not-injected-in-endpoint-tp15708465p15708465.html
Sent from the cxf-user mailing list archive at Nabble.com.
Re: WebServiceContext not injected in endpoint
Posted by Davide Gesino <wi...@libero.it>.
OK! As soon as I can I'll try CXF 2.1 and I'll send you a feedback!
Thanks.
Davide
--
View this message in context: http://www.nabble.com/WebServiceContext-not-injected-in-endpoint-tp15708465p15731308.html
Sent from the cxf-user mailing list archive at Nabble.com.
Re: WebServiceContext not injected in endpoint
Posted by Daniel Kulp <dk...@apache.org>.
On Friday 29 February 2008, Davide Gesino wrote:
> I have tried the new snapshot (release 35) with different factories,
> and definetively now everything works fine.
> The pooled factory is pretty cool!!!
Thanks for confirming that it works. :-)
I've been thinking about this more and the new factories allow a lot of
really cool things that couldn't be done before. With the exchange
available, you could easily write a factory that pulls out some
information (like maybe a url flag like ?user=1234 or a soap header or
something) and actually create/fill in some state into an object. Then
persist it when the invoke is done. Definitely some cool things can
be done.
--
J. Daniel Kulp
Principal Engineer, IONA
dkulp@apache.org
http://www.dankulp.com/blog
Re: WebServiceContext not injected in endpoint
Posted by Davide Gesino <wi...@libero.it>.
I have tried the new snapshot (release 35) with different factories, and
definetively now everything works fine.
The pooled factory is pretty cool!!!
thanks.
Davide
--
View this message in context: http://www.nabble.com/WebServiceContext-not-injected-in-endpoint-tp15708465p15758714.html
Sent from the cxf-user mailing list archive at Nabble.com.
Re: WebServiceContext not injected in endpoint
Posted by Daniel Kulp <dk...@apache.org>.
Ok. Fixed and a new snapshot deployed.
Dan
On Thursday 28 February 2008, Daniel Kulp wrote:
> Never mind, this is definitely not working. Looking into it.
>
> Dan
>
> On Thursday 28 February 2008, Daniel Kulp wrote:
> > Davide,
> >
> > How is your bus/cxf stuff configured? Are you using the defaults or
> > are you specifically using the spring imports to import very
> > specific things?
> >
> > If it's the latter, you will need to import:
> > META-INF/cxf/cxf-extension-jaxws.xml
> > as well.
> >
> > If it's the former, that sounds like a problem. I'll try digging
> > into this a little bit....
> >
> > Dan
> >
> > On Thursday 28 February 2008, Davide Gesino wrote:
> > > willem.jiang wrote:
> > > > After went through the JaxWsServerFactoryBean codes, I think you
> > > > need to modify the invoker factory construction argument.
> > > >
> > > > Here are the codes.
> > > >
> > > > Object implementor = new GreeterImpl();
> > > > String address = "http://localhost:9000/SoapContext/SoapPort";
> > > >
> > > > org.apache.cxf.service.invoker.Factory factory = new
> > > > org.apache.cxf.service.invoker.SingletonFactory(implementor);
> > > > JAXWSMethodInvoker invoker = new JAXWSMethodInvoker(factory);
> > > > JaxWsServerFactoryBean factoryBean = new
> > > > JaxWsServerFactoryBean(); factoryBean.setAddress(address);
> > > > factoryBean.setServiceBean(implementor);
> > > > factoryBean.setInvoker(invoker);
> > > > factoryBean.create();
> > >
> > > Thanks Willem, actually it works!
> > > Anyway if I change factory and I use the PerSessionFactory or the
> > > PooledFactory I always have that the session context is always not
> > > injected.
> > >
> > > org.apache.cxf.service.invoker.Factory factory = new
> > > org.apache.cxf.service.invoker.PooledFactory(GreeterImpl.class,16)
> > >;
> > >
> > > org.apache.cxf.service.invoker.Factory factory = new
> > > org.apache.cxf.service.invoker.PerSessionFactory(GreeterImpl.class
> > >);
--
J. Daniel Kulp
Principal Engineer, IONA
dkulp@apache.org
http://www.dankulp.com/blog
Re: WebServiceContext not injected in endpoint
Posted by Daniel Kulp <dk...@apache.org>.
Never mind, this is definitely not working. Looking into it.
Dan
On Thursday 28 February 2008, Daniel Kulp wrote:
> Davide,
>
> How is your bus/cxf stuff configured? Are you using the defaults or
> are you specifically using the spring imports to import very specific
> things?
>
> If it's the latter, you will need to import:
> META-INF/cxf/cxf-extension-jaxws.xml
> as well.
>
> If it's the former, that sounds like a problem. I'll try digging into
> this a little bit....
>
> Dan
>
> On Thursday 28 February 2008, Davide Gesino wrote:
> > willem.jiang wrote:
> > > After went through the JaxWsServerFactoryBean codes, I think you
> > > need to modify the invoker factory construction argument.
> > >
> > > Here are the codes.
> > >
> > > Object implementor = new GreeterImpl();
> > > String address = "http://localhost:9000/SoapContext/SoapPort";
> > >
> > > org.apache.cxf.service.invoker.Factory factory = new
> > > org.apache.cxf.service.invoker.SingletonFactory(implementor);
> > > JAXWSMethodInvoker invoker = new JAXWSMethodInvoker(factory);
> > > JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();
> > > factoryBean.setAddress(address);
> > > factoryBean.setServiceBean(implementor);
> > > factoryBean.setInvoker(invoker);
> > > factoryBean.create();
> >
> > Thanks Willem, actually it works!
> > Anyway if I change factory and I use the PerSessionFactory or the
> > PooledFactory I always have that the session context is always not
> > injected.
> >
> > org.apache.cxf.service.invoker.Factory factory = new
> > org.apache.cxf.service.invoker.PooledFactory(GreeterImpl.class,16);
> >
> > org.apache.cxf.service.invoker.Factory factory = new
> > org.apache.cxf.service.invoker.PerSessionFactory(GreeterImpl.class);
--
J. Daniel Kulp
Principal Engineer, IONA
dkulp@apache.org
http://www.dankulp.com/blog
Re: WebServiceContext not injected in endpoint
Posted by Daniel Kulp <dk...@apache.org>.
Davide,
How is your bus/cxf stuff configured? Are you using the defaults or are
you specifically using the spring imports to import very specific
things?
If it's the latter, you will need to import:
META-INF/cxf/cxf-extension-jaxws.xml
as well.
If it's the former, that sounds like a problem. I'll try digging into
this a little bit....
Dan
On Thursday 28 February 2008, Davide Gesino wrote:
> willem.jiang wrote:
> > After went through the JaxWsServerFactoryBean codes, I think you
> > need to modify the invoker factory construction argument.
> >
> > Here are the codes.
> >
> > Object implementor = new GreeterImpl();
> > String address = "http://localhost:9000/SoapContext/SoapPort";
> >
> > org.apache.cxf.service.invoker.Factory factory = new
> > org.apache.cxf.service.invoker.SingletonFactory(implementor);
> > JAXWSMethodInvoker invoker = new JAXWSMethodInvoker(factory);
> > JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();
> > factoryBean.setAddress(address);
> > factoryBean.setServiceBean(implementor);
> > factoryBean.setInvoker(invoker);
> > factoryBean.create();
>
> Thanks Willem, actually it works!
> Anyway if I change factory and I use the PerSessionFactory or the
> PooledFactory I always have that the session context is always not
> injected.
>
> org.apache.cxf.service.invoker.Factory factory = new
> org.apache.cxf.service.invoker.PooledFactory(GreeterImpl.class,16);
>
> org.apache.cxf.service.invoker.Factory factory = new
> org.apache.cxf.service.invoker.PerSessionFactory(GreeterImpl.class);
--
J. Daniel Kulp
Principal Engineer, IONA
dkulp@apache.org
http://www.dankulp.com/blog
Re: WebServiceContext not injected in endpoint
Posted by Davide Gesino <wi...@libero.it>.
willem.jiang wrote:
>
>
> After went through the JaxWsServerFactoryBean codes, I think you need to
> modify the invoker factory construction argument.
>
> Here are the codes.
>
> Object implementor = new GreeterImpl();
> String address = "http://localhost:9000/SoapContext/SoapPort";
>
> org.apache.cxf.service.invoker.Factory factory = new
> org.apache.cxf.service.invoker.SingletonFactory(implementor);
> JAXWSMethodInvoker invoker = new JAXWSMethodInvoker(factory);
> JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();
> factoryBean.setAddress(address);
> factoryBean.setServiceBean(implementor);
> factoryBean.setInvoker(invoker);
> factoryBean.create();
>
>
Thanks Willem, actually it works!
Anyway if I change factory and I use the PerSessionFactory or the
PooledFactory I always have that the session context is always not injected.
org.apache.cxf.service.invoker.Factory factory = new
org.apache.cxf.service.invoker.PooledFactory(GreeterImpl.class,16);
org.apache.cxf.service.invoker.Factory factory = new
org.apache.cxf.service.invoker.PerSessionFactory(GreeterImpl.class);
--
View this message in context: http://www.nabble.com/WebServiceContext-not-injected-in-endpoint-tp15708465p15735721.html
Sent from the cxf-user mailing list archive at Nabble.com.
Re: WebServiceContext not injected in endpoint
Posted by Willem Jiang <wi...@gmail.com>.
Hi Davide,
After went through the JaxWsServerFactoryBean codes, I think you need to
modify the invoker factory construction argument.
Here are the codes.
Object implementor = new GreeterImpl();
String address = "http://localhost:9000/SoapContext/SoapPort";
org.apache.cxf.service.invoker.Factory factory = new
org.apache.cxf.service.invoker.SingletonFactory(implementor);
JAXWSMethodInvoker invoker = new JAXWSMethodInvoker(factory);
JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();
factoryBean.setAddress(address);
factoryBean.setServiceBean(implementor);
factoryBean.setInvoker(invoker);
factoryBean.create();
Willem
Davide Gesino wrote:
> Hi Dan,
>
> I have used this CXF 2.1 snapshot.
> apache-cxf-2.1-incubator-20080228.032802-34.zip 28-Feb-2008 04:16 24M
> I have tried this code, and actually the context is not injected. maybe I am
> doing something wrong.
> With the SingletonFactory it happens the same. Maybe the fault is the way I
> create the service.
> Anyway the creation policy works fine, with the PerSessionFactory I have a
> brand new instance created for each request I get.
>
> Here is the code:
>
> Object implementor = new GreeterImpl();
> String address = "http://localhost:9000/SoapContext/SoapPort";
> org.apache.cxf.service.invoker.Factory factory = new
> org.apache.cxf.service.invoker.PerRequestFactory(GreeterImpl.class);
> org.apache.cxf.service.invoker.Factory factory = new
> org.apache.cxf.service.invoker.SingletonFactory(GreeterImpl.class);
> JAXWSMethodInvoker invoker = new JAXWSMethodInvoker(factory);
> JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();
> factoryBean.setAddress(address);
> factoryBean.setServiceBean(implementor);
> factoryBean.setInvoker(invoker);
> factoryBean.create();
>
> @javax.jws.WebService(name = "Greeter", serviceName = "SOAPService",
> portName = "SoapPort", targetNamespace =
> "http://apache.org/hello_world_soap_http", wsdlLocation =
> "hello_world.wsdl", endpointInterface =
> "org.apache.hello_world_soap_http.Greeter")
> public class GreeterImpl implements Greeter {
>
> @Resource
> private WebServiceContext context;
>
> public java.lang.String greetMe(java.lang.String requestType) {
> LOG.info("Executing operation greetMe");
>
> System.out.println(requestType);
>
> if (context != null) {
> System.out.println("context properly injected!!!!");
> }
> else System.out.println("context properly is null!!!!!!");
> return "hello my dear";
> }
>
>
>
Re: WebServiceContext not injected in endpoint
Posted by adekar <am...@acm.org>.
Hi,
Can someone please share a full cxf xml where the JaxWsServerFactoryBean is
configured with a PerRequestFactory. I want to migrate my xfire web service
to cxf because I want to use the PerRequestFactory support.
Thanks in advance.
leewill wrote:
>
> As a matter of fact, it works for even 2.0.4. I tried it yesterday, this
> context got injected and I could get request back indirectly from it.
> Well, I used Spring bean for all my test.
>
>
> On 2/28/08 3:07 AM, "Davide Gesino" <wi...@libero.it> wrote:
>
>
>
> Hi Dan,
>
> I have used this CXF 2.1 snapshot.
> apache-cxf-2.1-incubator-20080228.032802-34.zip 28-Feb-2008 04:16 24M
> I have tried this code, and actually the context is not injected. maybe I
> am
> doing something wrong.
> With the SingletonFactory it happens the same. Maybe the fault is the way
> I
> create the service.
> Anyway the creation policy works fine, with the PerSessionFactory I have a
> brand new instance created for each request I get.
>
> Here is the code:
>
> Object implementor = new GreeterImpl();
> String address = "http://localhost:9000/SoapContext/SoapPort";
> org.apache.cxf.service.invoker.Factory factory = new
> org.apache.cxf.service.invoker.PerRequestFactory(GreeterImpl.class);
> org.apache.cxf.service.invoker.Factory factory = new
> org.apache.cxf.service.invoker.SingletonFactory(GreeterImpl.class);
> JAXWSMethodInvoker invoker = new JAXWSMethodInvoker(factory);
> JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();
> factoryBean.setAddress(address);
> factoryBean.setServiceBean(implementor);
> factoryBean.setInvoker(invoker);
> factoryBean.create();
>
> @javax.jws.WebService(name = "Greeter", serviceName = "SOAPService",
> portName = "SoapPort", targetNamespace =
> "http://apache.org/hello_world_soap_http", wsdlLocation =
> "hello_world.wsdl", endpointInterface =
> "org.apache.hello_world_soap_http.Greeter")
> public class GreeterImpl implements Greeter {
>
> @Resource
> private WebServiceContext context;
>
> public java.lang.String greetMe(java.lang.String requestType) {
> LOG.info("Executing operation greetMe");
>
> System.out.println(requestType);
>
> if (context != null) {
> System.out.println("context properly
> injected!!!!");
> }
> else System.out.println("context properly is
> null!!!!!!");
> return "hello my dear";
> }
>
>
> --
> View this message in context:
> http://www.nabble.com/WebServiceContext-not-injected-in-endpoint-tp15708465p15732342.html
> Sent from the cxf-user mailing list archive at Nabble.com.
>
>
>
>
>
>
>
--
View this message in context: http://www.nabble.com/WebServiceContext-not-injected-in-endpoint-tp15708465p16102008.html
Sent from the cxf-user mailing list archive at Nabble.com.
Re: WebServiceContext not injected in endpoint
Posted by "Li, Weiye" <We...@STJUDE.ORG>.
As a matter of fact, it works for even 2.0.4. I tried it yesterday, this context got injected and I could get request back indirectly from it.
Well, I used Spring bean for all my test.
On 2/28/08 3:07 AM, "Davide Gesino" <wi...@libero.it> wrote:
Hi Dan,
I have used this CXF 2.1 snapshot.
apache-cxf-2.1-incubator-20080228.032802-34.zip 28-Feb-2008 04:16 24M
I have tried this code, and actually the context is not injected. maybe I am
doing something wrong.
With the SingletonFactory it happens the same. Maybe the fault is the way I
create the service.
Anyway the creation policy works fine, with the PerSessionFactory I have a
brand new instance created for each request I get.
Here is the code:
Object implementor = new GreeterImpl();
String address = "http://localhost:9000/SoapContext/SoapPort";
org.apache.cxf.service.invoker.Factory factory = new
org.apache.cxf.service.invoker.PerRequestFactory(GreeterImpl.class);
org.apache.cxf.service.invoker.Factory factory = new
org.apache.cxf.service.invoker.SingletonFactory(GreeterImpl.class);
JAXWSMethodInvoker invoker = new JAXWSMethodInvoker(factory);
JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();
factoryBean.setAddress(address);
factoryBean.setServiceBean(implementor);
factoryBean.setInvoker(invoker);
factoryBean.create();
@javax.jws.WebService(name = "Greeter", serviceName = "SOAPService",
portName = "SoapPort", targetNamespace =
"http://apache.org/hello_world_soap_http", wsdlLocation =
"hello_world.wsdl", endpointInterface =
"org.apache.hello_world_soap_http.Greeter")
public class GreeterImpl implements Greeter {
@Resource
private WebServiceContext context;
public java.lang.String greetMe(java.lang.String requestType) {
LOG.info("Executing operation greetMe");
System.out.println(requestType);
if (context != null) {
System.out.println("context properly injected!!!!");
}
else System.out.println("context properly is null!!!!!!");
return "hello my dear";
}
--
View this message in context: http://www.nabble.com/WebServiceContext-not-injected-in-endpoint-tp15708465p15732342.html
Sent from the cxf-user mailing list archive at Nabble.com.
Re: WebServiceContext not injected in endpoint
Posted by Davide Gesino <wi...@libero.it>.
Hi Dan,
I have used this CXF 2.1 snapshot.
apache-cxf-2.1-incubator-20080228.032802-34.zip 28-Feb-2008 04:16 24M
I have tried this code, and actually the context is not injected. maybe I am
doing something wrong.
With the SingletonFactory it happens the same. Maybe the fault is the way I
create the service.
Anyway the creation policy works fine, with the PerSessionFactory I have a
brand new instance created for each request I get.
Here is the code:
Object implementor = new GreeterImpl();
String address = "http://localhost:9000/SoapContext/SoapPort";
org.apache.cxf.service.invoker.Factory factory = new
org.apache.cxf.service.invoker.PerRequestFactory(GreeterImpl.class);
org.apache.cxf.service.invoker.Factory factory = new
org.apache.cxf.service.invoker.SingletonFactory(GreeterImpl.class);
JAXWSMethodInvoker invoker = new JAXWSMethodInvoker(factory);
JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();
factoryBean.setAddress(address);
factoryBean.setServiceBean(implementor);
factoryBean.setInvoker(invoker);
factoryBean.create();
@javax.jws.WebService(name = "Greeter", serviceName = "SOAPService",
portName = "SoapPort", targetNamespace =
"http://apache.org/hello_world_soap_http", wsdlLocation =
"hello_world.wsdl", endpointInterface =
"org.apache.hello_world_soap_http.Greeter")
public class GreeterImpl implements Greeter {
@Resource
private WebServiceContext context;
public java.lang.String greetMe(java.lang.String requestType) {
LOG.info("Executing operation greetMe");
System.out.println(requestType);
if (context != null) {
System.out.println("context properly injected!!!!");
}
else System.out.println("context properly is null!!!!!!");
return "hello my dear";
}
--
View this message in context: http://www.nabble.com/WebServiceContext-not-injected-in-endpoint-tp15708465p15732342.html
Sent from the cxf-user mailing list archive at Nabble.com.
Re: WebServiceContext not injected in endpoint
Posted by Daniel Kulp <dk...@apache.org>.
This is one of the many issues with the ScopePolicy/factory stuff which
is one of the reasons I eliminated the ScopePolicy stuff entirely from
the 2.1/trunk codebase. :-)
Is there any chance you could give the 2.1 snapshots a try? Configuring
your usecase will be SLIGHTLY different, but not by much:
org.apache.cxf.service.invoker.Factory factory = new
org.apache.cxf.service.invoker.PerRequestFactory(GreeterImpl.class);
JAXWSMethodInvoker invoker = new JAXWSMethodInvoker(factory);
.....
The newer Factory stuff, since it has access to the exchange at request
time, can get the bus and thus get the resources properly injected.
That said, the resource injection isn't "free" so that will add a small
amount of extra processing per request. Thus, you might want to use
the PooledFactory to maintain a pool of GreeterImpl objects or possibly
a SessionFactory to create one per session (assuming your clients honor
the session).
In anycase, with the 2.1 code the major bugs should be fixed and I'd LOVE
to see someone else test it a bit to makre sure. Basically, resources
should get injected and the pooled stuff should actually work.
Dan
On Wednesday 27 February 2008, Davide Gesino wrote:
> trying customizing the JAxWSMethodInvoker I have problems injecting
> the web service context with the @Resource annotation.
> Maybe there's something wrong in what I am doing, maybe it could be a
> bug.
>
> Assume you have a GreeterImpl endpoint with the web service context
> injected.
>
> Try the following:
>
> case 1
> ScopePolicy policy = ApplicationScopePolicy.instance();
> // trying with the following is the same:
> // ScopePolicy policy = RequestScopePolicy.instance();
> org.apache.cxf.common.util.factory.Factory factory= new
> LocalFactory(GreeterImpl.class);
> JAXWSMethodInvoker invoker = new JAXWSMethodInvoker(fattorazza,
> policy);
>
> JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();
> factoryBean.setAddress(address);
> factoryBean.setServiceBean(implementor);
> factoryBean.setInvoker(invoker);
> factoryBean.create();
>
> case 2
> Endpoint.publish(address,implementor);
>
> the endpoint
> public class GreeterImpl implements Greeter {
>
> @Resource
> private WebServiceContext context;
>
> public java.lang.String greetMe(java.lang.String requestType) {
>
>
> if (context != null) {
> // in case 1 it is null, in case 2 it is !=null
> }
>
>
> return "hello "+ requestType;
> }
>
> in case 1 the method invocation works fine, but the context is not
> injected, while in case 2 the context is injected.
>
> where is the fault?
>
> Davide
--
J. Daniel Kulp
Principal Engineer, IONA
dkulp@apache.org
http://www.dankulp.com/blog