HelloServlet is a servlet that, like the Java client, calls the sayHello method of the web service. Like the application client, it makes this call through a port.
To invoke the method on the port, the client performs these steps:
Imports the HelloService endpoint and the WebServiceRef annotation:
import helloservice.endpoint.HelloService; ... import javax.xml.ws.WebServiceRef;
Defines a reference to the web service by specifying the WSDL location:
@WebServiceRef(wsdlLocation = "WEB-INF/wsdl/localhost_8080/helloservice/HelloService.wsdl")
Declares the web service, then defines a private method that calls the sayHello method on the port:
private HelloService service; ... private String sayHello(java.lang.String arg0) { helloservice.endpoint.Hello port = service.getHelloPort(); return port.sayHello(arg0); }
In the servlet, calls this private method:
out.println("<p>" + sayHello("world") + "</p>");
The significant parts of the HelloServlet code follow. The code is located in the tut-install/examples/jaxws/src/java/webclient directory.
package webclient; import helloservice.endpoint.HelloService; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.xml.ws.WebServiceRef; @WebServlet(name="HelloServlet", urlPatterns={"/HelloServlet"}) public class HelloServlet extends HttpServlet { @WebServiceRef(wsdlLocation = "WEB-INF/wsdl/localhost_8080/helloservice/HelloService.wsdl") private HelloService service; /** * Processes requests for both HTTP <code>GET</code> * and <code>POST</code> methods. * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { out.println("<html>"); out.println("<head>"); out.println("<title>Servlet HelloServlet</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Servlet HelloServlet at " + request.getContextPath () + "</h1>"); out.println("<p>" + sayHello("world") + "</p>"); out.println("</body>"); out.println("</html>"); } finally { out.close(); } } // doGet and doPost methods, which call processRequest, and // getServletInfo method private String sayHello(java.lang.String arg0) { helloservice.endpoint.Hello port = service.getHelloPort(); return port.sayHello(arg0); } }
You can build, package, deploy, and run the webclient application by using either NetBeans IDE or Ant. To build the client, you must first have deployed helloservice, as described in Building, Packaging, and Deploying the Service.
In NetBeans IDE, select File->Open Project.
In the Open Project dialog, navigate to:
tut-install/examples/jaxws/ |
Select the webclient folder.
Select the Open as Main Project check box.
Click Open Project.
In the Projects tab, right-click the webclient project and select Deploy.
This task runs the wsimport tasks, builds and packages the application into a WAR file, webclient.war, located in the dist directory, and deploys it to the server.
In a web browser, navigate to the following URL:
http://localhost:8080/webclient/HelloServlet
The output of the sayHello method appears in the window.
In a terminal window, go to:
tut-install/examples/jaxws/webclient/ |
Type the following command:
ant |
This command calls the default target, which runs the wsimport tasks, then builds and packages the application into a WAR file, webclient.war, located in the dist directory.
Type the following command:
ant deploy |
This task deploys the WAR file to the server.
In a web browser, navigate to the following URL:
http://localhost:8080/webclient/HelloServlet
The output of the sayHello method appears in the window.