Proveedores de enlaces personalizados para aplicaciones JAX-RPC
Un proveedor de enlaces personalizados es el empaquetamiento de clases de enlazador de datos personalizado con un archivo de metadatos declarativo. El objetivo principal de un proveedor de enlaces personalizados es agregar enlazadores de datos personalizados relacionados para dar soporte a casos de ejemplo de usuario específicos. El proveedor de enlaces personalizados se utiliza para conectar los enlazadores de datos personalizados con las herramientas de emisor y el sistema de tiempo de ejecución para que estas herramientas puedan generar los artefactos adecuados y el sistema de tiempo de ejecución pueda aumentar el sistema de correlaciones de tipos existente para reflejar los enlazadores de datos personalizados aplicados e invocarlos.
Un proveedor de enlaces personalizados funciona con un tipo de esquema XML específico, mientras que las aplicaciones implican algunos tipos de esquemas XML relacionados. Es necesario un mecanismo para agregar y declarar distintos enlazadores de datos personalizados para proporcionar una solución de enlaces completa. El concepto de proveedor de enlaces personalizados define un modelo declarativo que puede utilizarse para conectar un conjunto de enlazadores de datos personalizados con las herramientas de emisor o el sistema de tiempo de ejecución.
Consulte la información de enlazadores de datos personalizados y la información en la interfaz CustomBinder para obtener más información sobre los enlazadores de datos personalizados y la API CustomBinder que se incluyen en WebSphere Application Server para definir enlazadores de datos personalizados. Después de haber definido los enlazadores de datos personalizados, estará preparado para desplegar el paquete de enlazadores personalizados. Para saber cómo desplegar este paquete, consulte la información sobre los patrones de uso para desarrollar enlazadores de datos personalizados para aplicaciones JAX-RPC.
El archivo de metadatos declarativo, CustomBindingProvider.xml, es un archivo XML que se empaqueta con las clases de proveedor personalizado en un único archivo JAR (Java™ archive) y que está ubicado en /META-INF/services/directory. Después del empaquetamiento de un archivo JAR, la herramienta de línea de mandatos WSDL2Java y el sistema de tiempo de ejecución pueden utilizar la información de binarios y el archivo de metadatos ubicado en archivo JAR.
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema
targetNamespace=
"http://www.ibm.com/webservices/customdatabinding/2004/06"
xmlns:customdatabinding=
"http://www.ibm.com/webservices/customdatabinding/2004/06"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="qualified">
<xsd:element name="provider" type="customdatabinding:providerType"/>
<xsd:complexType name="providerType">
<xsd:sequence>
<xsd:element name="description" type="xsd:string" minOccurs="0"/>
<xsd:element name="mapping" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="description" type="xsd:string" minOccurs="0"/>
<xsd:element name="xmlQName" type="xsd:QName"/>
<xsd:element name="javaName" type="xsd:string"/>
<xsd:element name="qnameScope"
type="customdatabinding:qnameScopeType"/>
<xsd:element name="binder" type="xsd:string"/>
</xsd:sequence>
/xsd:complexType>
</xsd:element>
<xsd:attribute name="scope"
type="customdatabinding:ProviderScopeType" default="module"/>
</xsd:sequence>
</xsd:complexType
<xsd:simpleType name="qnameScopeType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="simpleType"/>
<xsd:enumeration value="complexType"/>
<xsd:enumeration value="element"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:simpleType name="ProviderScopeType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="server"/>
<xsd:enumeration value="application"/>
<xsd:enumeration value="module"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:schema>
<cdb:provider
xmlns:cdb="http://www.ibm.com/webservices/customdatabinding/2004/06"
xmlns:sdo="commonj.sdo">
<cdb:mapping>
<cdb:xmlQName>sdo:DataGraphType</cdb:xmlQName>
<cdb:javaName>commonj.sdo.DataGraph</cdb:javaName>
<cdb:qnameScope>complexType</cdb:qnameScope>
<cdb:binder>test.sdo.SDODataGraphBinder</cdb:binder>
</cdb:mapping>
</cdb:provider>
Es necesario importar los enlazadores de datos personalizados a la herramienta de línea de mandatos WSDL2Java para fines de desarrollo. Los enlazadores de datos personalizados afectan a cómo los artefactos de desarrollo, incluidos los datos de correlación de JSR 109 y la SEI (Service Endpoint Interface), se generan a partir del archivo WSDL (Web Services Description Language). La herramienta de línea de mandatos WSDL2Java se entrega con WebSphere Application Server y utiliza el archivo JAR (Java archive) de enlazadores personalizados o el paquete de enlazadores personalizados para generar estos artefactos de desarrollo.
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://sdo.test"
xmlns:impl="http://sdo.test"
xmlns:intf="http://sdo.test"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sdo="commonj.sdo">
<wsdl:types>
<schema elementFormDefault="qualified" targetNamespace="http://sdo.test"
xmlns="http://www.w3.org/2001/XMLSchema" xmlns:sdo="commonj.sdo">
<import namespace="commonj.sdo" schemaLocation="sdo.xsd"/>
</schema>
</wsdl:types>
<wsdl:message name="echoResponse">
<wsdl:part element="sdo:datagraph" name="return"/>
</wsdl:message>
<wsdl:message name="echoRequest">
<wsdl:part element="sdo:datagraph" name="parameter"/>
</wsdl:message>
<wsdl:portType name="EchoService">
<wsdl:operation name="echo">
<wsdl:input message="impl:echoRequest" name="echoRequest"/>
<wsdl:output message="impl:echoResponse" name="echoResponse"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="EchoServiceSoapBinding" type="impl:EchoService">
<wsdlsoap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="echo">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="echoRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="echoResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="EchoServiceService">
<wsdl:port binding="impl:EchoServiceSoapBinding" name="EchoService">
<wsdlsoap:address location="http://<uri>"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Si ejecuta el mandato WSDL2Java sin
el paquete de enlaces de datos personalizados, se genera la siguiente SEI
(Service Endpoint Interface) con un tipo de parámetro, tal como dicta la
especificación JAX-RPC:public interface EchoService extends java.rmi.Remote {
public javax.xml.soap.SOAPElement
echo(javax.xml.soap.SOAPElement parameter)
throws java.rmi.RemoteException;
}
Al ejecutar el mandato WSDL2Java con el paquete de enlaces
de datos personalizados, los enlazadores de datos personalizados se
utilizan para generar el tipo de parámetro. Para aplicar los enlazadores
de datos personalizados, utilice la opción -classpath en la herramienta
WSDL2Java.
La herramienta busca la classpath para ubicar todos los archivo
con la misma vía de acceso de archivo de
/META-INF/services/CustomBindingProvider.xml.
A continuación, se muestra un ejemplo sobre cómo se puede utilizar el mandato para generar una Interfaz de punto final de servicio con el tipo de parámetro commonj.sdo.Datagraph:WSDL2Java -role develop-server -container web classpath sdobinder.jar echo.wsdl
La SEI (Service Endpoint Interface) generada tiene el siguiente aspecto:public interface EchoService extends java.rmi.Remote {
public commonj.sdo.DataGraph
echo(commonj.sdo.DataGraph parameter)
throws java.rmi.RemoteException;
}
El archivo JAR empaquetado con los enlazadores personalizados tiene
que estar disponible durante el tiempo de ejecución para garantizar que se
invoca el cliente de servicio web, independientemente de si es un cliente basado en archivos stub o un cliente DII (Dynamic Invocation Interface). Lo mismo se aplica al servicio.