服务端:
步骤
- 新建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是一个接口
@WebService
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各个节点详解的文章:
http://blog.csdn.net/sd0902/article/details/8606046