Web 服务调用框架 (WSIF) 提供了用于调用 Web 服务的 Java™ API,与服务的格式或调用服务的传输协议无关。
有关此任务
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 消息:
- 生成的 Java 类基于 WSDL 到 Java 的映射,例如由 Java API 提供的用于基于 XML 的远程过程调用 (JAX-RPC) 的映射。
- 数据的 XML 表示法,例如使用 SOAP 编码。
每个选项提供不同方案中的优点。 当 WSIF 在标准 Java 客户端中使用时,Java 类是自然的方法。 但在其他方案(其中 WSIF 在中介中使用)中,将 WSDL 消息保留为 SOAP 编码格式可能更有效。 在消息中用于定义消息的样式必须一致,因此一条消息中的所有部分必须一致。 一串 -
getRepresentationStyle() - 总是返回
null。 这表明此 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。 如果客户机需要实例支持,那么它会负责序列化或维护端口实例。 此客户机必须为每个调用创建新操作和消息。