// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= 通过 Web 服务传递二进制数据，第 4 部分：修改方案文件和 WSDL 文件
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: 通过 Web 服务传递二进制数据，第 4 部分：修改方案文件和 WSDL 文件 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, 通过 Web 服务传递二进制数据，第 4 部分：修改方案文件和 WSDL 文件

在本课中，将向 Web 应用程序中添加 WSDL 文件和方案文件。然后修改方案文件，以将字节数组转换为图像。还将编辑 Web 服务源代码以正确地找到方案和 WSDL 文件。在此过程中，将向您介绍 IDE 中的各种工具，帮助您处理 WSDL 和方案文件。

您可以将此部分介绍的过程应用于任何 JAX-WS Web 服务，以便将任何 MIME 类型作为二进制数据进行传递。您将从传递二进制数据的 Web 服务（已在第 2 和第 3 课中创建）着手，定制该服务的 WSDL 和 XML 方案。在定制的 XML 方案文件中，您将在二进制数据的返回元素中添加  ``expectedContentTypes="_mime_type_"``  属性。此属性通知客户端，它应将二进制数据映射到 Java 类型（按照从 MIME 到 Java 类型的映射），而不是字节数组。在本教程中，您将二进制数据映射到  ``java.awt.Image`` ；不过，您也可以将二进制数据映射到 JAXB 2.0 规范中给定的任何 Java 类型，如 link:http://jax-ws.dev.java.net/nonav/2.1.4/docs/mtom-swaref.html[+JAX-WS Users Guide+]（JAX-WS 用户指南）中所述。


*本教程中的课程*

image::images/netbeans-stamp-80-74-73.png[title="此页上的内容适用于 NetBeans IDE 7.2、7.3、7.4 和 8.0"]

1. link:./flower_overview.html[+概述+]
2. link:./flower_ws.html[+创建 Web 服务+]
3. link:./flower-code-ws.html[+对 Web 服务进行编码和测试+]
4. => 修改方案文件和 WSDL 文件以传递二进制数据
5. link:./flower_swing.html[+创建 Swing 客户端+]


== 修改方案文件和 WSDL 文件以传递二进制数据

在以下步骤中，将为您在以前的教程中创建的 Web 服务创建修改过的 WSDL 和 XML 方案文件。修改的 WSDL 和方案文件使 Web 服务以及使用它的客户端能够解析以二进制数据传递的 JPEG 图像数据。

*修改 WSDL 文件和方案文件：*

1. 在 "Projects"（项目）窗口中，展开 "FlowerService" Web 应用程序节点，直至到达  ``WEB-INF``  节点。右键单击  ``WEB-INF``  文件夹，然后选择 "New"（新建）> "Folder"（文件夹）。（可能需要选择 "New"（新建）> "Other"（其他），然后选择 "Other"（其他）类别）。 
image::images/new-file-wiz-folder.png[]

[start=2]
. 单击 "Next"（下一步）。"Name and Location"（名称和位置）页打开。将该文件夹命名为  ``wsdl`` 。
image::images/wsdl-folder-name-location.png[]

[start=3]
. 单击 "Finish"（完成）。"Projects"（项目）窗口中将显示文件夹  ``wsdl`` 。
image::images/wsdl-folder.png[]

[start=4]
. 展开 "Web Services"（Web 服务）节点，然后右键单击 "FlowerService" 节点。选择 "Generate and Copy WSDL..."（生成和复制 WSDL...）。 

[start=5]
. "Generate and Copy WSDL"（生成和复制 WSDL）对话框打开，其中包含一个导航树。导航至您创建的  ``wsdl``  文件夹 ("FlowerAlbumService" > "web" > "WEB-INF" > "wsdl")，然后单击 "OK"（确定）。

现在，您将在  ``wsdl``  节点中看到  ``FlowerService.wsdl``  和  ``FlowerService_schema1.xsd`` 。还将看到 "Generated Sources"（生成的源文件）(jax-ws) 的新节点。

image::images/generated-wsdl-and-schema.png[]

[start=6]
. 明确指定应用服务器使用您自己的 WSDL 文件版本。否则，应用服务器将生成其自身的 WSDL 文件。打开  ``FlowerService.java``  并找到  ``@WebService``  标注。在此标注中添加参数  ``wsdlLocation="WEB-INF/wsdl/FlowerService.wsdl"`` ，如下所示：

[source,java]
----

@WebService(serviceName = "FlowerService"*, wsdlLocation = "WEB-INF/wsdl/FlowerService.wsdl")*
----

[start=7]
. 修改方案文件  ``FlowerService_schema1.xsd`` ，使其指定返回元素的所需内容类型。要在方案文件中标识返回元素，请打开该方案文件，然后找到复杂类型  ``getThumbnailResponse``  和  ``getFlowerResponse`` ：

[source,xml]
----

<xs:complexType name="getThumbnailsResponse"><xs:sequence><xs:element name="return" type="xs:base64Binary" minOccurs="0" maxOccurs="unbounded"/></xs:sequence></xs:complexType>
----

[source,xml]
----

<xs:complexType name="getFlowerResponse"><xs:sequence><xs:element name="return" type="xs:base64Binary" minOccurs="0"/> </xs:sequence></xs:complexType>
----

[start=8]
. 在两个返回元素 ( ``<xs:element name="return".../>`` ) 中添加以下属性。

[source,java]
----

xmime:expectedContentTypes="image/jpeg" xmlns:xmime="http://www.w3.org/2005/05/xmlmime"
----

现在，您应该在相同的行中看到以下内容。


[source,xml]
----

<xs:complexType name="getThumbnailsResponse"><xs:sequence><xs:element name="return" type="xs:base64Binary" minOccurs="0" maxOccurs="unbounded"
                xmime:expectedContentTypes="image/jpeg" xmlns:xmime="http://www.w3.org/2005/05/xmlmime"/></xs:sequence></xs:complexType>
----

[source,xml]
----

<xs:complexType name="getFlowerResponse"><xs:sequence><xs:element name="return" type="xs:base64Binary" minOccurs="0"
            xmime:expectedContentTypes="image/jpeg" xmlns:xmime="http://www.w3.org/2005/05/xmlmime"/> </xs:sequence></xs:complexType>
----

[start=9]
. 现在，向测试器应用程序重新部署 Web 服务并调用其中的一项操作时，您会看到正确返回图像： 
image::images/ws-tester-goodschema.png[]

由于 Tester 应用程序已经确保正确返回图像，所以可以创建一个 Swing 客户端来检索和显示图像。


== 后续步骤：

link:./flower_swing.html[+创建 Swing 客户端+]

link:/about/contact_form.html?to=3&subject=Feedback:%20Flower%20WSDL%20EE6[+发送有关此教程的反馈意见+]

要发送意见和建议、获得支持以及随时了解 NetBeans IDE Java EE 开发功能的最新开发情况，请link:../../../community/lists/top.html[+加入 nbj2ee@netbeans.org 邮件列表+]。

