A custom data binder is used to map XML schema types with Java objects. Custom data binders provide bindings for XML schema types that are not supported by the current Java API for XML-based Remote Call Procedure (JAX-RPC) specification. The custom data binder defines serialize and deserialize methods to convert between a Java object and a SOAPElement interface. A custom data binder is added to the run time system and interacts with the Web services runtime using a SOAPElement. Unlike conventional deserializers, custom data binders do not rely on the low-level parsing events from the run time to build the Java object, such as Simple API for XML (SAX). Instead, the run time builds the custom data binder by rendering the incoming SOAP message into a SOAPElement. The SOAPElement that contains the message is passed to the customer data binder. For example, if the incoming message contains a Service Data Object (SDO) datagraph, the run time system processes as follows:
Within the deserialized method, the SDOCustomBinder extracts the content
from the SOAPElement and builds a concrete DataGraph object with a commonj.sdo.DataGraph type.
The figure displays the Web services runtime flow and a custom data binder.
When a Java object is serialized, a similar process occurs. The run time locates a custom data binder and converts the Java object to a SOAPElement. The runtime serializes the SOAPElement to the raw message that is transported in the output stream. The following is an example of an XML schema that is defined by the SDO specification:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sdo="commonj.sdo" targetNamespace="commonj.sdo"> <xsd:element name="datagraph" type="sdo:DataGraphType"/> <xsd:complexType name="DataGraphType"> <xsd:complexContent> <xsd:extension base="sdo:BaseDataGraphType"> <xsd:sequence> <xsd:any minOccurs="0" maxOccurs="1" namespace="##other" processContents="lax"/> </xsd:sequence> </xsd:extension> </xsd:complexContent> </xsd:complexType> <xsd:complexType name="BaseDataGraphType" abstract="true"> <xsd:sequence> <xsd:element name="models" type="sdo:ModelsType" minOccurs="0"/> <xsd:element name="xsd" type="sdo:XSDType" minOccurs="0"/> <xsd:element name="changeSummary" type="sdo:ChangeSummaryType" minOccurs="0"/> </xsd:sequence> <xsd:anyAttribute namespace="##other" processContents="lax"/> </xsd:complexType> <xsd:complexType name="ModelsType"> <xsd:sequence> <xsd:any minOccurs="0" maxOccurs="unbounded" namespace="##other" processContents="lax"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="XSDType"> <xsd:sequence> <xsd:any minOccurs="0" maxOccurs="unbounded" namespace="http://www.w3.org/2001/XMLSchema" processContents="lax"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="ChangeSummaryType"> <xsd:sequence> <xsd:any minOccurs="0" maxOccurs="unbounded" namespace="##any" processContents="lax"/> </xsd:sequence> <xsd:attribute name="create" type="xsd:string"/> <xsd:attribute name="delete" type="xsd:string"/> </xsd:complexType> </xsd:schema>
WebSphere Application Server defines the CustomBinder interface that implements concrete custom bindings for a specific XML schema type.
The custom binding provider is used to import the custom bindings into the run time. To learn how to plug your custom data binders into the WSDL2Java command-line tool for development, see Custom binding providers. The topic Usage patterns for deploying custom data binders provides usage patterns and roles for deploying the custom data binders.
To review the documentation used for APIs and SPIs, see Reference: Generated API documentation. Follow the instructions in this topic that lead you to the API and SPI interfaces.
You can also review the specifications for the standards and
APIs used in developing Web services.