WebService study summary (three) - using JDK development WebService (rpm)

A, WebService development tools

  You can use the following two methods to develop the use of Java development WebService

    1, using JDK development (1.6 and above)

    2, using CXF framework development (work)

Second, the use JDK development WebService

2.1, the development of server-side WebService

  1, a defined interface, using @WebService annotation annotation interface using @WebMethod annotation all the methods defined in the interface marked as follows:

Copy the code
Package me.gacl.ws. 1; 
 2 
 . 3 Import the javax.jws.WebMethod; 
 . 4 Import the javax.jws.WebService; 
 . 5 
 . 6 / ** 
 . 7 * @author GaCl 
 . 8 * defined SEI (WebService EndPoint Interface (terminal)) 
 9 * / 
@ 10 are denoted using the annotation @WebService WebServiceI interfaces 
. 11 @WebService 
12 is WebServiceI {public interface 
13 is 
14 // tagging method WebServiceI the @WebMethod annotation interface 
15 @WebMethod 
16 the sayHello String (String name); 
. 17      
18 is @WebMethod 
. 19 String Save (String name, String pwd); 
20 is}
Copy the code

  2, the interface implementation class prepared using @WebService annotation annotation implementation class, all the methods defined in the interface implemented as follows:

Copy the code
Package me.gacl.ws. 1; 
 2 
 . 3 Import the javax.jws.WebService; 
 . 4 
 . 5 / ** 
 . 6 * @author GaCl 
 . 7 embodied in the SEI * 
 8 * / 
 9 // @WebService annotation labels used WebServiceI interface implementation class WebServiceImpl 
@WebService 10 
. 11 WebServiceI {public class WebServiceImpl the implements 
12 is 
13 is @Override 
14 the sayHello public String (String name) { 
15 System.out.println ( "the WebService the sayHello" + name); 
16 return "the sayHello" + name; 
. 17} 
18 is 
. 19 @override 
20 is Save public String (String name, String pwd) { 
21 is System.out.println ( "Save the WebService" + name + "," + pwd); 
22 is return "Save Success"; 
23 is} 
24}
Copy the code

  3, using Endpoint (terminal) based release webservice, code is as follows:

Copy the code
Package me.gacl.ws.test. 1; 
 2 
 . 3 Import the javax.xml.ws.Endpoint; 
 . 4 
 . 5 Import me.gacl.ws.WebServiceImpl; 
 . 6 
 . 7 / ** 
 . 8 * @author GaCl 
 . 9 * 
10 *-Service publish the Web 
. 11 * / 
12 public class WebServicePublish { 
13 
14 public static void main (String [] args) { 
15 // define the publication addresses WebService, this address is to provide external access to the URL address of Webervice, URL address format is: http: // ip: port number / xxxx 
16 // String address = "http://192.168.1.100:8989/"; this wording WebService publishing address is legitimate 
17 // String address = "http://192.168.1.100:8989 / Webservice "; this WebService publishing address is legitimate 
18 String address =" http://192.168.1.100:8989/WS_Server/Webservice ";
19 // Use Endpoint class provides a way to publish publish WebService, to ensure that the port number used is not in use by another application publishing 
20 Endpoint.publish (address, new new WebServiceImpl ()); 
21 System.out.println ( "release webservice ! success "); 
22} 
23}
Copy the code

  Run WebServicePublish class, you can write a good release WebService Well, WebService access URL is: http://192.168.1.100:8989/WS_Server/Webservice  , as shown below:

  

  Here we wrote a WebServicePublish class to publish WebService, if a Web project, then we can use the listener or Servlet to publish WebService, as follows:

  1, ServletContextListener Listener post WebService

Copy the code
Package me.gacl.listener. 1; 
 2 
 . 3 Import javax.servlet.ServletContextEvent; 
 . 4 Import the javax.servlet.ServletContextListener; 
 . 5 Import javax.servlet.annotation.WebListener; 
 . 6 Import the javax.xml.ws.Endpoint; 
 . 7 Import me.gacl .ws.WebServiceImpl; 
 . 8 
 . 9 / ** 
10 * @author GaCl 
. 11 * for publishing WebService listener 
12 * / 
13 // use Servlet3.0 provided @WebListener annotation ServletContextListener WebServicePublishListener class implements an interface to a labeled listener 
14 @WebListener 
15 WebServicePublishListener the implements of ServletContextListener {public class 
16 
. 17 @Override 
18 is the contextDestroyed public void (ServletContextEvent SCE) { 
. 19 
20 is}
21 is 
22 is @Override 
23 is the contextInitialized public void (ServletContextEvent SCE) { 
24 // publication addresses the WebService 
25 String address = "http://192.168.1.100:8080/WS_Server/WebService"; 
26 is released // WebService, WebServiceImpl class is WebServie interface implementation class 
27 Endpoint.publish (address, new new WebServiceImpl ()); 
28 System.out.println ( "publish webservice using WebServicePublishListener success!"); 
29} 
30}
Copy the code

  Web applications deployed to the server is running, the Web application context at initialization, it will publish a WebService.

  Then we can use the URL address to access published WebService, as shown below:

  

  2, the use of Servlet publish WebService

