Re: Base class members not serializing / deserializing
Brad, It's quite possible (and highly likely) that the JAXB context is not being created with the subclasses as part of the context. Thus, the subclasses cannot be properly written/read. By default, the runtime just examines the exact classes referenced from the SEI interface to figure out what classes need to be bound into the context. In many cases, the subclasses would not be referenced there and thus would not be found. There are a couple ways to deal with it: 1) If using jaxws/jaxb plus the 2.1 snapshots, (this is a jaxws 2.1 feature) you can add @XmlSeeAlso annotations in various places to have it SeeAlso the additional classes. 2) If the subclasses are in the same package as the base class, stick a jaxb.index file in the package that just lists the sub-classes. (without the package names) 3) There are spring config methods of adding extra classes to the context. You can see our systest config: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/resources/extrajaxbclass.xml?revision=581341view=markup Dan On Sunday 06 April 2008, Brad O'Hearne wrote: Doug, Thanks for the reply. Couple things -- first, @UriParam is now apparently @PathParam. Additionally, I cannot get the paths to work. I repeatedly get Tomcat errors that there's No operation matching request path..., and others like itstill a black artI'd love to get this worked out, as I've got jax-rs loaded, I just need to be able to hit it now. I've tried about every URL combination possibleno dice. Prior to your post, I had reverted back to my Jax-WS frontend, and I discovered that inheritance IS working on serialization (outbound serialization on return types) but is NOT working on deserialization (inbound deserialization of XML to Java types on parameters). The problem is definitely there. Brad On Apr 5, 2008, at 7:54 PM, Doug wrote: On Sun, 6 Apr 2008, Brad O'Hearne wrote: I've moved to 2.1 SNAPSHOT -- my @UriTemplate annotations still won't compile. Is there another dependency needed? I think @UriTemplate was deprecated/replaced by @Path by the JSR-311 folks, but their spec documents aren't uptodate (thats my understanding anyway) Something like the following works for me (from the 2.1 SNAPSHOT): import javax.ws.rs.Path; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.core.HttpContext; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.ProduceMime; import javax.ws.rs.ConsumeMime; import javax.ws.rs.UriParam; import javax.ws.rs.WebApplicationException; @Path(/rc) public class ReflectionCoverageService { @POST @Path(init/{clientId}) @ProduceMime(text/plain) public String init(@UriParam(clientId) String id, @HttpContext UriInfo info, SomeJavaBeanClass sjbc) { MultivaluedMap params = info.getQueryParameters(); -- J. Daniel Kulp Principal Engineer, IONA [EMAIL PROTECTED] http://www.dankulp.com/blog
Re: Base class members not serializing / deserializing
Doug, Thanks for the reply. Couple things -- first, @UriParam is now apparently @PathParam. Additionally, I cannot get the paths to work. I repeatedly get Tomcat errors that there's No operation matching request path..., and others like itstill a black artI'd love to get this worked out, as I've got jax-rs loaded, I just need to be able to hit it now. I've tried about every URL combination possibleno dice. Prior to your post, I had reverted back to my Jax-WS frontend, and I discovered that inheritance IS working on serialization (outbound serialization on return types) but is NOT working on deserialization (inbound deserialization of XML to Java types on parameters). The problem is definitely there. Brad On Apr 5, 2008, at 7:54 PM, Doug wrote: On Sun, 6 Apr 2008, Brad O'Hearne wrote: I've moved to 2.1 SNAPSHOT -- my @UriTemplate annotations still won't compile. Is there another dependency needed? I think @UriTemplate was deprecated/replaced by @Path by the JSR-311 folks, but their spec documents aren't uptodate (thats my understanding anyway) Something like the following works for me (from the 2.1 SNAPSHOT): import javax.ws.rs.Path; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.core.HttpContext; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.ProduceMime; import javax.ws.rs.ConsumeMime; import javax.ws.rs.UriParam; import javax.ws.rs.WebApplicationException; @Path(/rc) public class ReflectionCoverageService { @POST @Path(init/{clientId}) @ProduceMime(text/plain) public String init(@UriParam(clientId) String id, @HttpContext UriInfo info, SomeJavaBeanClass sjbc) { MultivaluedMap params = info.getQueryParameters();
Re: Base class members not serializing / deserializing
On Sun, 6 Apr 2008, Brad O'Hearne wrote: Thanks for the reply. Couple things -- first, @UriParam is now apparently @PathParam. Additionally, I cannot get the paths to work. I repeatedly get Tomcat errors that there's No operation matching request path..., and others like itstill a black artI'd love to get this worked out, as I've got jax-rs loaded, I just need to be able to hit it now. I've tried about every URL combination possibleno dice. @PathParam may well be the next JSR-311 incarnation, but at least for apache-cxf-2.1-incubator-20080306.021818-37.zip the annotation that works, for me, is @Path. Specifically, using my previous example, I have a tomcat webapps project reflncover which I access by the URL: http://localhost:8080/reflncover/svc/rc/init/myclientid?arg1=val1arg2=val2 The svc component of the URL originates from the WEB-INF/web.xml file: servlet-mapping servlet-nameCXFServlet/servlet-name url-pattern/svc/*/url-pattern /servlet-mapping Also, in my beans.xml file (referenced by web.xml) I have: import resource=classpath:META-INF/cxf/cxf.xml / import resource=classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml / import resource=classpath:META-INF/cxf/cxf-servlet.xml / jaxrs:server id=reflectionCoverage address=/ jaxrs:serviceBeans bean class=au.net.mmsn.rc.services.ReflectionCoverageService / /jaxrs:serviceBeans /jaxrs:server It works for me. Originally I had a bit of trouble figuring the format of the XML to POST to my /init/ REST service, so I ended up creating a dummy @GET service URL that returned a dummy bean class (as XML) that I created and populated within my ReflectionCovergeService class (below). Once I had that then submitting the same XML structure back just worked. Hope this helps. Doug Prior to your post, I had reverted back to my Jax-WS frontend, and I discovered that inheritance IS working on serialization (outbound serialization on return types) but is NOT working on deserialization (inbound deserialization of XML to Java types on parameters). The problem is definitely there. Not sure what you mean by inheritance here. I looked briefly at JAX-WS but wrapping everything in SOAP headers wasn't flexible enough for my needs. Hope this helps Doug On Apr 5, 2008, at 7:54 PM, Doug wrote: On Sun, 6 Apr 2008, Brad O'Hearne wrote: I've moved to 2.1 SNAPSHOT -- my @UriTemplate annotations still won't compile. Is there another dependency needed? I think @UriTemplate was deprecated/replaced by @Path by the JSR-311 folks, but their spec documents aren't uptodate (thats my understanding anyway) Something like the following works for me (from the 2.1 SNAPSHOT): import javax.ws.rs.Path; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.core.HttpContext; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.ProduceMime; import javax.ws.rs.ConsumeMime; import javax.ws.rs.UriParam; import javax.ws.rs.WebApplicationException; @Path(/rc) public class ReflectionCoverageService { @POST @Path(init/{clientId}) @ProduceMime(text/plain) public String init(@UriParam(clientId) String id, @HttpContext UriInfo info, SomeJavaBeanClass sjbc) { MultivaluedMap params = info.getQueryParameters();
RE: Base class members not serializing / deserializing
Hi @Path replaces @UriTemplate and @PathParam replaces @UriParam, I'm wondering why you have no compilation issues with jsr-311-api 0.6 if use still can use @UriParam ? May be jsr-311-api 0.5 is also on a class path ? Cheers, Sergey -Original Message- From: Doug [mailto:[EMAIL PROTECTED] Sent: 06 April 2008 12:49 To: Brad O'Hearne Cc: cxf-user@incubator.apache.org Subject: Re: Base class members not serializing / deserializing On Sun, 6 Apr 2008, Brad O'Hearne wrote: Thanks for the reply. Couple things -- first, @UriParam is now apparently @PathParam. Additionally, I cannot get the paths to work. I repeatedly get Tomcat errors that there's No operation matching request path..., and others like itstill a black artI'd love to get this worked out, as I've got jax-rs loaded, I just need to be able to hit it now. I've tried about every URL combination possibleno dice. @PathParam may well be the next JSR-311 incarnation, but at least for apache-cxf-2.1-incubator-20080306.021818-37.zip the annotation that works, for me, is @Path. Specifically, using my previous example, I have a tomcat webapps project reflncover which I access by the URL: http://localhost:8080/reflncover/svc/rc/init/myclientid?arg1=val1arg2=v al2 The svc component of the URL originates from the WEB-INF/web.xml file: servlet-mapping servlet-nameCXFServlet/servlet-name url-pattern/svc/*/url-pattern /servlet-mapping Also, in my beans.xml file (referenced by web.xml) I have: import resource=classpath:META-INF/cxf/cxf.xml / import resource=classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml / import resource=classpath:META-INF/cxf/cxf-servlet.xml / jaxrs:server id=reflectionCoverage address=/ jaxrs:serviceBeans bean class=au.net.mmsn.rc.services.ReflectionCoverageService / /jaxrs:serviceBeans /jaxrs:server It works for me. Originally I had a bit of trouble figuring the format of the XML to POST to my /init/ REST service, so I ended up creating a dummy @GET service URL that returned a dummy bean class (as XML) that I created and populated within my ReflectionCovergeService class (below). Once I had that then submitting the same XML structure back just worked. Hope this helps. Doug Prior to your post, I had reverted back to my Jax-WS frontend, and I discovered that inheritance IS working on serialization (outbound serialization on return types) but is NOT working on deserialization (inbound deserialization of XML to Java types on parameters). The problem is definitely there. Not sure what you mean by inheritance here. I looked briefly at JAX-WS but wrapping everything in SOAP headers wasn't flexible enough for my needs. Hope this helps Doug On Apr 5, 2008, at 7:54 PM, Doug wrote: On Sun, 6 Apr 2008, Brad O'Hearne wrote: I've moved to 2.1 SNAPSHOT -- my @UriTemplate annotations still won't compile. Is there another dependency needed? I think @UriTemplate was deprecated/replaced by @Path by the JSR-311 folks, but their spec documents aren't uptodate (thats my understanding anyway) Something like the following works for me (from the 2.1 SNAPSHOT): import javax.ws.rs.Path; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.core.HttpContext; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.ProduceMime; import javax.ws.rs.ConsumeMime; import javax.ws.rs.UriParam; import javax.ws.rs.WebApplicationException; @Path(/rc) public class ReflectionCoverageService { @POST @Path(init/{clientId}) @ProduceMime(text/plain) public String init(@UriParam(clientId) String id, @HttpContext UriInfo info, SomeJavaBeanClass sjbc) { MultivaluedMap params = info.getQueryParameters(); IONA Technologies PLC (registered in Ireland) Registered Number: 171387 Registered Address: The IONA Building, Shelbourne Road, Dublin 4, Ireland
RE: Base class members not serializing / deserializing
Hi Brad Yes, I can see you're using CXF HTTP Binding. I'd encourage you to try JAX-RS, not sure why it does not work in CXF HTTP Binding. With CXF JAX-RS you'd also have few options to plugin your custom serializers and deal with that namespace issue... Cheers, Sergey -Original Message- From: Brad O'Hearne [mailto:[EMAIL PROTECTED] Sent: 05 April 2008 06:20 To: cxf-user@incubator.apache.org Subject: Re: Base class members not serializing / deserializing I thought I'd add some sample code: My superclass: @XmlType public abstract class ServiceRequest { private String ssid; @XmlAttribute public String getSsid() { return ssid; } public void setSsid(String ssid) { this.ssid = ssid; } } My impl class: @XmlRootElement //I have tried both @XmlType and nothing here, no luck public class ListServersRequest extends ServiceRequest { } My service method: @Post @HttpResource(location = /listServers) @WebResult (name = ListServersResponse) .ListServersResponse listServers(ListServersRequest request); It never reaches the method. I get the following error: INFO: Invoking POST on /listServers Apr 4, 2008 10:03:55 PM org.apache.cxf.binding.http.interceptor.URIParameterInInterceptor handleMessage INFO: URIParameterInterceptor handle message on path [/listServers] with content-type [application/xml] Apr 4, 2008 10:03:55 PM org.apache.cxf.phase.PhaseInterceptorChain doIntercept INFO: Interceptor has thrown exception, unwinding now java.lang.NullPointerException at org .apache .cxf .binding .http.IriDecoderHelper.interopolateParams(IriDecoderHelper.java:306) at org .apache .cxf .binding .http .interceptor .URIParameterInInterceptor.mergeParams(URIParameterInInterceptor.java: 122) at org .apache .cxf .binding .http .interceptor .URIParameterInInterceptor .handleMessage(URIParameterInInterceptor.java:103) at org .apache .cxf .phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:208) at org .apache .cxf .transport .ChainInitiationObserver.onMessage(ChainInitiationObserver.java:77) at org .apache .cxf .transport .servlet.ServletDestination.doMessage(ServletDestination.java:79) at org .apache .cxf .transport .servlet.ServletController.invokeDestination(ServletController.java:264) at org .apache .cxf.transport.servlet.ServletController.invoke(ServletController.java: 123) at org .apache .cxf .transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java: 170) at org .apache .cxf .transport.servlet.AbstractCXFServlet.doPost(AbstractCXFServlet.java: 148) at javax.servlet.http.HttpServlet.service(HttpServlet.java:710) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org .apache .catalina .core .ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java: 290) at org .apache .catalina .core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org .apache .catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java: 233) at org .apache .catalina.core.StandardContextValve.invoke(StandardContextValve.java: 175) at org .apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java: 128) at org .apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java: 102) at org .apache .catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java: 286) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java: 844) at org.apache.coyote.http11.Http11Protocol $Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java: 447) at java.lang.Thread.run(Unknown Source) If I rip the content from ServiceResponse and put it directly into ListServersResponse, everything works. Otherwise, everything fails. If anyone has any clue, I'd appreciate the help! Brad On Apr 4, 2008, at 6:47 PM, Brad O'Hearne wrote: Hello, I am using CXF with RESTful services, configured with Spring. My request objects (parameters to my service methods) and response objects (return types on my service methods) have a common structure, so I created some base classes with common members, which the actual request and response objects I use and declare as types in my service interface method signatures, and have discovered something horrible...which I hope is something only as horrible as my lack of knowledge on how to change the default behavior. Apparently, all members defined on the base classes are ignored when the serialization / deserialization binding occurs, and I receive
Re: Base class members not serializing / deserializing
Sergey, Thanks for the reply -- I've made my code changes, but I'm finding that I cannot resolve my jax-rs annotations -- what JAR (maven artifact) contains the needed jax-rs dependencies? Thanks, Brad On Apr 5, 2008, at 3:22 AM, Beryozkin, Sergey wrote: Hi Brad Yes, I can see you're using CXF HTTP Binding. I'd encourage you to try JAX-RS, not sure why it does not work in CXF HTTP Binding. With CXF JAX-RS you'd also have few options to plugin your custom serializers and deal with that namespace issue... Cheers, Sergey -Original Message- From: Brad O'Hearne [mailto:[EMAIL PROTECTED] Sent: 05 April 2008 06:20 To: cxf-user@incubator.apache.org Subject: Re: Base class members not serializing / deserializing I thought I'd add some sample code: My superclass: @XmlType public abstract class ServiceRequest { private String ssid; @XmlAttribute public String getSsid() { return ssid; } public void setSsid(String ssid) { this.ssid = ssid; } } My impl class: @XmlRootElement //I have tried both @XmlType and nothing here, no luck public class ListServersRequest extends ServiceRequest { } My service method: @Post @HttpResource(location = /listServers) @WebResult (name = ListServersResponse) .ListServersResponse listServers(ListServersRequest request); It never reaches the method. I get the following error: INFO: Invoking POST on /listServers Apr 4, 2008 10:03:55 PM org.apache.cxf.binding.http.interceptor.URIParameterInInterceptor handleMessage INFO: URIParameterInterceptor handle message on path [/listServers] with content-type [application/xml] Apr 4, 2008 10:03:55 PM org.apache.cxf.phase.PhaseInterceptorChain doIntercept INFO: Interceptor has thrown exception, unwinding now java.lang.NullPointerException at org .apache .cxf .binding .http.IriDecoderHelper.interopolateParams(IriDecoderHelper.java:306) at org .apache .cxf .binding .http .interceptor .URIParameterInInterceptor.mergeParams(URIParameterInInterceptor.java: 122) at org .apache .cxf .binding .http .interceptor .URIParameterInInterceptor .handleMessage(URIParameterInInterceptor.java:103) at org .apache .cxf .phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java: 208) at org .apache .cxf .transport .ChainInitiationObserver.onMessage(ChainInitiationObserver.java:77) at org .apache .cxf .transport .servlet.ServletDestination.doMessage(ServletDestination.java:79) at org .apache .cxf .transport .servlet.ServletController.invokeDestination(ServletController.java: 264) at org .apache .cxf .transport.servlet.ServletController.invoke(ServletController.java: 123) at org .apache .cxf .transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java: 170) at org .apache .cxf .transport.servlet.AbstractCXFServlet.doPost(AbstractCXFServlet.java: 148) at javax.servlet.http.HttpServlet.service(HttpServlet.java:710) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org .apache .catalina .core .ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java: 290) at org .apache .catalina .core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org .apache .catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java: 233) at org .apache .catalina.core.StandardContextValve.invoke(StandardContextValve.java: 175) at org .apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java: 128) at org .apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java: 102) at org .apache .catalina.core.StandardEngineValve.invoke(StandardEngineValve.java: 109) at org .apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java: 286) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java: 844) at org.apache.coyote.http11.Http11Protocol $Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java: 447) at java.lang.Thread.run(Unknown Source) If I rip the content from ServiceResponse and put it directly into ListServersResponse, everything works. Otherwise, everything fails. If anyone has any clue, I'd appreciate the help! Brad On Apr 4, 2008, at 6:47 PM, Brad O'Hearne wrote: Hello, I am using CXF with RESTful services, configured with Spring. My request objects (parameters to my service methods) and response objects (return types on my service methods) have a common structure, so I created some base classes with common members, which the actual request and response objects I use and declare as types in my service interface method signatures, and have discovered something horrible...which I hope is something only as horrible as my lack of knowledge on how to change the default behavior
Re: Base class members not serializing / deserializing
Come to think of itI'm not seeing any cxf-rt-frontend-jaxrs on the incubating repository. Where can this dependency be found? None of my annotations will compile. B On Apr 5, 2008, at 3:29 PM, Brad O'Hearne wrote: Sergey, Thanks for the reply -- I've made my code changes, but I'm finding that I cannot resolve my jax-rs annotations -- what JAR (maven artifact) contains the needed jax-rs dependencies? Thanks, Brad On Apr 5, 2008, at 3:22 AM, Beryozkin, Sergey wrote: Hi Brad Yes, I can see you're using CXF HTTP Binding. I'd encourage you to try JAX-RS, not sure why it does not work in CXF HTTP Binding. With CXF JAX-RS you'd also have few options to plugin your custom serializers and deal with that namespace issue... Cheers, Sergey -Original Message- From: Brad O'Hearne [mailto:[EMAIL PROTECTED] Sent: 05 April 2008 06:20 To: cxf-user@incubator.apache.org Subject: Re: Base class members not serializing / deserializing I thought I'd add some sample code: My superclass: @XmlType public abstract class ServiceRequest { private String ssid; @XmlAttribute public String getSsid() { return ssid; } public void setSsid(String ssid) { this.ssid = ssid; } } My impl class: @XmlRootElement //I have tried both @XmlType and nothing here, no luck public class ListServersRequest extends ServiceRequest { } My service method: @Post @HttpResource(location = /listServers) @WebResult (name = ListServersResponse) .ListServersResponse listServers(ListServersRequest request); It never reaches the method. I get the following error: INFO: Invoking POST on /listServers Apr 4, 2008 10:03:55 PM org.apache.cxf.binding.http.interceptor.URIParameterInInterceptor handleMessage INFO: URIParameterInterceptor handle message on path [/listServers] with content-type [application/xml] Apr 4, 2008 10:03:55 PM org.apache.cxf.phase.PhaseInterceptorChain doIntercept INFO: Interceptor has thrown exception, unwinding now java.lang.NullPointerException at org .apache .cxf .binding .http.IriDecoderHelper.interopolateParams(IriDecoderHelper.java:306) at org .apache .cxf .binding .http .interceptor .URIParameterInInterceptor .mergeParams(URIParameterInInterceptor.java: 122) at org .apache .cxf .binding .http .interceptor .URIParameterInInterceptor .handleMessage(URIParameterInInterceptor.java:103) at org .apache .cxf .phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java: 208) at org .apache .cxf .transport .ChainInitiationObserver.onMessage(ChainInitiationObserver.java:77) at org .apache .cxf .transport .servlet.ServletDestination.doMessage(ServletDestination.java:79) at org .apache .cxf .transport .servlet.ServletController.invokeDestination(ServletController.java: 264) at org .apache .cxf .transport.servlet.ServletController.invoke(ServletController.java: 123) at org .apache .cxf .transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java: 170) at org .apache .cxf .transport.servlet.AbstractCXFServlet.doPost(AbstractCXFServlet.java: 148) at javax.servlet.http.HttpServlet.service(HttpServlet.java:710) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org .apache .catalina .core .ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java: 290) at org .apache .catalina .core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 206) at org .apache .catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java: 233) at org .apache .catalina.core.StandardContextValve.invoke(StandardContextValve.java: 175) at org .apache .catalina.core.StandardHostValve.invoke(StandardHostValve.java: 128) at org .apache .catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java: 102) at org .apache .catalina.core.StandardEngineValve.invoke(StandardEngineValve.java: 109) at org .apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java: 286) at org .apache.coyote.http11.Http11Processor.process(Http11Processor.java: 844) at org.apache.coyote.http11.Http11Protocol $Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java: 447) at java.lang.Thread.run(Unknown Source) If I rip the content from ServiceResponse and put it directly into ListServersResponse, everything works. Otherwise, everything fails. If anyone has any clue, I'd appreciate the help! Brad On Apr 4, 2008, at 6:47 PM, Brad O'Hearne wrote: Hello, I am using CXF with RESTful services, configured with Spring. My request objects (parameters to my service methods) and response objects (return types on my service methods) have a common structure, so I created some base classes with common members, which the actual request
Re: Base class members not serializing / deserializing
I seem to have discovered a 2.1 SNAPSHOT jar -- is there a cxf-rt- frontend-jaxrs with the 2.0.5 release? B On Apr 5, 2008, at 3:38 PM, Brad O'Hearne wrote: Come to think of itI'm not seeing any cxf-rt-frontend-jaxrs on the incubating repository. Where can this dependency be found? None of my annotations will compile. B On Apr 5, 2008, at 3:29 PM, Brad O'Hearne wrote: Sergey, Thanks for the reply -- I've made my code changes, but I'm finding that I cannot resolve my jax-rs annotations -- what JAR (maven artifact) contains the needed jax-rs dependencies? Thanks, Brad On Apr 5, 2008, at 3:22 AM, Beryozkin, Sergey wrote: Hi Brad Yes, I can see you're using CXF HTTP Binding. I'd encourage you to try JAX-RS, not sure why it does not work in CXF HTTP Binding. With CXF JAX-RS you'd also have few options to plugin your custom serializers and deal with that namespace issue... Cheers, Sergey -Original Message- From: Brad O'Hearne [mailto:[EMAIL PROTECTED] Sent: 05 April 2008 06:20 To: cxf-user@incubator.apache.org Subject: Re: Base class members not serializing / deserializing I thought I'd add some sample code: My superclass: @XmlType public abstract class ServiceRequest { private String ssid; @XmlAttribute public String getSsid() { return ssid; } public void setSsid(String ssid) { this.ssid = ssid; } } My impl class: @XmlRootElement //I have tried both @XmlType and nothing here, no luck public class ListServersRequest extends ServiceRequest { } My service method: @Post @HttpResource(location = /listServers) @WebResult (name = ListServersResponse) .ListServersResponse listServers(ListServersRequest request); It never reaches the method. I get the following error: INFO: Invoking POST on /listServers Apr 4, 2008 10:03:55 PM org.apache.cxf.binding.http.interceptor.URIParameterInInterceptor handleMessage INFO: URIParameterInterceptor handle message on path [/listServers] with content-type [application/xml] Apr 4, 2008 10:03:55 PM org.apache.cxf.phase.PhaseInterceptorChain doIntercept INFO: Interceptor has thrown exception, unwinding now java.lang.NullPointerException at org .apache .cxf .binding .http.IriDecoderHelper.interopolateParams(IriDecoderHelper.java:306) at org .apache .cxf .binding .http .interceptor .URIParameterInInterceptor .mergeParams(URIParameterInInterceptor.java: 122) at org .apache .cxf .binding .http .interceptor .URIParameterInInterceptor .handleMessage(URIParameterInInterceptor.java:103) at org .apache .cxf .phase .PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:208) at org .apache .cxf .transport .ChainInitiationObserver.onMessage(ChainInitiationObserver.java:77) at org .apache .cxf .transport .servlet.ServletDestination.doMessage(ServletDestination.java:79) at org .apache .cxf .transport .servlet .ServletController.invokeDestination(ServletController.java:264) at org .apache .cxf .transport.servlet.ServletController.invoke(ServletController.java: 123) at org .apache .cxf .transport .servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java: 170) at org .apache .cxf .transport .servlet.AbstractCXFServlet.doPost(AbstractCXFServlet.java: 148) at javax.servlet.http.HttpServlet.service(HttpServlet.java:710) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org .apache .catalina .core .ApplicationFilterChain .internalDoFilter(ApplicationFilterChain.java: 290) at org .apache .catalina .core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 206) at org .apache .catalina .core.StandardWrapperValve.invoke(StandardWrapperValve.java: 233) at org .apache .catalina .core.StandardContextValve.invoke(StandardContextValve.java: 175) at org .apache .catalina.core.StandardHostValve.invoke(StandardHostValve.java: 128) at org .apache .catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java: 102) at org .apache .catalina.core.StandardEngineValve.invoke(StandardEngineValve.java: 109) at org .apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java: 286) at org .apache.coyote.http11.Http11Processor.process(Http11Processor.java: 844) at org.apache.coyote.http11.Http11Protocol $Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java: 447) at java.lang.Thread.run(Unknown Source) If I rip the content from ServiceResponse and put it directly into ListServersResponse, everything works. Otherwise, everything fails. If anyone has any clue, I'd appreciate the help! Brad On Apr 4, 2008, at 6:47 PM, Brad O'Hearne wrote: Hello, I am using CXF with RESTful services, configured with Spring. My request objects (parameters to my
Re: Base class members not serializing / deserializing
Brad O'Hearne wrote: I seem to have discovered a 2.1 SNAPSHOT jar -- is there a cxf-rt-frontend-jaxrs with the 2.0.5 release? No, 2.1 only I'm afraid. Ian -- Ian Roberts | Department of Computer Science [EMAIL PROTECTED] | University of Sheffield, UK
Re: Base class members not serializing / deserializing
I've moved to 2.1 SNAPSHOT -- my @UriTemplate annotations still won't compile. Is there another dependency needed? Brad On Apr 5, 2008, at 4:03 PM, Ian Roberts wrote: Brad O'Hearne wrote: I seem to have discovered a 2.1 SNAPSHOT jar -- is there a cxf-rt- frontend-jaxrs with the 2.0.5 release? No, 2.1 only I'm afraid. Ian -- Ian Roberts | Department of Computer Science [EMAIL PROTECTED] | University of Sheffield, UK
Re: Base class members not serializing / deserializing
Well, jax-rs seems to be a black art. I'll consider using it with CXF when I can get more information on how to configure the dependencies. On a lark, I grabbed the javax.ws.rs:jsr311-api 0.6 jar from Sun, and that didn't help -- annotations still don't compile. So back to my original question: If someone could lend *any* assistance with either showing me how to get inheritance to work with service parameters / return types using CXF/REST, or if it isn't possible, just inform me of that, I would greatly appreciate it. Thanks, Brad On Apr 5, 2008, at 4:07 PM, Brad O'Hearne wrote: I've moved to 2.1 SNAPSHOT -- my @UriTemplate annotations still won't compile. Is there another dependency needed? Brad On Apr 5, 2008, at 4:03 PM, Ian Roberts wrote: Brad O'Hearne wrote: I seem to have discovered a 2.1 SNAPSHOT jar -- is there a cxf-rt- frontend-jaxrs with the 2.0.5 release? No, 2.1 only I'm afraid. Ian -- Ian Roberts | Department of Computer Science [EMAIL PROTECTED] | University of Sheffield, UK
Re: Base class members not serializing / deserializing
On Sun, 6 Apr 2008, Brad O'Hearne wrote: I've moved to 2.1 SNAPSHOT -- my @UriTemplate annotations still won't compile. Is there another dependency needed? I think @UriTemplate was deprecated/replaced by @Path by the JSR-311 folks, but their spec documents aren't uptodate (thats my understanding anyway) Something like the following works for me (from the 2.1 SNAPSHOT): import javax.ws.rs.Path; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.core.HttpContext; import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.ProduceMime; import javax.ws.rs.ConsumeMime; import javax.ws.rs.UriParam; import javax.ws.rs.WebApplicationException; @Path(/rc) public class ReflectionCoverageService { @POST @Path(init/{clientId}) @ProduceMime(text/plain) public String init(@UriParam(clientId) String id, @HttpContext UriInfo info, SomeJavaBeanClass sjbc) { MultivaluedMap params = info.getQueryParameters();
Re: Base class members not serializing / deserializing
I thought I'd add some sample code: My superclass: @XmlType public abstract class ServiceRequest { private String ssid; @XmlAttribute public String getSsid() { return ssid; } public void setSsid(String ssid) { this.ssid = ssid; } } My impl class: @XmlRootElement //I have tried both @XmlType and nothing here, no luck public class ListServersRequest extends ServiceRequest { } My service method: @Post @HttpResource(location = /listServers) @WebResult (name = ListServersResponse) .ListServersResponse listServers(ListServersRequest request); It never reaches the method. I get the following error: INFO: Invoking POST on /listServers Apr 4, 2008 10:03:55 PM org.apache.cxf.binding.http.interceptor.URIParameterInInterceptor handleMessage INFO: URIParameterInterceptor handle message on path [/listServers] with content-type [application/xml] Apr 4, 2008 10:03:55 PM org.apache.cxf.phase.PhaseInterceptorChain doIntercept INFO: Interceptor has thrown exception, unwinding now java.lang.NullPointerException at org .apache .cxf .binding .http.IriDecoderHelper.interopolateParams(IriDecoderHelper.java:306) at org .apache .cxf .binding .http .interceptor .URIParameterInInterceptor.mergeParams(URIParameterInInterceptor.java: 122) at org .apache .cxf .binding .http .interceptor .URIParameterInInterceptor .handleMessage(URIParameterInInterceptor.java:103) at org .apache .cxf .phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:208) at org .apache .cxf .transport .ChainInitiationObserver.onMessage(ChainInitiationObserver.java:77) at org .apache .cxf .transport .servlet.ServletDestination.doMessage(ServletDestination.java:79) at org .apache .cxf .transport .servlet.ServletController.invokeDestination(ServletController.java:264) at org .apache .cxf.transport.servlet.ServletController.invoke(ServletController.java: 123) at org .apache .cxf .transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java: 170) at org .apache .cxf .transport.servlet.AbstractCXFServlet.doPost(AbstractCXFServlet.java: 148) at javax.servlet.http.HttpServlet.service(HttpServlet.java:710) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org .apache .catalina .core .ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java: 290) at org .apache .catalina .core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org .apache .catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java: 233) at org .apache .catalina.core.StandardContextValve.invoke(StandardContextValve.java: 175) at org .apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java: 128) at org .apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java: 102) at org .apache .catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java: 286) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java: 844) at org.apache.coyote.http11.Http11Protocol $Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java: 447) at java.lang.Thread.run(Unknown Source) If I rip the content from ServiceResponse and put it directly into ListServersResponse, everything works. Otherwise, everything fails. If anyone has any clue, I'd appreciate the help! Brad On Apr 4, 2008, at 6:47 PM, Brad O'Hearne wrote: Hello, I am using CXF with RESTful services, configured with Spring. My request objects (parameters to my service methods) and response objects (return types on my service methods) have a common structure, so I created some base classes with common members, which the actual request and response objects I use and declare as types in my service interface method signatures, and have discovered something horrible...which I hope is something only as horrible as my lack of knowledge on how to change the default behavior. Apparently, all members defined on the base classes are ignored when the serialization / deserialization binding occurs, and I receive NullPointerExceptions. If I take all the members defined in my base classes and stuff them into their subclasses, everything works fine. Obviously, this is a bad scene, as it requires me to duplicate code across every request and response object, respectively. How do I alter the CXF behavior (using JAXB) so that I can have my request and response types extend from base classes and have those base class members serialize and deserialize properly? Thanks, Brad