关于此任务
WSIF API 支持调用 Web 服务描述语言 (WSDL) 定义的 Web Service。意图将 WSIF 用于 WSIF 客户机和 Web Service 中介。
WSIF API 由 WSDL 中的抽象服务描述驱动;它完全独立于使用的绑定。此独立性使 API 工作更自然,因为它使用 WSDL 术语表示消息部件、操作和其他项。
WSIF API 设计为用于 WSDL 用途模型:
- 选择一个支持所需端口类型的端口。
- 通过提供必需的抽象输入消息(其包含必需部分)来调用操作,而无需担心消息如何映射到特定绑定协议。
其他 Web Service API(例如,SOAP API)不在 WSDL 上设计,而是为具有其关联语法的特定绑定协议设计的;例如,目标 URI 和编码样式。
在以下过程中描述了主要的 WSIF API 接口。
注: Apache 不再支持 WSIF。
- 创建一条通过 WSIFMessage 接口发送到端口的消息。
在 WSDL 中,消息描述操作的输入或输出的抽象类型。相应的 WSIF 类是 WSIFMessage,其在内存中代表操作的输入或输出。WSIFMessage 接口从 WSDL 定义的抽象类型分隔数据表示法。
WSIFMessage 类是一组命名部件的容器。WSIFMessage 类可以在 Java 虚拟机 (JVM) 之间发送。
- 选择在运行时是将 WSIF 消息表示为 Java 类还是 XML。
有二种固有的方法可以在运行时环境中表示 WSDL 消息:
- 基于 WSDL 到 Java 的映射(如 Java APIm> API
for XML-based remote procedure call (JAX-RPC) 提供的映射)生成的 Java 类。
- 数据的 XML 表示法,例如使用 SOAP 编码。
每个选项提供不同方案中的优点。在标准 Java 客户机中使用 WSIF 时,Java 类是固有的方法。但在其他方案(其中 WSIF 在中介中使用)中,将 WSDL 消息保留为 SOAP 编码格式可能更有效。在消息中用于定义消息的样式必须一致,因此一条消息中的所有部分必须一致。字符串 -
getRepresentationStyle() - 始终返回
空。这表明此 WSIFMessage 类中的部分表示为 Java 对象。
- 获取并设置 WSIF 消息的部分。
您添加部件到带有 setObjectPart 的 WSIFMessage 类或设置类型部件方法。命名每个部分。消息中的部分名必须唯一。如果您一次设置了多个部件,使用最后设置的那个。
您通过带有 getObjectPart 的 WSIFMessage 类名称或获取类型部件方法来检索部件。如果命名的部件不存在,那么此方法会返回 WSIFException 错误。
您可以使用 Iterator 来通过 getParts() 和 getPartNames() 方法从消息中检索部件。
设置部分的顺序不重要,但如果按 WSDL 指定的参数顺序设置部件,消息实现可能更有效。
WSIFMessage 类可克隆并可序列化。如果部件集不可克隆,那么实现可尝试使用序列化来克隆它们。如果部分也不可序列化,那么若尝试克隆,将抛出 CloneNotSupportedException。
- 设置 WSIF 消息名称。
除了包含的部件外,WSIFMessage 类还具有一个消息名称。这是 WSDL 和 WSIF 支持的操作重载必需的。
有关 WSIFMessage 接口 (/wsi/org/apache/wsif/WSIFMessage.html) 的更多信息,请参阅随 WSIF 提供的生成的 API 文档。
- 通过 WSIFService 接口和 WSIFServiceFactory 类查找端口工厂或服务。
WSIFService 接口是一个端口工厂,它对 WSDL 方法进行建模并支持该方法,其中服务在一个或多个端口上可用。此工厂隐藏了端口的实现。WSIF 支持动态端口,这些端口基于特定协议和传输,并在运行时使用 WSDL 进行配置。例如,动态 SOAP 端口可以调用基于该服务的 WSDL 描述的任何 SOAP 服务,因此,您可以在运行时隐藏和修改可用端口集。
要从位于某个 Web 地址的 WSDL 文档中或代码生成的代码库中找到服务,请使用 WSIFServiceFactory 类。
- 通过 WSIFPort 接口和 WSIFOperation 接口调用操作。
WSIFPort 接口处理调用操作的详细信息。此端口提供对服务实现的访问权。
WSDL 文档可提供许多不同的 WSDL 绑定,并且这些绑定可驱动多个端口。客户机可选择一个端口,服务存根可选择一个端口,或者 WSIF 可选择一个缺省端口。
此端口提供一个检索 Operation 对象的接口。WSIFOperation 接口提供执行给定操作的能力。
如果此端口稍后被序列化及反序列化,那么 WSIF 确保客户机将正确的信息提供给服务器以标识此实例。如果服务器实例不再可用,那么服务器必须确定要生成故障还是提供新实例。该行为可取决于服务类型。例如,对于企业 bean,WSIFPort 接口存储 EJB Home 并在每次调用前使用它来选择 bean。如果客户机需要实例支持,那么它会负责序列化或维护端口实例。
此客户机必须为每个调用创建新操作和消息。