FeaturesDocs & SupportCommunityBlogsPartners

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

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

本教程中的课程

本页上的内容适用 NetBeans IDE 6.5

  1. 概述
  2. 创建 EJB 模块
  3. => 创建 Web 服务
  4. 测试 Web 服务
  5. 修改架构文件和 WSDL 文件以传递二进制数据
  6. 创建 Swing 客户端

创建 Web 服务

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

创建 Web 服务:

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


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

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


    显示新的 FlowerAlbum EJB 模块子节点的“库”节点

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


    结果

     

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


    新 Flower Service 的 Java 源视图

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


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

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

  9. 单击“源”切换按钮切换到“源”视图。按如下方式重写类。
    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 邮件列表

Companion
Projects:
                  Powered by: