Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Difference between revisions of "EclipseLink/UserGuide/MOXy/Simple Values/Special Schema Types/Binary Types"
Line 10: | Line 10: | ||
= Binary Types= | = Binary Types= | ||
− | There are a few extra things to consider when mapping to fields of type '''byte[ ]''' or '''Byte[ ]'''. | + | There are a few extra things to consider when mapping to fields of type '''byte[]''' or '''Byte[]'''. |
== Binary Formats - Base64 and Hex == | == Binary Formats - Base64 and Hex == | ||
− | EclipseLink supports marshalling and unmarshalling binary data from two different representation formats: '''base64Binary''' (default) and '''hexBinary'''. You can specify the desired binary format using the '''@XmlSchemaType''' annotation, or '''<xml-schema-type>''' element in EclipseLink OXM. The example below shows the result of marshalling the same '''byte[ ]''' to each of these formats. | + | EclipseLink supports marshalling and unmarshalling binary data from two different representation formats: '''base64Binary''' (default) and '''hexBinary'''. You can specify the desired binary format using the '''@XmlSchemaType''' annotation, or '''<xml-schema-type>''' element in EclipseLink OXM. The example below shows the result of marshalling the same '''byte[]''' to each of these formats. |
<div style="width:700px"> | <div style="width:700px"> | ||
Line 75: | Line 75: | ||
− | == byte[ ] versus Byte[ ] == | + | == byte[] versus Byte[] == |
− | Unlike other Java primitive/wrapper types, Eclipselink differentiates between '''byte[ ]''' (primitive) and '''Byte[ ]''' (wrapper) data types. By default, '''byte[ ]''' will marshal to an element or attribute of type '''base64Binary''', whereas '''Byte[ ]''' will marshal each byte as its own element, as illustrated by the following example: | + | Unlike other Java primitive/wrapper types, Eclipselink differentiates between '''byte[]''' (primitive) and '''Byte[]''' (wrapper) data types. By default, '''byte[]''' will marshal to an element or attribute of type '''base64Binary''', whereas '''Byte[]''' will marshal each byte as its own element, as illustrated by the following example: |
<div style="width:700px"> | <div style="width:700px"> |
Revision as of 16:28, 28 June 2011
EclipseLink MOXy
EclipseLink | |
Website | |
Download | |
Community | |
Mailing List • Forums • IRC • mattermost | |
Issues | |
Open • Help Wanted • Bug Day | |
Contribute | |
Browse Source |
Key API
Binary Types
There are a few extra things to consider when mapping to fields of type byte[] or Byte[].
Binary Formats - Base64 and Hex
EclipseLink supports marshalling and unmarshalling binary data from two different representation formats: base64Binary (default) and hexBinary. You can specify the desired binary format using the @XmlSchemaType annotation, or <xml-schema-type> element in EclipseLink OXM. The example below shows the result of marshalling the same byte[] to each of these formats.
package example; import javax.xml.bind.annotation.*; @XmlRootElement public class BinaryData { @XmlSchemaType(name="hexBinary") public byte[] hexBytes; @XmlSchemaType(name="base64Binary") public byte[] base64Bytes; }
... <java-type name="example.BinaryData"> <xml-root-element/> <java-attributes> <xml-element java-attribute="hexBytes"> <xml-schema-type name="hexBinary"/> </xml-element> <xml-element java-attribute="base64Bytes"> <xml-schema-type name="base64Binary"/> </xml-element> </java-attributes> </java-type> ...
BinaryData b = new BinaryData(); b.hexBytes = new byte[] {2,4,8,16,32,64}; b.base64Bytes = b.hexBytes; jaxbContext.createMarshaller().marshal(b, System.out);
<?xml version="1.0" encoding="UTF-8"?> <binaryData> <hexBytes>020308102040</hexBytes> <base64Bytes>AgMIECBA</base64Bytes> </binaryData>
byte[] versus Byte[]
Unlike other Java primitive/wrapper types, Eclipselink differentiates between byte[] (primitive) and Byte[] (wrapper) data types. By default, byte[] will marshal to an element or attribute of type base64Binary, whereas Byte[] will marshal each byte as its own element, as illustrated by the following example:
package example; import javax.xml.bind.annotation.*; @XmlRootElement public class BinaryData { public byte[] primitiveBytes; public Byte[] byteObjects; }
BinaryData b = new BinaryData(); b.primitiveBytes = new byte[] {34,45,56,67,78,89,89,34,23,12,12,11,2}; b.byteObjects = new Byte[] {23,1,112,12,1,64,1,14,3,2}; jaxbContext.createMarshaller().marshal(b, System.out);
<?xml version="1.0" encoding="UTF-8"?> <binaryData> <primitiveBytes>Ii04Q05ZWSIXDAwLAg==</primitiveBytes> <byteObjects>23</byteObjects> <byteObjects>1</byteObjects> <byteObjects>112</byteObjects> <byteObjects>12</byteObjects> <byteObjects>1</byteObjects> <byteObjects>64</byteObjects> <byteObjects>1</byteObjects> <byteObjects>14</byteObjects> <byteObjects>3</byteObjects> <byteObjects>2</byteObjects> </binaryData>