Java API for XML Web Services (JAX-WS), JSR 5 是 Java EE 5 和 EE 6 平台的一个重要组成部分。作为 Java API for XML-based RPC 1.1 (JAX-RPC) 发行版的后续版本,JAX-WS 简化了使用 Java 技术开发 Web 服务的任务。它通过为多种协议(如 SOAP 1.1、SOAP 1.2、XML)提供支持,以及提供用于支持其他协议和 HTTP 的工具,解决了 JAX-RPC 1.1 中存在的一些问题。JAX-WS 使用 JAXB 2.0 执行数据绑定,并支持定制由控件生成的服务端点接口。JAX-WS 利用其对标注的支持,简化了 Web 服务开发,并减小了运行时 JAR 文件的大小。
本文档介绍了使用 IDE 开发 JAX-WS Web 服务的基础知识。创建 Web 服务后,您将编写三个不同的 Web 服务客户端,这些客户端通过网络使用 Web 服务(称为“使用”Web 服务)。这三个客户端分别是 Java SE 应用程序中的 Java 类、Web 应用程序中的 Servlet 和 Web 应用程序中的 JSP 页。开发 JAX-WS Web 服务客户端是集中讨论客户端的更高级教程。
您可以在 Web 容器或 EJB 容器中部署 Web 服务。这取决于您的具体选择。如果要创建 Java EE 6 应用程序,则在任何情况下都使用 Web 容器,因为您可以将 EJB 直接放入 Web 应用程序中。例如,如果您计划部署到只有一个 Web 容器的 Tomcat Web Server,请创建一个 Web 应用程序,而不是 EJB 模块。
@WebMethod
public int add(@WebParam(name = "i") int i, @WebParam(name = "j") int j) {
int k = i + j;
return k;
}
正如您在上面的代码中所看到的一样,Web 服务仅接收两个数字,然后返回二者之和。在下一部分中,您将使用 IDE 测试 Web 服务。
部署和测试 Web 服务
在将 Web 服务部署到服务器后,如果服务器具有测试客户端,则可以使用 IDE 打开服务器的测试客户端。GlassFish 和 WebLogic 服务器提供了测试客户端。如果使用的是 Tomcat Web Server,则不提供测试客户端,但 IDE 可以打开一个页面以显示部署了 Web 服务。当前还没有用于测试 EJB 模块是否成功部署的工具。
右键单击 "CalculatorWS_Client_Application" 节点,然后选择“新建”>“Web 服务客户端”。“新建 Web 服务客户端”向导打开。
选择“项目”作为 WSDL 源。单击“浏览”。在 CalculatorWSApplication 项目中浏览到 CalculatorWS Web 服务。选定 Web 服务后,单击“确定”。
在 NetBeans IDE 7.0-7.1 中,您可以为客户端 Java 工件选择一个包。将此字段保留空白。
将其他设置保留为缺省值,然后单击“完成”。
“项目”窗口将显示新的 Web 服务客户端,其中包括已创建的 add 方法的节点:
双击以在源代码编辑器中打开主类。将 add 节点拖至 main() 方法下面。
现在,您将看到以下内容:
public static void main(String[] args) {
// TODO code application logic here
}
private static int add(int i, int j) {
org.me.calculator.CalculatorWS_Service service = new org.me.calculator.CalculatorWS_Service();
org.me.calculator.CalculatorWS port = service.getCalculatorWSPort();
return port.add(i, j);
}
注意:或者,您也可以在编辑器中单击鼠标右键,然后选择“插入代码”>“调用 Web 服务操作”,而无需拖动 add 节点。
在 main() 方法主体中,将 TODO 注释替换为执行以下操作的代码:初始化 i 和 j 值,调用 add(),然后输出结果。
public static void main(String[] args) { int i = 3; int j = 4; int result = add(i, j); System.out.println("Result = " + result);
}
将 main() 方法代码包含在输出异常的 try/catch 块中。
public static void main(String[] args) { try { int i = 3; int j = 4; int result = add(i, j); System.out.println("Result = " + result); } catch (Exception ex) { System.out.println("Exception: " + ex); }
}
<%
try {
org.me.calculator.CalculatorWSService service =
new org.me.calculator.CalculatorWSService();
org.me.calculator.CalculatorWS port =
service.getCalculatorWSPort();
// TODO initialize WS operation arguments here
int i = 0;
int j = 0;
// TODO process result here
int result = port.add(i, j);
out.println("Result = "+result);
} catch (Exception ex) {
// TODO handle custom exceptions here
}
%>
将 i 和 j 的值从 0 更改为其他整数,如 3 和 4。将 catch 块中注释掉的 TODO 行替换为 out.println("exception" + ex);。