Interfaz CustomBinder para aplicaciones JAX-RPC
WebSphere Application Server define una interfaz CustomBinder que se puede implementar para las aplicaciones JAX-RPC (Java™ API for XML-based Remote Call Procedure) para proporcionar enlazadores de datos personalizados concretos para un tipo de esquema XML específico.
La interfaz CustomBinder tiene tres propiedades, además de los métodos deserialize y serialize. Estas propiedades son el QName del tipo de esquema XML, el ámbito de QName y el tipo Java con el que se correlaciona el tipo de esquema. Se puede acceder a las propiedades por medio de los métodos getter correspondientes.
getQName
El método getQName devuelve el QName del tipo de esquema XML de destino. Los enlazadores de datos personalizados únicamente trabajan con el tipo de esquema de nivel de raíz.
En los tipos anónimos, el método getQName devuelve el QName del elemento que lo contiene.
Para los tipos con nombre, el método getQName devuelve el QName de complexType o de simpleType.
getQNameScope
El método getQNameScope devuelve la propiedad qnameScope del enlazador que indica si el tipo de esquema es un tipo con nombre o un tipo anónimo. El valor de la propiedad qnameScope puede ser complexType para un <xsd:complexType>, simpleType para <xsd:simpleType> o element para un <xsd:element> definido con un tipo anónimo.
<xsd:element name="data1">
<xsd:complexType>
...
</xsd:complexType>
</xsd:element>
<xsd:element name= "data2" type="data2Type"/>
<xsd:complexType name="data2Type">
...
</xsd:complexType>
El tipo anónimo, data1, tiene un qNameScope del elemento y
un qName de data1. El tipo, data2Type, tiene un qNameScope de complexType
y un qName de data2Type.El elemento, data2, no se representa en el enlazador de datos personalizado. El enlazador de datos personalizado sólo procesa los tipos y no los elementos.
getJavaName
El método getJavaName devuelve el nombre de clase con todos los calificadores para el tipo Java que se correlaciona con el tipo con nombre o con el tipo anónimo. La clase puede ser una interfaz o una clase concreta. El objeto que devuelve el método deserialize tiene un tipo compatible con el tipo Java que devuelve el método getJavaName.
serialize
El método serialize devuelve el elemento SOAPElement que el enlazador de datos personalizado crea a partir del objeto Java. El objeto Java se pasa desde el sistema de tiempo de ejecución y se espera que coincida con lo que devuelve el método getJavaName. El parámetro SOAPElement no tiene elementos hijo pero tiene un QName válido. Este parámetro es una referencia para el enlazador cuando crea el elemento SOAPElement final.
En la mayor parte de los casos, la implementación del enlazador añade los elementos hijo al elemento SOAPElement raíz. El sistema de tiempo de ejecución garantiza que el QName del elemento SOAPElement es correcto. Por lo tanto, el enlazador de datos personalizado para tipos con nombre conserva el QName del elemento raíz debido a que el enlazador desconoce el elemento que lo encierra. La implementación del enlazador para un tipo anónimo debe incluir siempre el QName del elemento SOAPElement que coincide con el tipo de esquema definido. WebSphere Application Server no tiene métodos concretos en el parámetro CustomBindingContext.
deserialize
El método deserialize devuelve un objeto Java que el enlazador de datos personalizado crea a partir del elemento SOAPElement raíz que se ha pasado. El tipo de objeto del objeto Java devuelto debe coincidir con lo que devuelve el método getJavaName. A diferencia del parámetro del método serialize, el elemento SOAPElement contiene los datos XML originales con las declaraciones de espacio de nombres necesarias.
El siguiente es un ejemplo de una implementación de enlazador DataGraph de SDO en la que los métodos de programas de utilidad convertToSDO y convertToSAAJ realizan la conversión entre un SOAPElement y un objeto SDO.
package test.sdo.binder;
import javax.xml.namespace.QName;
import javax.xml.soap.SOAPElement;
import com.ibm.wsspi.webservices.binding.CustomBinder;
import com.ibm.wsspi.webservices.binding.CustomBindingContext;
public class DataGraphBinder implements CustomBinder {
public QName getQName() {
return new QName("commonj.sdo", "DataGraphyType");
}
public String getJavaName() {
return CustomBinder.QNAME_SCOPE_COMPLEXTYPE;
}
public String getJavaName() {
return commonj.sdo.DataGraph.class.getName();
}
public javax.xml.soap.SOAPElement serialize(
Object bean,
SOAPElement rootNode,
CustomBindingContext context)
throws javax,xml.soap.SOAPException {
// convertToSAAJ es un método de programa de utilidad para convertir
// SDO DataGraph a SOAPElement
return convertToSAAJ(bean, rootNode);
public Object deserialize(
SOAPElement source,
CustomBindingContext context)
throws javax.xml.soap.SOAPException {
// convertToSDO es un método de programa de utilidad para convertir
// SOAPElement a SDO DataGraph
return convertToSDO(source);
}
}
Para obtener más información acerca de los enlazadores de datos personalizados, consulte los enlazadores de datos personalizados para la información de aplicaciones JAX-RPC. Si desea aprender a conectar enlazadores de datos personalizados a la herramienta de línea de mandatos WSDL2Java para el desarrollo, consulte la información acerca de los proveedores de enlaces personalizados para aplicaciones JAX-RPC.