WSIF - 已知限制
对线程技术、对 SOAP 头和未引用的附件以及对数据类型映射使用 WSIF 包含限制时适用的已知限制。
- 线程技术
- WSIF 不是线程安全的。
- 外部标准
- WSIF 支持:
- SOAP V1.1(非 1.2 或后续版本)。
- WSDL V1.1(非 1.2 或后续版本)。
- 完整的模式语法分析
- WSIF 不支持完整的模式语法分析。例如,不处理模式中复杂类型的 Web 服务描述语言 (WSDL) 引用,也不处理属性。
- 不处理 XML 模式“redefine”元素,将其忽略。
- SOAP
- WSIF 不支持:
- 作为 <parts> 传递的 SOAP 头。
- SOAP 响应中未引用的附件,或者SOAP 附件 - 不支持的方案中详细说明的场景。
- 文档编码样式 SOAP 消息。注: 这主要不是 WSIF 限制。尽管您可以在 WSDL 中指定文档编码样式,一般不考虑将它视为有效选项,且不受 Web Services 互操作性组织 (WS-I) 支持。
- SOAP 提供程序互操作性
- 当前 WSIF 缺省 SOAP 提供程序(IBM® Web Service SOAP 提供程序)不能实现与先前的 (Apache SOAP) 提供程序上运行的服务的完全互操作。这是因为 IBM Web Service SOAP 提供程序设计为与符合 JAX-RPC 的 Web Service 进行完全互操作,而 Apache SOAP 无法提供这样的服务。有关如何克服此限制的信息,请参阅WSIF SOAP 提供程序:使用现有应用程序。
- WSIF 对 SOAP 故障的支持仅限于以下 SOAP 故障:源自 Web Service,并且该 Web Service 使用 IBM Web Service SOAP 提供程序。注: 这主要不是 WSIF 限制。当前 SOAP 故障规范未指示如何对 SOAP 故障进行编码以便它映射到 Java 异常。因此,当前每个 Web Service 运行时环境选择它自己的 SOAP 故障格式。IBM Web Service SOAP 提供程序可以识别它自己的响应 SOAP 故障,但不能识别来自另一个提供程序的 SOAP 故障。
- 数据类型映射
- 当前的 WSIF 缺省 SOAP 提供程序(IBM Web Service SOAP 提供程序)符合 JAX-RPC 类型映射规则,这些规则在创建以前的 (Apache SOAP) 提供程序之后已被最终化。这两个提供程序用相同的方法映射大多数数据类型。不同之处在于:xsd:date、xsd:dateTime、xsd:hexBinary 和 xsd:QName。如果使用这四种数据类型中的任意一种,那么客户机和服务都必须使用相同的映射规则。下表详细描述这四种数据类型的映射规则表:
表 1. Apache SOAP 和 JAX-RPC 以不同方式进行映射的四种数据类型的映射规则. 第 1 列指定 XML 数据类型,第 2 列指定 Apache SOAP 的等效数据类型,第 3 列指定 JAX-RPC 的等效数据类型。
XML 数据类型 Apache SOAP Java 映射 JAX-RPC Java 映射 xsd:date java.util.Date 不受支持 xsd:dateTime 不受支持 java.util.Calendar xsd:hexBinary 十六进制字符串 byte [ ] xsd:QName org.apache.soap.util.xml.QName javax.xml.namespace.QName - 数组和复杂类型
- WSIF 不支持一般的复杂类型,它仅处理映射到 Java bean 的复杂类型。要使用模式复杂类型,您必须编写您自己的定制串行器。Web Service 的 WSIF 出站调用支持特定复杂类型和数组,具体如下:
- WSIF 支持 WebSphere® Studio Application Developer - Integration Edition (WSAD-IE) 消息生成器生成的 Java 类(从其他地方下载 WSDL 文件时是这样)。当您使用 BPEL 编辑器,或者使用“企业服务”上下文菜单(或“业务集成”工具栏)上提供的生成操作,会自动发生基于 WSAD-IE 的生成。
- WSIF 不支持其他工具(包含基本 WSAD 工具)生成的 Java bean。
- 对于 WSAD-IE 生成的 Java bean,WSDL 中定义的属性不起作用。即,尽管这些属性出现在生成的 Java bean 中以表示复杂类型,但它们不出现在 WSIF 创建的 SOAP 请求中。
- 当数组是 Java bean 的字段时,不受 WSIF 支持。即,WSIF 只支持作为指定的 <part> 传递的数组。如果数组打包在 Java bean 内,那么不会用相同方法序列化该数组。
- 对象序列化
- WSIF 不支持不同发行版间的对象的序列化。
- 异步调用
- WSIF 支持所有提供程序的异步调用。对于 JMS 和 SOAP over JMS 提供程序,WSIF 还支持异步调用。您应该在尝试执行异步操作之前调用 supportsAsync() 方法。
- EJB 提供程序
- WSIF EJB 提供程序的目标服务必须是远程 Home 接口,不可以是 EJB 本地 Home 接口。另外,在客户机类路径上必须存在 EJB 存根类。
- 在 WebSphere Application Server 外部运行
- 不支持在 WebSphere Application Server 外部使用 WSIF。