cxf实现webservice服务端和客户端调用
超详细过程,,,,适合新手,,,,哈哈哈,,,因为我也是新手,,记录一下自己的学习过程,,,
idea+cxf+maven jax-ws规范下
首先新建一个空项目,
Next—起名—finish
创建服务端:
点击+号-----Maven------勾选----选择quickstart-----next
起名-----next
选择自己本地的maven库,勾选setting file ,选择自己的setting
Next—默认(一般不需要有任何操作)-----finish
会弹出配置jdk那个界面,找到自己的jdk位置,然后点击ok就行
然后可能会有点慢,耐心等待一会,,,(点击右下角选择自动导入)
新建项目完成,他有自动生成的App类,用不到,可以删除,测试类也删除;
打开pom.xml,删掉多余的,如下:
从<!-- FIXME change it to the project’s website –
…
…
/build>均可删除,
编写配置文件:
主要代码:
<dependencies>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.0.0</version>
</dependency>
<!--内置jettyweb服务器-->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>3.0.1</version>
</dependency>
</dependencies>
新建一个接口(在包下选择新建类,Kind下拉选择Interface)-----ok
HelloService代码:
package com.demo.service;
import javax.jws.WebService;
/*
* 对外发布服务的接口
* */
@WebService
public interface HelloService {
/*
* 对外发布服务的接口的方法
* */
public String sayHello(String name);
}
在main—java下新建一个类(带包名)
HelloServiceImpl代码:
package com.demo.service.impl;
import com.demo.service.HelloService;
public class HelloServiceImpl implements HelloService {
@Override
public String sayHello(String name){
return name + ",Welcome!";
}
}
在测试下新建Server类:
测试类:
端口号自定义,用一个没有被占用的端口:
Server代码:
package com.demo;
import com.demo.service.impl.HelloServiceImpl;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
public class Server {
public static void main(String[] args){
//发布服务的工厂
JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
//设置服务地址
factory.setAddress("http://localhost:8000/ws/hello");
//设置服务类
factory.setServiceBean(new HelloServiceImpl());
//发布服务
factory.create();
System.out.println("发布服务成功,端口8000.......");
}
}
运行测试类:
打开浏览器,输入测试类中的网址 http://localhost:8000/ws/hello
查看wsdl:
在网址后面加?wsdl 即为: http://localhost:8000/ws/hello?wsdl
至此,服务端创建完成!
创建客户端:
新建之前,鼠标不要放在server项目上,,如下图,可以点击一下其他位置
新建Module,
跟服务端一样----next
起名—next
跟之前一样,配置maven,应该都是默认----next----finish
依旧可能会有点慢,耐心等待
项目之间位置关系
配置文件跟服务端相同
将服务端Hello Service接口复制过来
在测试新建Client类
Client代码:
package com.demo;
import com.demo.service.HelloService;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
public class Client {
public static void main(String[] args) {
//服务接口访问地址 http://localhost:8000/ws/hello
//创建cxf代理工厂
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
//设置远程访问服务端地址
factory.setAddress("http://localhost:8000/ws/hello");
//设置接口类型
factory.setServiceClass(HelloService.class);
//对接口生成代理对象
HelloService helloService = factory.create(HelloService.class);
//代理对象类型
System.out.println(helloService.getClass());
//远程访问服务端方法
String content = helloService.sayHello("Jet");
System.out.println(content);
}
}
运行(保证服务端在运行状态):
说明:
class com.sun.proxy.$Proxy34
指的是jdk接口代理
至此,客户端创建完成!