用于 JAX-RPC 应用程序的定制绑定提供程序
定制绑定提供程序是将定制数据绑定程序类和声明式元数据文件打包的结果。定制绑定提供程序的主要用途是聚集相关定制数据绑定程序以支持特殊的用户方案。定制绑定提供程序用来将定制数据绑定程序插入发射器工具和运行时系统,以便发射器工具可以生成适当的工件,而运行时系统可以增大它的现有类型映射系统,以反映已应用的定制数据绑定程序并调用它们。
定制绑定提供程序使用特定 XML 模式类型,而应用程序涉及到很少的相关 XML 模式类型。您需要一种机制来聚集和声明各种定制数据绑定程序,以提供完整的绑定解决方案。定制绑定提供程序这一概念定义一个声明式模型,可以使用该模型来将一组定制数据绑定程序插入发射器工具或运行时系统。
请参阅定制数据绑定程序信息和有关 CustomBinder 接口的信息,以更多地了解定制数据绑定程序和 WebSphere® Application Server 中用来定义定制数据绑定程序的 CustomBinder API。在定义定制数据绑定程序后,就可以部署定制绑定程序包了。要了解如何部署此包,请参阅有关用于为 JAX-RPC 应用程序部署定制数据绑定程序的使用模式的信息。
声明式元数据文件 CustomBindingProvider.xml 是一个 XML 文件,它与定制提供程序类打包在单个 Java™ 归档 (JAR) 文件中并位于 /META-INF/services/directory 目录。一旦将提供程序 JAR 文件打包,命令行工具 WSDL2Java 和运行时系统就可以使用位于该 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>
需要将定制数据绑定程序导入命令行工具 WSDL2Java 用于进行开发。定制数据绑定程序会影响如何从 Web 服务描述语言 (WSDL) 文件中生成开发工件(包括“服务端点接口”和 JSR 109 映射数据)。命令行工具 WSDL2Java 是随 WebSphere Application Server 一起提供的,它使用定制绑定程序 Java 归档文件或定制绑定程序包来生成这些开发工件。
<?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>
如果在没有定制数据绑定包的情况下运行 WSDL2Java 命令,那么会生成以下“服务端点接口”及一种参数类型,如 JAX-RPC 规范所规定的那样:public interface EchoService extends java.rmi.Remote {
public javax.xml.soap.SOAPElement
echo(javax.xml.soap.SOAPElement parameter)
throws java.rmi.RemoteException;
}
当您在具有定制数据绑定包的情况下运行 WSDL2Java 命令时,定制数据绑定程序用来生成参数类型。要应用定制数据绑定程序,请在 WSDL2Java 工具中使用
-classpath 选项。此工具将搜索它的类路径,以找到所有具有相同文件路径 /META-INF/services/CustomBindingProvider.xml 的文件。以下是一个示例,它说明如何使用命令来生成“服务端点接口”和参数类型 commonj.sdo.Datagraph:WSDL2Java -role develop-server -container web classpath sdobinder.jar echo.wsdl
生成的“服务端点接口”看起来为如下所示:public interface EchoService extends java.rmi.Remote {
public commonj.sdo.DataGraph
echo(commonj.sdo.DataGraph parameter)
throws java.rmi.RemoteException;
}
通过将定制绑定程序包打包而获得的 JAR 文件在运行时必须可用,以确保调用 Web Service 客户机(不管它是一个基于存根的客户机还是一个“动态调用接口”(DII) 客户机)。对于服务也是如此。