JAX-RPC 應用程式的 CustomBinder 介面

WebSphere® Application Server 定義一個 CustomBinder 介面,您可以針對 Java™ API for XML-based Remote Call Procedure (JAX-RPC) 應用程式實作此介面,以提供特定 XML 綱目類型的具體自訂資料連結器。

除了解除序列化和序列化方法之外, CustomBinder 介面還具有三個內容。 這些內容是 XML 綱目類型的完整名稱、完整名稱範圍,以及綱目類型所對映的 Java 類型。 這些內容可透過對應的 getter 方法來存取。

getQName

getQName 方法會傳回目標 XML 綱目類型的完整名稱。 自訂資料連結程式只能使用根層次綱目類型。

對於匿名類型, getQName 方法會傳回包含元素的 QName。

對於具名類型, getQName 方法會傳回 complexType 或 simpleType 的 QName。

getQNameScope

getQNameScope 方法會傳回連結程式 qnameScope 內容,指出綱目類型是具名類型還是匿名類型。 The qnameScope property value can be complexType for an <xsd:complexType>, simpleType for an <xsd:simpleType> or 元素 for an <xsd:element> that is defined with an anonymous type.

在下列綱目中, data1 是使用匿名類型定義的元素。 元素 data2是使用具名類型 data2Type來定義的。
<xsd:element name="data1">
	<xsd:complexType>
		...
	</xsd:complexType>
</xsd:element>

<xsd:element name= "data2" type="data2Type"/>
<xsd:complexType name="data2Type">
	...
</xsd:complexType>
匿名類型 data1具有元素的 qNameScope 及 data1的 qName。 類型 data2Type的 qNameScope 為 complexType , qName 為 data2Type。

元素 data2未呈現在自訂資料連結程式中。 自訂資料連結程式只會處理類型,而不會處理元素。

getJavaName

getJavaName 方法會傳回對映至具名或匿名類型之 Java 類型的完整類別名稱。 類別可以是介面或具體類別。 從解除序列化方法傳回的物件具有與 getJavaName 方法所傳回 Java 類型相容的類型。

序列化

serialize 方法會傳回自訂資料連結程式從 Java 物件建置的 SOAPElement。 Java 物件從執行時期系統傳遞,且預期符合 getJavaName 方法所傳回的內容。 SOAPElement 參數沒有子元素,但它具有有效的完整名稱。 此參數是連結程式建立最終 SOAPElement 的參照。

在大部分情況下,連結程式實作會將子元素附加至根 SOAPElement。 執行時期系統保證 SOAPElement 完整名稱正確。 因此,具名類型的自訂資料連結程式會保留根元素的完整名稱,因為連結程式不知道含括元素。 匿名類型的連結程式實作應該一律包含所傳回 SOAPElement 中符合所定義綱目類型的完整名稱。 WebSphere Application Server 在 CustomBindingContext 參數中沒有具體方法。

解除序列化

解除序列化方法會傳回自訂資料連結程式從所傳遞的根 SOAPElement 建置的 Java 物件。 所傳回 Java 物件的物件類型必須符合 getJavaName 方法所傳回的物件類型。 與參數序列化方法不同,所傳遞的 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 應用程式的自訂連結提供者資訊。