在学习CXF的时候,看到了这一篇博客,写的是JAXWS,觉得不错,就先学习一下博主的几篇博客,要多些博主的分享啊。
原文地址:http://blog.youkuaiyun.com/lifetragedy/article/details/7205832
这里写的应该算是,学习总结,根据自己的理解学习整理一下。
---------------------------------------------------------------------------------------------
JAX-WS的官方网站,大家可以在这里下载JAR包:https://jax-ws.java.net/
我也上传了资源:http://download.youkuaiyun.com/detail/jolingogo/5452285
这里用的是JAXWS2.2.7-20120813.zip,这里面有各种jar包,示例,文档。
这里依然使用Maven来管理项目
1.pom.xml
这里,暂时就加了一个依赖包jaxws-rt
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.deppon.demo</groupId>
<artifactId>jaxws-demo</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>jaxws-demo Maven Webapp</name>
<url>http://maven.apache.org</url>
<!-- 属性配置 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>2.2.7</version>
</dependency>
</dependencies>
<build>
<finalName>jaxws-demo</finalName>
</build>
</project>
2.写一个接口,写一个实现类,作为服务
IUserService
package com.deppon.demo.jaxws.service;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService
public interface IUserService {
@WebMethod(operationName="say")
public String say(@WebParam(name="name") String name);
}
UserService
package com.deppon.demo.jaxws.service.impl;
import javax.jws.WebService;
import com.deppon.demo.jaxws.service.IUserService;
@WebService(endpointInterface="com.deppon.demo.jaxws.service.IUserService")
public class UserService implements IUserService {
@Override
public String say(String name) {
System.out.println("name->" + name);
return "你好," + name;
}
}
3.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='UserService'
implementation='com.deppon.demo.jaxws.service.impl.UserService'
url-pattern='/userService' />
</endpoints>
4.web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<listener>
<listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
</listener>
</web-app>
这里就出现问题了,不知道为什么,在网上找的资料说,需要配置一个Servlet:
<servlet>
<servlet-name>UserService</servlet-name>
<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>WSServlet</servlet-name>
<url-pattern>/userService</url-pattern>
</servlet-mapping>
我看,官方的例子里也有这么个Servlet,但是,我把他删除了之后,只加了一个监听,也一样可以成功,这个问题,有待解决。
接下来,就可以部署项目了。
5.部署项目
将项目部署到Tomcat,还记得上面的sun-jaxws.xml吗,那里配置了一个url-pattern,这个在配置Servlet的时候见过,是一样的道理,
部署成功后,我们访问一下:
我们可以单击一下WSDL链接:
到这里的话,一切都还可以,接下来,如果想要再写一个服务的话,就稍微有点儿怪:
package com.deppon.demo.jaxws.service.impl;
import javax.jws.WebMethod;
import javax.jws.WebService;
@WebService(serviceName="HWService")
public class HelloWorld {
@WebMethod()
public String sayHello() {
return "Hello world !";
}
}
<?xml version="1.0" encoding="UTF-8"?>
<endpoints xmlns='http://java.sun.com/xml/ns/jax-ws/ri/runtime' version='2.0'>
<endpoint
name='userService'
implementation='com.deppon.demo.jaxws.service.impl.UserService'
url-pattern='/userService' />
<endpoint
name="helloWorld"
implementation="com.deppon.demo.jaxws.service.impl.HelloWorld"
url-pattern="/helloworld"
>
</endpoint>
</endpoints>
好了,重启一下Tomcat,访问 http://localhost:8080/jaxws-demo/helloworld
看到了吗,两个服务都显示出来了,当然,可能就是这么设计的
到这里,我们就从Java代码发布了一个服务,下一篇,我们根据这个服务,写一个客户端来测试一下。