Re: Base class members not serializing / deserializing

2008-04-07 Thread Daniel Kulp

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

2008-04-06 Thread Brad O'Hearne

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

2008-04-06 Thread Doug
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

2008-04-06 Thread Beryozkin, Sergey
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

2008-04-05 Thread Beryozkin, Sergey
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

2008-04-05 Thread Brad O'Hearne

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

2008-04-05 Thread Brad O'Hearne
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

2008-04-05 Thread Brad O'Hearne
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

2008-04-05 Thread Ian Roberts

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

2008-04-05 Thread Brad O'Hearne
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

2008-04-05 Thread Brad O'Hearne
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

2008-04-05 Thread Doug
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

2008-04-04 Thread Brad O'Hearne

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