JAXB unmarshalling cannot be configured to use the ObjectFactory
----------------------------------------------------------------

                 Key: CXF-1674
                 URL: https://issues.apache.org/jira/browse/CXF-1674
             Project: CXF
          Issue Type: Bug
    Affects Versions: 2.0.7, 2.1.1
            Reporter: Andreas Benneke


JAXB requires to explicitly configure the Unmarshaller to use the ObjectFactory 
using setProperty - it will otherwise use reflection (newInstance). An example:

package test;

@XmlRootElement
@XmlType(name = "data")
public class Data {
}

public class ExtendedData extends Data {
}

@XmlRegistry
public class ObjectFactory {
   public Data createData() {
      return new ExtendedData();
   }
}

public class Test {

   public static void main(String[] args) throws Exception {
      JAXBContext context = 
JAXBContext.newInstance(Test.class.getPackage().getName());
      Unmarshaller u1 = context.createUnmarshaller();

      String xml = "<?xml version=\"1.0\"?><data/>";
      System.out.println(u1.unmarshal(new 
StringReader(xml)).getClass().getName());

      Unmarshaller u2 = context.createUnmarshaller();
      
u2.setProperty(com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.FACTORY,
               new ObjectFactory());
      System.out.println(u2.unmarshal(new 
StringReader(xml)).getClass().getName());
   }
}

Output:
test.Data
test.ExtendedData

To allow setting the above property JAXBDataBinding, JAXBEncoderDecoder and 
DataReaderImpl would require "unmarshallerProperties" (in line with existing 
marshallerProperties for the DataWriterImpl).


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to