1、写个实体类:
@WebService
public class Hello {
@WebMethod
public String sayHello(String name){
return "Hello, "+name;
}
}
2、jdk提供的工具wsgen, 产生sei(service endpoint interface),利用编译的类生成wsdl 、webservice 、xsd,
wsgen -cp <classpath> com.example.soap.Hello -s <source file directory> -wsdl -r <wsdl directory>
3、在WEB-INF 下新建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='Hello' implementation='com.example.soap.Hello'
url-pattern='/HelloService' />
</endpoints>
4、在web.xml中添加如下配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/HelloService</url-pattern>
</servlet-mapping>
</web-app>
5、然后部署到web server (比如tomcat)上, 启动服务后,访问http://localhost:8080/helloSOAP/HelloService?wsdl 可以看到之前定义的服务都已经以xml 方式表示出来。
注意如果出现java.lang.ClassNotFound:com.sun.xml.ws.transport.http.servlet.WSServlet, 请添加jar ,如果是maven项目 可以通过坐标引入jar:
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>2.2.10</version>
</dependency>
比较原始的构建webservice 的方法到此结束。
二、通过wsdl 文件生成客户端代码:
新建一个java项目,将刚才生成的wsdl 和 xsd 文件拷贝到项目根路径/wsdl/HelloService.wsdl, /wsdl/HelloService_schema1.xsd,执行cmd命令:
wsimport -keep -s src wsdl/HelloService.wsdl
刷新java项目可以看到已经生成了客户端java文件,需要修改生成的service类的URL 将wsdlLocation 和URL 定义都修改为 http协议的(比如http://localhost:8080/helloSOAP/HelloService?wsdl)
新建一个类,测试是否能够调用service 端的方法:
public class WSDLClientTest {
public static void main(String[] args) {
HelloService service = new HelloService();
Hello hello = service.getHelloPort();
System.out.println(hello.sayHello("webservice."));
}
}
最后可以成功调用。