端到端二进制 SOAP 附件 3:创建 Web 服务
本教程的目标是创建一个包含 Web 服务的 Web 应用程序。该 Web 服务应该委托给以前为图像检索而创建的 EJB 模块。因此,您需要将该 EJB 模块放在 Web 应用程序的类路径上。
本系列教程
- 概述
- 创建 EJB 模块
- => 创建 Web 服务
- 测试 Web 服务
- 修改模式和 WSDL 文件传递二进制数据
- 创建 Swing 客户机
- 登录和优化 Web 服务
创建 Web 服务
在以下步骤中,将为此学习资源创建 Web 服务。该 Web 服务使用以前创建的 EJB 模块检索二进制数据。
要创建 Web 服务,请执行以下操作:
- 选择“文件”>“新建项目”(Ctrl-Shift-N)。此时将打开“新建项目”向导。选择 Web 类别中的 Web Application 选项。单击“下一步”按钮。此时将打开“名称和位置”页面。
- 在“项目名称”字段中键入 FlowerService。选择放置此项目的位置 — 对为此端到端应用程序创建的其他项目,使用同一位置。保留其他选项为默认设置,然后单击“下一步”按钮。此时将打开“服务器和设置”页面。
- 选择应用服务器和 Java EE 版本。这必须与端到端应用程序中的所有项目相同。单击“完成”按钮。IDE 创建一个新的 Web 应用程序项目。
- 将 EJB 模块 放在 Web 应用程序项目的类路径上,这样您要创建的 Web 服务就可以访问该 EJB 模块。首先,右键单击 Web 应用程序的 Libraries 节点,并选择“添加项目”,如下所示:
接下来,浏览至 EJB 模块并选择。现在您应该看到一个用于 EJB 模块的新节点已经添加到了 Web 应用程序的 Libraries 节点中,如下所示:
- 右键单击 FlowerService 节点,然后选择“新建”>“Web 服务”。也可以选择“新建”>“其他”,然后在“新建文件”向导中选择“Web 服务”下的“Web 服务”。此时将打开 New Web 服务向导。
- 在“新建 Web 服务”向导中,在“Web 服务名称”中键入 FlowerService,在“包名称”中键入 flower.album。在“现有会话 Bean”中选择“创建 Web 服务”,然后浏览至 EJB 模块并选择。
- 在“浏览企业 Bean”对话中单击“确定”。返回“新建 Web 服务”向导。单击“完成”按钮。IDE 向您的应用程序添加 Web 服务的基础结构,它包含从 EJB 模块获得的方法的桩模块,如下所示:
- 单击编辑器左上角的“设计”切换按钮。将出现 Web 服务Visual Designer,如下所示:
您可以使用该 Web 服务Visual 设计器快速查看您的 Web 服务的结构。另外,您可以通过单击按钮(比如“添加操作”)向 Web 服务添加功能。通过使用“服务质量”部分,您可以非常轻松地启用高级功能,比如 Web 服务安全。
- 单击“源码”切换按钮切换到“源码”视图。按如下方式重写类:
@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 开发特性的最新发展,请加入 邮件列表。