[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Newsgroup Home]
[news.eclipse.rt.eclipselink] MOXy - mapping enums

Hi!
I'm trying to map an enumeration with MOXy using a transformation mapping but I can't get it to work. Here's what I got:

Java:
public enum Detail { GENERAL, DETAILED }

public class MyClass {
   Detail detail;
   /* getters & setters */
}
XML:
<app:MyClass detail="GENERAL" xmlns:app="http://example.com"/>
Configuration:
private XMLDescriptor createDescriptor() {
   XMLDescriptor descriptor = super.buildDescriptor(MyClass.class);
   descriptor.setDefaultRootElement("app:MyClass");
   descriptor.add(createDetailMapping());
   return descriptor;
}

private XMLTransformationMapping createDetailMapping() {
   XMLTransformationMapping mapping = new XMLTransformationMapping();
   mapping.setAttributeName("detail");
   EnumTransformer transformer = new EnumTransformer();
   mapping.setAttributeTransformer(transformer);
   mapping.addFieldTransformer("@detail", transformer);
   return mapping;
}
Transformer:
public class EnumTransformer implements AttributeTransformer, FieldTransformer {
 private AbstractTransformationMapping mapping;
 private XMLField detailField;

 public void initialize(AbstractTransformationMapping mapping) {
   this.mapping = mapping;
   NamespaceResolver namespaceResolver = ((XMLDescriptor)mapping.getDescriptor()).getNamespaceResolver();
   detailField = new XMLField("@detail");
   detailField.setNamespaceResolver(namespaceResolver);
 }

public Object buildAttributeValue(Record record, Object object, Session session) {
String detail = (String) record.get(detailField);
return Detail.valueOf(detail);
}
public Object buildFieldValue(Object instance, String fieldName, Session session) {
return mapping.getAttributeValueFromObject(instance);
}
}


When I try to run it I get this stack trace:
java.lang.NullPointerException
	at org.eclipse.persistence.oxm.record.UnmarshalRecord.startElement(UnmarshalRecord.java:551)
	at org.eclipse.persistence.internal.oxm.record.SAXUnmarshallerHandler.startElement(SAXUnmarshallerHandler.java:273)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:501)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:400)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.java:626)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3095)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:921)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
	at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
	at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
	at org.eclipse.persistence.internal.oxm.record.XMLReader.parse(XMLReader.java:99)
	at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUnmarshaller.java:215)
	at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUnmarshaller.java:192)
	at org.eclipse.persistence.oxm.XMLUnmarshaller.unmarshal(XMLUnmarshaller.java:274)
	...


Anyone knows what's going on? Thanks!