@Target(value={METHOD,FIELD})
@Retention(value=RUNTIME)
public @interface XmlReadTransformer
Purpose: XmlReadTransformer is used to allow the user direct access to the XML in order to populate their object model. XmlReadTransformer is used in conjunction with XmlWriteTransformers/XmlWriteTransformer to create a customised mapping for a specific attribute. XmlReadTransformer specifies the transformer to be invoked on the unmarshal.
Mapping a transformation: A transformer can be configured to perform both the XML instance-to-Java attribute transformation at unmarshall time (via attribute transformer) and the Java attribute-to-XML instance transformation at marshal time (via field transformer).
Example:
XML Schema
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="employee" type="employee-type"/>
<xsd:complexType name="employee-type">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="normal-hours" type="normal-hours-type"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="normal-hours-type">
<xsd:sequence>
<xsd:element name="start-time" type="xsd:string"/>
<xsd:element name="end-time" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
Employee Class
@XmlRootElement(name="employee") public class Employee { public String name; @XmlReadTransformer(transformerClass = NormalHoursTransformer.class) @XmlWriteTransformers({ @XmlWriteTransformer(transformerClass = StartTimeTransformer.class, xmlPath= "normal-hours/start-time/text()"), @XmlWriteTransformer(transformerClass = EndTimeTransformer.class, xmlPath="normal-hours/end-time/text()") }) public String[] normalHours; }
Normal Hours Transformer
public class NormalHoursTransformer implements AttributeTransformer { public String[] buildAttributeValue(Record record, Object object, Session session) { String startTime = (String)record.get("normal-hours/start-time/text()"); String endTime = (String)record.get("normal-hours/end-time/text()"); return new String[]{startTime, endTime}; } public void initialize(AbstractTransformationMapping mapping) { } } }
Modifier and Type | Optional Element and Description |
---|---|
java.lang.String |
method
The mapped class must have a method with this name which returns a value
to be assigned to the attribute (not assigns the value to the attribute).
|
java.lang.Class<? extends AttributeTransformer> |
transformerClass
User-defined class that must implement the
org.eclipse.persistence.mappings.transformers.AttributeTransformer
interface.
|
public abstract java.lang.Class<? extends AttributeTransformer> transformerClass