端到端二进制 SOAP 附件 3:创建 Web 服务
本教程的目标是创建一个包含 Web 服务的 Web 应用程序。该 Web 服务应该委托给以前为图像检索而创建的 EJB 模块。因此,您需要将该 EJB 模块放在 Web 应用程序的类路径上。
本教程中的课程

- 概述
- 创建 EJB 模块
- => 创建 Web 服务
- 测试 Web 服务
- 修改架构文件和 WSDL 文件以传递二进制数据
- 创建 Swing 客户端
创建 Web 服务
在以下步骤中,将为此学习资源创建 Web 服务。该 Web 服务使用以前创建的 EJB 模块检索二进制数据。
创建 Web 服务:
- 选择“文件”>“新建项目”(Ctrl-Shift-N)。此时将打开“新建项目 ”向导。从 "Web" 类别中选择 "Java Web"。单击“下一步”。此时将打开“名称和位置”页面。
- 在“项目名称”字段中键入 FlowerService。选择放置此项目的位置 — 对为此端到端应用程序创建的其他项目,使用同一位置。保留其他选项为默认设置,然后单击“下一步”。此时将打开“服务器和设置”页面。
- 选择应用服务器和 Java EE 版本。这必须与端到端应用程序中的所有项目相同。单击“完成”。IDE 创建一个新的 Web 应用程序项目。
- 将 EJB 模块 放在 Web 应用程序项目的类路径上,这样您要创建的 Web 服务就可以访问该 EJB 模块。首先,右键单击 Web 应用程序的“库”节点,然后选择“添加项目”,如下所示。

接下来,浏览至 EJB 模块并选择。现在,您应该看到在 Web 应用程序的“库”节点中添加了一个新的 EJB 模块节点,如下所示。

- 右键单击 FlowerService 节点,然后选择“新建”>“Web 服务”。也可以选择“新建”>“其他”,然后在“新建文件”向导中选择“Web 服务”下的“Web 服务”。此时将打开 “新建 Web 服务” 向导。
- 在“新建 Web 服务”向导中,在 Web 服务名称中键入 FlowerService,在包名中键入 flower.album。选择“通过现有会话 Bean 创建 Web 服务”,然后浏览至 EJB 模块并选择该模块,如下所示。

- 在“浏览企业 Bean”对话中单击“确定”。返回“新建 Web 服务”向导。单击“完成”。IDE 将在应用程序中添加 Web 服务的基础结构,其中包括从 EJB 模块获取的方法的桩模块,如下所示。

- 单击编辑器左上角的“设计”切换按钮。将出现 Web 服务可视设计器,如下所示。

您可以使用该 Web 服务Visual 设计器快速查看您的 Web 服务的结构。另外,您可以通过单击按钮(比如“添加操作”)向 Web 服务添加功能。通过使用“服务质量”部分,您可以非常轻松地启用高级功能,比如 Web 服务安全。
- 单击“源”切换按钮切换到“源”视图。按如下方式重写类。
import java.awt.Image;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.ejb.EJB;
import javax.imageio.ImageIO;
import javax.imageio.ImageReadParam;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import javax.jws.WebMethod;
import javax.jws.WebService;
@WebService(serviceName = "FlowerService")
public class FlowerService {
@EJB
private FlowerRemote ejbRef;
@WebMethod(operationName = "getFlower")
public Image getFlower(String name) throws IOException {
byte[] bytes = ejbRef.getFlower(name);
return getImage(bytes, false);
}
@WebMethod(operationName = "getThumbnails")
public List<Image> getThumbnails() throws IOException {
List<byte[]> flowers = ejbRef.allFlowers();
List<Image> flowerList = new ArrayList<Image>(flowers.size());
for (byte[] flower : flowers) {
flowerList.add(getImage(flower, true));
}
return flowerList;
}
private Image getImage(byte[] bytes, boolean isThumbnail) throws IOException {
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
Iterator readers = ImageIO.getImageReadersByFormatName("jpeg");
ImageReader reader = (ImageReader) readers.next();
Object source = bis; // File or InputStream
ImageInputStream iis = ImageIO.createImageInputStream(source);
reader.setInput(iis, true);
ImageReadParam param = reader.getDefaultReadParam();
if (isThumbnail) {
param.setSourceSubsampling(4, 4, 0, 0);
}
return reader.read(0, param);
}
}
现在该 Web 服务已完成,委托给 EJB 模块,并公开了其图像。
后续步骤:
测试 Web 服务
要发送意见和建议、获得支持以及随时了解 NetBeans IDE Java EE 开发功能的最新开发情况,请加入 nbj2ee@netbeans.org 邮件列表。