Copy the code
 1 package me.gacl.web.controller;
 2 
 3 import javax.servlet.ServletException;
 4 import javax.servlet.annotation.WebServlet;
 5 import javax.servlet.http.HttpServlet;
 6 import javax.xml.ws.Endpoint;
 7 import me.gacl.ws.WebServiceImpl;
 8 
 9 /**
10  * @author gacl
11  * 用于发布WebService的Servlet
12  */
13 //使用Servlet3.0提供的@WebServlet注解将继承HttpServlet类的普通Java类标注为一个Servlet
14 //将value属性设置为空字符串,这样WebServicePublishServlet就不提供对外访问的路径
15 //loadOnStartup属性设置WebServicePublishServlet的初始化时机
16 @WebServlet(value="",loadOnStartup=0)
17 public class WebServicePublishServlet extends HttpServlet {
18 
19     /* (non-Javadoc)
20      * @see javax.servlet.GenericServlet#init()
21      * 在WebServicePublishServlet初始化时发布WebService
22      */
23     public void init() throws ServletException {
24         //WebService的发布地址
25         String address = "http://192.168.1.100:8888/WebService";
26         //发布WebService,WebServiceImpl类是WebServie接口的具体实现类
27         Endpoint.publish(address , new WebServiceImpl());
28         System.out.println("使用WebServicePublishServlet发布webservice成功!");
29     }
30 }
Copy the code

  将Web应用部署到服务器运行时,在初始化WebServicePublishServlet时,就会发布WebService了。如下图所示:

  

  接着我们可以使用发布的URL地址访问WebService,如下图所示:

  

  关于发布WebService主要就是通过javax.xml.ws.Endpoint类提供的静态方法publish进行发布,如果是普通的java项目,那么可以专门写一个类用于发布WebService,如果是Web项目,那么可以使用ServletContextListener或者Servlet进行发布。

2.2、开发WebService客户端

  1、借助jdk的wsimort.exe工具生成客户端代码,wsimort.exe工具位于Jdk的bin目录下,如下图所示:

  

  执行命令:wsimport -keep url(url为wsdl文件的路径)生成客户端代码。

  创建一个WebService客户端测试项目,如下图所示:

  

  打开命令行窗口,切换到src目录,执行"wsimport -keep http://192.168.1.100:8888/WebService?wsdl"生成客户端代码,如下图所示:

  

  执行命令的过程中没有出现任何错误,那么代码就生成成功了,刷新一下src目录,就可以看到生成的代码了,如下图所示:

  

  2、 借助生成的代码编写调用WebService对外提供的方法

  wsimport工具帮我们生成了好几个java类,但我们只需要关心WebServiceImplService类和WebServiceImpl接口的使用即可,如下所示:

Copy the code
 1 package me.gacl.ws.client;
 2 
 3 import me.gacl.ws.WebServiceImpl;
 4 import me.gacl.ws.WebServiceImplService;
 5 
 6 /**
 7  * @author gacl
 8  * 调用WebService的客户端
 9  */
10 public class WSClient {
11 
12     public static void main(String[] args) {
13         //创建一个用于产生WebServiceImpl实例的工厂,WebServiceImplService类是wsimport工具生成的
14         WebServiceImplService factory = new WebServiceImplService();
15         //通过工厂生成一个WebServiceImpl实例,WebServiceImpl是wsimport工具生成的
16         WebServiceImpl wsImpl = factory.getWebServiceImplPort();
17         //调用WebService的sayHello方法
18 String resResult = wsImpl.sayHello ( "aloof Wolf"); 
. 19 System.out.println ( "Calling WebService result sayHello method returns:" + resResult); 
20 is System.out.println ( "---- ----------------------------------------------- "); 
calling WebService 21 // save method 
22 resResult = wsImpl.save ( "Wolf aloof", "123"); 
23 is System.out.println ( "calling WebService result save method returns:" + resResult); 
24 } 
25}
Copy the code

  WebService method of operating results the client calls the server as follows:

  

  The results returned from the call display, with wsimport tool generates client code has been successful call to the method of WebService. These are the WebService using JDK development of relevant content.

https://www.cnblogs.com/xdp-gacl/p/4259481.html

Guess you like

Origin www.cnblogs.com/xihong2014/p/10935845.html