Jump to: navigation, search

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

link="http://wiki.eclipse.org/EclipseLink"
EclipseLink
Website
Download
Community
Mailing ListForumsIRC
Bugzilla
Open
Help Wanted
Bug Day
Contribute
Browse Source

Elug api package icon.png 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>