You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by "Pydipati, Karuna" <kp...@stubhub.com> on 2009/11/10 00:48:58 UTC
CXF and Custom Annotation
Hi
I have a weird issue. I have a JAX-WS java-first webservice using CXF
and Spring. I have WebServiceContext in my Implementer class. Here is
snippet of my Implementer class
@WebService(endpointInterface = "com.xxx.ws.soap.XXXService",
serviceName = "XXXService")
@WebFault(targetNamespace = "com.xxx.ws.soap", name = "XXXFault",
faultBean = "XXXFault")
public class XXXServiceImpl implements XXXService {
@Resource
private WebServiceContext webServiceContext;
@Throttle
public PatientMatchResp getSomeMethod()
throws ApplicationFault {
....
....
....
}
I have a custom annotation @Throttle and would like to do some work
(basically throttling the method such as way that this service is not
abused by users when exposed to public) on that method using Spring AOP.
1) My issue is when I started my Tomcat with this implementation, I am
getting this error. Again, this is at the startup time of Tomcat time.
Not at some invocation of webservice time. If I comment either
WebServiceContext OR @Throttle, then, things are OK. Why is my custom
annotation is giving problem for CXF startup?
2) Second questions is.. is there a easy way to get hold of
HttpServletRequest into my Aspect (Spring AOP). I don't know whether
this is a right forum or not. Currently, I am trying to get hold of
WebServiceContext using reflections API in my Aspect class and trying to
get HttpServletRequest. Is there an example where I can write a CXF
Handler/Filter and put WebServiceContext into ThreadLocal so that I can
get it wherever I want down-the-line(here..in this case my Aspect
class)?
Caused by: javax.xml.ws.WebServiceException: Creation of Endpoint failed
at
org.apache.cxf.jaxws.JaxWsServerFactoryBean.init(JaxWsServerFactoryBean.
java:181)
at
org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBea
n.java:168)
at org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:346)
at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:259)
at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:209)
at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:404)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav
a:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor
Impl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFac
tory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1413
)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFac
tory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1374)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFac
tory.initializeBean(AbstractAutowireCapableBeanFactory.java:1334)
... 39 more
Caused by: java.lang.IllegalArgumentException
at
sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.ja
va:37)
at
sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorI
mpl.java:57)
at java.lang.reflect.Field.set(Field.java:656)
at
org.apache.cxf.common.injection.ResourceInjector.injectField(ResourceInj
ector.java:283)
at
org.apache.cxf.common.injection.ResourceInjector.visitField(ResourceInje
ctor.java:167)
at
org.apache.cxf.common.annotation.AnnotationProcessor.processFields(Annot
ationProcessor.java:101)
at
org.apache.cxf.common.annotation.AnnotationProcessor.accept(AnnotationPr
ocessor.java:69)
at
org.apache.cxf.common.injection.ResourceInjector.inject(ResourceInjector
.java:81)
at
org.apache.cxf.jaxws.JaxWsServerFactoryBean.injectResources(JaxWsServerF
actoryBean.java:221)
at
org.apache.cxf.jaxws.JaxWsServerFactoryBean.init(JaxWsServerFactoryBean.
java:175)
... 51 more
Nov 9, 2009 3:32:14 PM org.apache.catalina.core.ApplicationContext log
Regards
Karuna Pydipati
StubHub/eBay - Platform & Services
Phone: (415)222-8752
Email: kpydipati@ebay.com <ma...@ebay.com>
Re: CXF and Custom Annotation
Posted by Daniel Kulp <dk...@apache.org>.
Most likely, what is happening, is that the AOP stuff is hiding the private
field behind a proxy or similar which is preventing it from being injected.
You could probably get around it by doing:
private WebServiceContext webServiceContext;
@Resouce
public void setWebServiceContext(WebServiceContext ctx) {
webServiceContext = ctx.
}
By going through a public method, the proxy should be able to proxy that as
well.
Dan
On Mon November 9 2009 6:48:58 pm Pydipati, Karuna wrote:
> Hi
>
> I have a weird issue. I have a JAX-WS java-first webservice using CXF
> and Spring. I have WebServiceContext in my Implementer class. Here is
> snippet of my Implementer class
>
> @WebService(endpointInterface = "com.xxx.ws.soap.XXXService",
> serviceName = "XXXService")
> @WebFault(targetNamespace = "com.xxx.ws.soap", name = "XXXFault",
> faultBean = "XXXFault")
> public class XXXServiceImpl implements XXXService {
>
> @Resource
> private WebServiceContext webServiceContext;
>
> @Throttle
> public PatientMatchResp getSomeMethod()
> throws ApplicationFault {
> ....
> ....
> ....
> }
>
> I have a custom annotation @Throttle and would like to do some work
> (basically throttling the method such as way that this service is not
> abused by users when exposed to public) on that method using Spring AOP.
>
>
> 1) My issue is when I started my Tomcat with this implementation, I am
> getting this error. Again, this is at the startup time of Tomcat time.
> Not at some invocation of webservice time. If I comment either
> WebServiceContext OR @Throttle, then, things are OK. Why is my custom
> annotation is giving problem for CXF startup?
>
> 2) Second questions is.. is there a easy way to get hold of
> HttpServletRequest into my Aspect (Spring AOP). I don't know whether
> this is a right forum or not. Currently, I am trying to get hold of
> WebServiceContext using reflections API in my Aspect class and trying to
> get HttpServletRequest. Is there an example where I can write a CXF
> Handler/Filter and put WebServiceContext into ThreadLocal so that I can
> get it wherever I want down-the-line(here..in this case my Aspect
> class)?
>
> Caused by: javax.xml.ws.WebServiceException: Creation of Endpoint failed
> at
> org.apache.cxf.jaxws.JaxWsServerFactoryBean.init(JaxWsServerFactoryBean.
> java:181)
> at
> org.apache.cxf.jaxws.JaxWsServerFactoryBean.create(JaxWsServerFactoryBea
> n.java:168)
> at org.apache.cxf.jaxws.EndpointImpl.getServer(EndpointImpl.java:346)
> at org.apache.cxf.jaxws.EndpointImpl.doPublish(EndpointImpl.java:259)
> at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:209)
> at org.apache.cxf.jaxws.EndpointImpl.publish(EndpointImpl.java:404)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav
> a:39)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor
> Impl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:585)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFac
> tory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1413
> )
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFac
> tory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1374)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFac
> tory.initializeBean(AbstractAutowireCapableBeanFactory.java:1334)
> ... 39 more
> Caused by: java.lang.IllegalArgumentException
> at
> sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.ja
> va:37)
> at
> sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorI
> mpl.java:57)
> at java.lang.reflect.Field.set(Field.java:656)
> at
> org.apache.cxf.common.injection.ResourceInjector.injectField(ResourceInj
> ector.java:283)
> at
> org.apache.cxf.common.injection.ResourceInjector.visitField(ResourceInje
> ctor.java:167)
> at
> org.apache.cxf.common.annotation.AnnotationProcessor.processFields(Annot
> ationProcessor.java:101)
> at
> org.apache.cxf.common.annotation.AnnotationProcessor.accept(AnnotationPr
> ocessor.java:69)
> at
> org.apache.cxf.common.injection.ResourceInjector.inject(ResourceInjector
> .java:81)
> at
> org.apache.cxf.jaxws.JaxWsServerFactoryBean.injectResources(JaxWsServerF
> actoryBean.java:221)
> at
> org.apache.cxf.jaxws.JaxWsServerFactoryBean.init(JaxWsServerFactoryBean.
> java:175)
> ... 51 more
> Nov 9, 2009 3:32:14 PM org.apache.catalina.core.ApplicationContext log
>
>
>
> Regards
>
> Karuna Pydipati
>
> StubHub/eBay - Platform & Services
>
> Phone: (415)222-8752
>
> Email: kpydipati@ebay.com <ma...@ebay.com>
>
--
Daniel Kulp
dkulp@apache.org
http://www.dankulp.com/blog