JAX-RPC 应用程序的 CustomBinder 接口
WebSphere® Application Server 定义了 CustomBinder 接口,可以为 Java™ API for XML-based Remote Call Procedure (JAX-RPC) 应用程序实现该接口,以便为特定 XML 模式类型提供具体定制数据绑定程序。
除了 deserialize 和 serialize 方法之外,CustomBinder 接口具有三个属性。这些属性是 XML 模式类型的 QName、QName 作用域以及模式类型映射的 Java 类型。可以通过相应的 getter 方法来访问这些属性。
getQName
getQName 方法返回目标 XML 模式类型的 QName。定制数据绑定程序仅使用根级别模式类型。
对于匿名类型,getQName 方法返回包含元素的 QName。
对于已命名类型,getQName 返回 complexType 或 simpleType 的 QName。
getQNameScope
getQNameScope 方法返回绑定程序 qnameScope 属性,该属性指示模式类型是已命名类型还是匿名类型。qnameScope 属性值可以是 complexType(对于 <xsd:complexType>)、simpleType(对于 <xsd:simpleType>)或 element(对于使用匿名类型定义的 <xsd:element>)。
<xsd:element name="data1">
<xsd:complexType>
...
</xsd:complexType>
</xsd:element>
<xsd:element name= "data2" type="data2Type"/>
<xsd:complexType name="data2Type">
...
</xsd:complexType>
匿名类型 data1 的 qNameScope 为 element 且 qName 为 data1。类型 data2Type 的 qNameScope 为 complexType 且
qName 为 data2Type。元素 data2 不出现在定制数据绑定程序中。定制数据绑定程序仅处理类型而不处理元素。
getJavaName
getJavaName 方法返回映射到已命名或匿名类型的 Java 类型的标准类名。该类可以是接口类或具体类。从 deserialize 方法返回的对象具有一个类型,该类型与由 getJavaName 方法返回的 Java 类型兼容。
serialize
serialize 方法返回定制数据绑定程序从 Java 对象构建的 SOAPElement。Java 对象是从运行时系统传递的,并且需要与从 getJavaName 方法返回的内容相匹配。SOAPElement 参数没有子元素,但是它确实具有一个有效的 QName。此参数是对创建最终 SOAPElement 的绑定程序的引用。
在大多数情况下,绑定程序实现会将子元素追加至根 SOAPElement。运行时系统确保 SOAPElement QName 正确。因此,已命名类型的定制数据绑定程序会保留根元素的 QName,因为该绑定程序不识别 enclosing 元素。匿名类型的绑定程序实现始终应该将 QName 包括在与定义的模式类型匹配的已返回 SOAPElement 中。WebSphere Application Server 在 CustomBindingContext 参数中没有具体方法。
deserialize
deserialize 方法返回定制数据绑定程序从传递的根 SOAPElement 构建的 Java 对象。返回的 Java 对象的对象类型必须与从 getJavaName 方法返回的内容匹配。与参数 serialize 方法不同,传递的 SOAPElement 包含带有必需的名称空间声明的原始 XML 数据。
下面是 SDO DataGraph 绑定程序的实现的示例,其中 convertToSDO 和 convertToSAAJ 实用程序方法在 SOAPElement 与 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 is a utility method to convert
// the SDO DataGraph to the SOAPElement
return convertToSAAJ(bean, rootNode);
public Object deserialize(
SOAPElement source,
CustomBindingContext context)
throws javax.xml.soap.SOAPException {
// convertToSDO is a utility method to convert
// the SOAPElement to the SDO DataGraph
return convertToSDO(source);
}
}
要更多地了解定制数据绑定程序,请参阅“用于 JAX-RPC 应用程序的定制数据绑定程序”信息。要了解如何将定制数据绑定程序插入命令行工具 WSDL2Java 以进行开发,请参阅“用于 JAX-RPC 应用程序的定制绑定提供程序”信息。