服务端:
步骤
- 新建web工程
- 在此测试导入所有的cxf 的jar包
- 新建接口
- 新建实现
- 在实现类里暴露(声- 明)对应的业务接口
- 配置spring-cxf文件
- 配置web.xml文件
- 发布查看wsdl文档是否成功
服务端的项目结构
//User类是一个bean对象
public class User {
private String name; private int age;public String getName() {
return name; }public void setName(String name) {
this.name = name; }public int getAge() {
return age; }public void setAge(int age) {
this.age = age; }public User(String name, int age) {
super(); this.name = name; this.age = age; }public User() {
super(); } }//HelloWorldI是一个接口
public interface HelloWorldI {User getUserInfo(int id);
}//注意需要加上@WebService注解
//HelloWorldImpl是一个实现类,实现类里对应的方法里有处理业务的逻辑
@WebService(endpointInterface = "com.sp.cxf.HelloWorldI")
public class HelloWorldImpl implements HelloWorldI {public User getUserInfo(int id) {
System.out.println("service is start"); if (id == 1) { return new User("aiwei",1); } return null; }}
spring-cxf.xml是一个spring 的bean配置文件
<!-- cxf对外接口 -->
<jaxws:endpoint id="hello" implementor="com.sp.cxf.HelloWorldImpl" address="/helloService" />
web.xml是整个web工程的配置文件
<!-- 配置spring-cxf.xml -->
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-cxf.xml</param-value> </context-param><!-- 应用启动的监听器 -->
<listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener><!-- cxf WebService服务 -->
<servlet> <servlet-name>cxfService</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>cxfService</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping>
把程序发布到浏览器上,结果
http://localhost:8080/spring-cxf/helloService?wsdl
测试:用Eclipse的内置浏览器来测试
输入参数 1 ,结果是有的 。。 输入参数2 ,结果是无的,但都请求到了服务器
请求的xml源文件格式
响应的源文件格式
新建客户端:客户端采用java原生的的打包和请求方式来测试
步骤:
- cmd窗口进入到client端项目的src文件路径下
- 通过命令生成wsdl对应的文件
- 新建测试类,请求webservice,查看返回结果
进入到src 目录后:wsimport - p com.ws.client -keep http://localhost:8080/spring-cxf/helloService?wsdl
-p表示包名,可有可无。
刷新项目:
新建main方法测试请求服务器
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub HelloWorldImplService hw = new HelloWorldImplService(); HelloWorldI hi = hw.getHelloWorldImplPort(); User user = hi.getUserInfo(1); if(user!=null){ System.out.println(user.getAge()+" "+user.getName()); }else{ System.out.println("无返回结果"); } } }控制台:
更改请求参数为 2
至此,一个简单的webservice的服务器和客户端就是这样,后面再来实现下cxf自带的拦截器和我们自定义的拦截器功能。
最后附上一个关于WebService各个节点详解的文章: