设计与开发 JAX-WS 2.0 Web 服务 收藏
?
![]()
![]()
回页首
?
在浏览器中打开 schemaLocation (http://localhost:8080/OrderProcessWeb/orderprocess?xsd=1),以查看模式定义在浏览器中呈现的情况。让我们分析一下其中的情况:模式定义最开始是 targetNamspace 和 tns 声明,映射到在 OrderProcessService 的 @WebService Annotation 中定义的 targetNamespace http://jawxs.ibm.tutorial/jaxws/orderprocess。清单 5 给出了对应的代码。
清单 5. 模式(Schema)命名空间声明
前面指定的 wsgen 工具命令生成两个包装 Bean 类,ProcessOrder 和 ProcessOrderResponse,分别包含订单处理 Web 服务的输入和输出消息。将基于这些包装 Bean 类生成以下模式元素:
processOrder 属于 processOrder 类型,表示其中包含一个元素,且此元素的名称为 arg0,类型为 orderBean。可以看到,在 ProcessOrder 类和 processOrder 复杂类型之间存在一对一映射。 processOrderResponse 与 processOrderResponse 类型类似,后者的定义映射到 ProcessOrderResponse 类。让我们仔细分析一下清单 6 中的代码。
清单 6. processOrder 的模式声明
清单 7 中所示的 orderBean 类型定义映射到 OrderBean 类。orderBean 类型定义包括:
customer 元素,其类型为 customer。一个 orderId,其类型为 string。 orderItems(它为数组类型,因为其将 maxOccurs 属性指定为 unbounded),其类型为 orderItem。 shippingAddress,其类型为 address。
清单 7. processOrder 的模式声明
类似地,模式的其余部分 customer、orderItems 和 address 分别映射到 Customer、OrderItem 和 Address Java Bean。
分析了模式定义后,接下来让我们回头来看看 WSDL 中的消息定义,如清单 8 中所示。WSDL 指定消息 processOrder 和 processOrderResponse,其所属的元素为 processOrder 和 processOrderResponse(我们已经讨论了其模式定义)。portType 指定操作 processOrder,其输入消息为 processOrder,而输出消息为 processOrderResponse。
清单 8. WSDL 文档中的 processOrder 消息元素
接下来定义了 WSDL 绑定。此绑定将 soap:binding 样式定义为 document,soap:body 使用 literal 标记指定操作 processOrder 的输入和输出消息格式。生成的 WSDL 定义映射到 @SOAPBinding Annotation(已在 OrderProcessService 类上定义,请参见清单 9)。
清单 9. WSDL 文档的绑定信息
接下来定义 WSDL服务。这将指定端口和对应的绑定类型,以及服务的实际位置。此位置通常为 HTTP 位置,在本例中为http://localhost:8080/OrderProcessWeb/orderprocess。可以在清单 10 中了解到具体的情况。
清单 10. WSDL 文档的服务信息
我们已经对生成的 WSDL 和模式构件进行了分析。清单 11 给出了一个示例 SOAP 请求消息,此消息是在 Web 服务客户机调用 processOrder 操作时发送的。
清单 11. processOrder 操作的示例 SOAP 消息
上面列出的 Web 服务客户机代码执行以下任务:
通过传入OrderProcessWeb 服务的 WSDL URL 和服务的QName创建OrderProcess类的实例。创建OrderBean的实例,并使用populateOrder()方法填充订单信息。对服务调用getOrderProcessPort(),以检索到服务的代理(也称为端口)。端口实现服务所定义的接口。调用端口的processOrder方法,并同时传入在上面的第二个列表项目中创建的OrderBean实例。从服务获得OrderBean响应并输出订单 ID。描述名字大小下载方法JAX-WS Web services codejaxws.zip32KBHTTP