corner imagecorner image
FeaturesPluginsDocs & SupportCommunityPartners

端到端二进制 SOAP 附件 3:创建 Web 服务

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

本系列教程

本页中的内容适用于 NetBeans IDE 6.1
  1. 概述
  2. 创建 EJB 模块
  3. => 创建 Web 服务
  4. 测试 Web 服务
  5. 修改模式和 WSDL 文件传递二进制数据
  6. 创建 Swing 客户机
  7. 登录和优化 Web 服务

创建 Web 服务

在以下步骤中,将为此学习资源创建 Web 服务。该 Web 服务使用以前创建的 EJB 模块检索二进制数据。

要创建 Web 服务,请执行以下操作:

  1. 选择“文件”>“新建项目”(Ctrl-Shift-N)。此时将打开“新建项目”向导。选择 Web 类别中的 Web Application 选项。单击“下一步”按钮。此时将打开“名称和位置”页面。
  2. 在“项目名称”字段中键入 FlowerService。选择放置此项目的位置 — 对为此端到端应用程序创建的其他项目,使用同一位置。保留其他选项为默认设置,然后单击“下一步”按钮。此时将打开“服务器和设置”页面。
  3. 选择应用服务器和 Java EE 版本。这必须与端到端应用程序中的所有项目相同。单击“完成”按钮。IDE 创建一个新的 Web 应用程序项目。
  4. EJB 模块 放在 Web 应用程序项目的类路径上,这样您要创建的 Web 服务就可以访问该 EJB 模块。首先,右键单击 Web 应用程序的 Libraries 节点,并选择“添加项目”,如下所示:


    显示“添加库”的 Libraries 节点上下文菜单

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


    显示新的 FlowerAlbum EJB 模块子节点的 Libraries 节点

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


    结果

  7. 在“浏览企业 Bean”对话中单击“确定”。返回“新建 Web 服务”向导。单击“完成”按钮。IDE 向您的应用程序添加 Web 服务的基础结构,它包含从 EJB 模块获得的方法的桩模块,如下所示:


    新的 Flower Service 的 Java 源视图

  8. 单击编辑器左上角的“设计”切换按钮。将出现 Web 服务Visual Designer,如下所示:


    新的 Flower Service 的 Web 服务设计器 GUI 视图

    您可以使用该 Web 服务Visual 设计器快速查看您的 Web 服务的结构。另外,您可以通过单击按钮(比如“添加操作”)向 Web 服务添加功能。通过使用“服务质量”部分,您可以非常轻松地启用高级功能,比如 Web 服务安全。

  9. 单击“源码”切换按钮切换到“源码”视图。按如下方式重写类:
    @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 开发特性的最新发展,请加入 邮件列表

Companion
Projects:
MySQL Database Server   GlassFish Community: an Open Source Application Server   Open Solaris  Open JDK: an Open SourceJDK   Mobile & Embedded Community     Sponsored by 
Sponsored by Sun Microsystems