通过 Web 服务传递二进制数据,第 4 部分:修改模式和 WSDL 文件
在此部分,要向我们的应用程序添加 WSDL 文件和模式文件。然后对它们进行修改,以将字节数组转换为图像。还要调节应用程序的各个部分,以正确定位模式和 WSDL 文件。在此过程中,将向您介绍 IDE 中的各种工具,帮助您处理 WSDL 和模式文件。
本系列教程
概述
创建 EJB 模块
创建 Web 服务
测试 Web 服务
=> 修改模式和 WSDL 文件传递二进制数据
创建 Swing 客户机
登录和优化 Web 服务
修改模式文件和 WSDL 文件传递二进制数据
在以下步骤中,将为您在以前的教程中创建的 Web 服务创建修改过的 WSDL 和 XML 模式文件。修改的 WSDL 和模式文件使 Web 服务以及使用它的客户机能够解析以二进制数据传递的 JPEG 图像数据。
要修改 WSDL 和模式文件,请执行以下操作:
展开 Web 应用程序至 wsdl 节点:
注意: 现在该节点为空。WSDL 文件和模式是在部署中生成的,因为您使用的是默认设置。因此该节点(通常它们应该在该节点上)为空。想要将字节数组转换为图像,则需要提供自己的 WSDL 文件和模式。我们将它们放在这个节点。
右键单击 wsdl 项目节点并选择“新建”>“其他”选项。此时将打开“新建文件”向导。打开 XML 类别并选择“XML 模式”。将模式文件命名为 FlowerService.xsd 。
重复第二步,但是这次从 XML 类别选择“WDSL 文档”。将该文件命名为 FlowerService.wsdl 。
在 wsdl 节点中您将看到以下内容:
将浏览器中 WSDL 文件的内容复制到您创建时使用的模板。如果创建和部署 Web 服务时您使用了默认设置,则 WSDL 文件应该在这里:
http://localhost:8080/FlowerService/FlowerService?WSDL
编辑 WSDL 文件并插入名称空间声明。必须有这些声明 WSDL 才是有效的。替换文件开头的行:
<!--
Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.2-hudson-182-RC1.
-->
<!--
Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.2-hudson-182-RC1.
-->
<definitions targetNamespace="http://album.flower/" name="FlowerService">
替换为以下内容:
<definitions xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
targetNamespace="http://album.flower/"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
name="FlowerService"
xmlns:tns="http://album.flower/">
同样,将模式文件复制到您的模板文件。模式文件默认在这里:
http://localhost:8080/FlowerService/FlowerService?xsd=1
编辑模式文件并插入名称空间声明。必须有这些声明模式文件才是有效的。替换文件开头的行:
<!--
Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.2-hudson-182-RC1.
-->
<xs:schema version="1.0" targetNamespace="http://album.flower/">
替换为以下内容:
<xs:schema xmlns:tns="http://album.flower/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
version="1.0" targetNamespace="http://album.flower/">
接下来,我们将更改 WSDL 文件,这样将引用本地模式文件而不是联机模式文件。在“设计”模式下打开 WSDL 文件,如下所示。
展开 Types 节点。右键单击 Referenced Schema 节点。选择“添加”>“导入”。此时将打开“添加导入”对话框。
如下所示,现在您可以浏览到模式文件并进行选择。
单击“确定”。
删除另一个模式引用(它引用联机模式文件,我们不想再引用它了),然后您将会发现可以访问模式文件中的节点了,这说明现在已经正确引用了它:
我们需要在 Web 服务的注释中明确使应用服务器使用我们自己的 WSDL 文件版本,否则该应用服务器将会生成其自己的 WSDL 文件。
@WebService(serviceName = "FlowerService",
wsdlLocation = "WEB-INF/wsdl/FlowerService.wsdl")
现在您应该在 Web 服务类中看到以下内容:
最后,整个这一部分的要点就是拥有一个修改过的模式文件,它指定返回元素的预期内容类型。为了识别模式文件中的返回元素,请打开该模式文件并查看以下行,以及 39 行中的代码,它们可能都位于您自己的应用程序中的不同行:
保留所有现有元素,但是向它们添加 以下属性:
xmime:expectedContentTypes="image/jpeg" xmlns:xmime="http://www.w3.org/2005/05/xmlmime"
现在您应该在同一行中看到以下内容:
现在,再次向 Tester 应用程序部署 Web 服务并调用其中一项操作时,您将会看到正确返回一幅图像:
由于 Tester 应用程序已经确保图像被正确返回,所以我们可以创建 Swing 客户机来检索和显示它们。
注意: 您可以在下载样例项目 中找到正确修改的 WSDL 和模式文件。这两个文件都在 Web/WEB-INF/wsdl 文件夹下。
未来计划:
创建 Swing 客户机
要发送意见和建议,获取支持,了解关于 NetBeans IDE Java EE 开发特性的最新发展,请加入
nbj2ee
@
netbeans.org
邮件列表 。