基本需求:
1、JDK版本为: jdk1.6以上;
2、创建两个项目(java项目 或 web项目 都可以):服务端(Web_Server)和客户端(Web_Client);
3、因tomcat没有jax-ws所需的依赖环境,所以首先下载Jax-ws RI,即jax-ws reference implemantation, 地址:http://jax-ws.java.net。
项目目的:
客户端(Web_Client)中的程序调用 服务端(Web_Server)中的方法;
步骤:(以Java Web项目为例)
1、建立一个项目名为 Web_Server 的Java Web项目,创建包名为 com.demo.server 的包,在该包下创建 接口 名为 ServerFunction 的接口 和 类 名为 ServerFunctionImpl 的实现类;
代码如下:
-------------------------------------------------------------------------------------------------------------------------------
接口代码:
-------------------------------------------------------------------------------------------------------------------------------
package com.demo.server;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
@WebService
@SOAPBinding(style = Style.RPC)
public interface ServerFunction {
/*
* 接口方法用于将传入的字符串转为大写
*/
@WebMethod
public String changeWords(@WebParam(name = "words") String words);
}
-------------------------------------------------------------------------------------------------------------------------------
实现类代码:
--------------------------------------------------------------------------------------------------------------------------------
package com.demo.server;
import javax.jws.WebService;
@WebService(endpointInterface = "com.demo.server.ServerFunction")
public class ServerFunctionImpl implements ServerFunction {
/*
* 方法用于将传入的字符串转为大写
*/
@Override
public String changeWords(String words) {
String str = words;
str = str.toUpperCase();
return str;
}
}
---------------------------------------------------------------------------------------------------------------------------------
2、在 WEB-INF 目录下,创建两个xml文件:sun-jaxws.xml 和 web.xml
代码如下:
---------------------------------------------------------------------------------------------------------------------------------
sun-jaxws.xml 代码
---------------------------------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<endpoints xmlns='http://java.sun.com/xml/ns/jax-ws/ri/runtime' version='2.0'>
<endpoint
name='ServerFunction'
implementation='com.demo.server.ServerFunctionImpl'
url-pattern='/jdkService'/>
<!--
name='ServerFunction' web service服务的接口名称
implementation='com.demo.server.ServerFunctionImpl' web service服务的接口的实现类全路径
url-pattern='/jdkService' url的相对路径
-->
</endpoints>
-----------------------------------------------------------------------------------------------------------------------------------
web.xml 代码
------------------------------------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID"
version="3.1">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<listener>
<listener-class>
com.sun.xml.ws.transport.http.servlet.WSServletContextListener
</listener-class>
</listener>
<servlet>
<servlet-name>ServerFunction</servlet-name>
<servlet-class>
com.sun.xml.ws.transport.http.servlet.WSServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ServerFunction</servlet-name>
<url-pattern>/jdkService</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>120</session-timeout>
</session-config>
</web-app>
---------------------------------------------------------------------------------------------------------------------------------------
3、将下载的 jaxws-ri-2.2.10.zip 压缩包中 lib 文件夹下的 jar包 复制到 Web_Server 项目的 WEB-INF/lib 下,Build Path 到项目里;
4、启动tomcat,在浏览器地址栏输入 http://localhost:8080/Web_Server/jdkService?wsdl 就可以看到该service的详细信息(如果不成功的话,请检查服务器端口是否被占用);
5、建立一个项目名为 Web_Client 的 Java Web 项目;
打开 cmd 输入:
命令: wsimport -s src的路径 -p 完整包名 -keep webservice的发布地址 ;然后回车就OK了,
例如: wsimport -s D:\workspace\Web_Client\src -p com.demo.client -keep http://localhost:8080/Web_Server/jdkService?wsdl
(如果wsimport命令失效,请检查是否把jdk配入环境变量;JAVA_HOME:JDK所在位置;CLASSPATH:%JAVA_HOME%\lib\tools.jar)
回车后,会出现:
正在解析 WSDL...
正在生成代码...
正在编译代码...
出现以上内容时,恭喜你,成功了!
你可以刷新一下你的 Web_Client 项目,会在 com.demo.client 包下会有对应的WebService生成的文件!
6、在 com.demo.client 该包下创建测试类Test
代码如下:
----------------------------------------------------------------------------------------------------------------------------------
package com.demo.service;
public class Test {
public static void main(String[] args) {
ServerFunction serverFunction = new ServerFunctionImplService().getServerFunctionImplPort();
String str = serverFunction.changeWords("hello world");
//在控制台打印的就是在 Web_Server 项目下的 changeWords 方法处理后的字符串
System.out.println(str);
}
}
-----------------------------------------------------------------------------------------------------------------------------------
7、运行该测试类Test,会在控制台上打印出大写的 “HELLO WORLD”,说明测试成功!