Hi,

I'm trying to use Wink with JAXB objects generated from a schema with 
inheritance. 

In the schema, I have NodeType which is the parent of DataNodeType which is the 
parent of ContainerNodeType and all of which are represented in XML as <node> 
with the appropriate value of xsi:type, e.g., <node xsi:type="DataNodeType">. 
I've generated JAXB objects from the schema with xjc.
Now in my service, I have a method which should take an XML node representation 
from a HTTP PUT:

    @Path("{nodeid}")
    @PUT
    @Consumes(MediaType.APPLICATION_XML)
    @Produces(MediaType.APPLICATION_XML)
    public JAXBElement<NodeType> putNode(@PathParam("nodeid") String nodeid, 
NodeType node) {
        System.out.println("Received node " + nodeid + " " + node.getClass());
        ObjectFactory factory = new ObjectFactory();
        return factory.createNode(node);
    }

However, when I PUT a <node xsi:type="DataNodeType"> to the service, an object 
of class NodeType is created instead of DataNodeType. If I change the method 
signature to:

public JAXBElement<NodeType> putNode(@PathParam("nodeid") String nodeid, 
DataNodeType node) 

then it unmarshalls fine but I don't want to write a different method for each 
specific different type of node. 
I've also tried a ContextResolver defining a specific JAXBContent for the 
package generated from the schema but this does not seem to do anything (even 
though it is correctly registered and called).

I can always get the raw HTTPServletRequest object and do the unmarshalling 
myself but that seems to defeat the purpose of using JAXB.

Any ideas?

        Cheers,

        Matthew

Reply via email to