使用复杂类型
通过将复杂类型映射到 Java™ 类 WSIF 支持用户定义的复杂类型。可手动或自动指定此映射。
关于此任务
任何对用于手动映射所使用的 WSIFService mapType 和 mapPackage 方法的调用将覆盖任何自动产生的等价映射信息。此覆盖有助于维护向后兼容性,并也允许减少标准映射。
过程
- 手动映射复杂类型。
在您手动创建这些映射时使用的方法取决于提供程序。对于 Java 和 EJB 提供程序,映射在 Web 服务描述语言 (WSDL) 文件中的绑定元素中指定。以下示例提供指定映射的语法:
<binding .... > <ejb:binding|java:binding/> <format:typeMapping style="Java" encoding="Java"/>? <format:typeMap typeName="qname" formatType="nmtoken"/>* </format:typeMapping> ... </binding>
在本示例中:- 问号(“?”)表示“可选”,而星号(“*”)表示“0 或更多”。
- format:typeMap typeName 属性是某个操作使用的复杂类型或简单类型的限定名。
- format:typeMap formatType 属性是 Java 类的标准类名,由 typeName 指定的元素映射到此 Java 类。
如果使用 Apache SOAP 提供程序,那么通过 org.apache.wsif.WSIFService 接口上的两个方法用客户机代码指定复杂类型到 Java 类的映射:
public void mapType(QName elementType, Class javaType)
和
public void mapPackage(String namespaceURI, String packageName)
使用 mapType 方法指定 XML 模式元素和 Java 类之间的映射。该方法用 QName 表示复杂类型或简单类型,以及它映射到的相应的 Java 类。
使用 mapPackage 方法指定名称空间和 Java 包之间更的一般的映射。任何其名称空间与映射的名称空间匹配的定制、复杂或简单类型都将映射为相应包中的 Java 类。此类的名称是对 Java 命名约定使用标准 XML 从复杂类型的名称派生的。
- 自动映射复杂类型。
对于 WSDL 中定义的复杂类型(其中生成的 bean 用于在 Java 中表示此类型),Web Services Invocation Framework (WSIF) 编程模型要求调用 WSIFService.mapType() 方法。此调用告诉 WSIF 用 QName 标识的表示 XML 模式类型的包和 bean 的类名。为使其简单化,WSIFService.mapPackage() 方法提供了一种机制以指定其通用版本,其中,指定包内的任何类均映射到一个 QName 的名称空间。这是一个手动将 XML 模式类型映射到一个 Java 类并再反向映射(一个映射条目提供一个双向映射)的机制。
有许多种方法将表示 XML 模式类型名称的 Qname 转换成 Java 包名称和类。要启用自动类型映射,在 WSIFServiceFactory 实例上设置 WSIF_FEATURE_AUTO_MAP_TYPES 功能:
WSIFServiceFactory factory = WSIFServiceFactory.newInstance(); factory.setFeature(WSIFConstants.WSIF_FEATURE_AUTO_MAP_TYPES, new Boolean(true));
WSIF 通过将 XML 模式类型 QName 的 URI 部分转换为包名称,并将局部部件转换为类名,映射类型。WSIF 使用 WSIFUtils 方法 getPackageNameFromNamespaceURI 和 getJavaClassNameFromXMLName 执行此映射。


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twsf_comt
文件名:twsf_comt.html