1.在myeclipse新建一个webproject,名为cxf01
2.导入cxf的jar包到工程的/WebRoot/root目录下
3.写一个类:UserService,里面写一个简单的testHello方法,在类上和方法上加上jdk自带的WebService注解
package com.gsta.ws.demo01;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.ws.BindingType;
import javax.xml.ws.soap.SOAPBinding;
/**
* 使用cxf发布一个WebService
*
* @author CaiBaoHong
*
*/
// 请注意:@WebService注解使用的是jdk的api,并不是cxf的api
@WebService(name = "UserService",//
serviceName = "UserServiceWS",//
targetNamespace = "http://www.userws.com/",//
portName = "UserServicePort")
//@BindingType(value="http://www.w3.org/2003/05/soap/bindings/HTTP/")//如果要发布SOAP1.2版本的WebService才用这个配置,一般不需要
public class UserService {
@WebMethod(action = "testHello")//testHello是请求的路径
public @WebResult(name = "testHelloResult")//testHelloResult是结果的名称
String testHello(@WebParam(name = "name") String name) {//name是请求的参数名
return "Hello," + name;
}
}
4.在/WebRoot/WEB-INF/web.xml文件中配置cxf框架的入口servlet : CXFServlet
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>cxf01</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>cxf-servlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<init-param>
<param-name>config-location</param-name>
<param-value>classpath:cxf-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>cxf-servlet</servlet-name>
<url-pattern>/ws/*</url-pattern>
</servlet-mapping>
</web-app>
其中,init-param中的config-location,为什么要配置这个参数名?自己引入cxf源码包,看CXFServlet源码就知道了,源码如下:
5.对着工程邮件New-新建一个Source Folder,名为conf。接下来就要写上面截图中的那个cxf-servlet.xml配置文件了。CXFServlet需要读取配置文件中的信息来发布WebService。因为配置文件不知道怎么写,所以要到cxf的包下面去找例子:
到\apache-cxf-3.0.4\samples目录下,在搜索框搜索“cxf-servlet.xml”,然后随便拷贝一个到工程conf目录下:
刚拷贝的cxf-servlet.xml会有其它无用的配置,我们只需要保留配置文件的xsd约束信息,上图红色圈的就是cxf发布WebService所需要的名称空间。
6.cxf-servlet.xml配置信息:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation=" http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<!--
1.<jaxws:endpoint>标签是用于将一个普通类发布成服务的,假如UserService不是一个类而是一个接口,应该用<jaxws:server>标签来发布
2.implementor就是要发布成WebService的类
3.address就是WebService的访问路径,
完整路径是 :http://<ip地址>:<tomcat端口>/<web工程名>/<CXFServlet对应的servlet-mapping的映射地址>/address属性的值
本例中是: http://127.0.0.1:8080/cxf01/ws/UserService
-->
<jaxws:endpoint id="userService" implementor="com.gsta.ws.demo01.UserService" address="/UserService">
<!-- 配置消息进入和出去的日志拦截器,是为了在控制台能方便看到请求响应的信息 -->
<jaxws:inInterceptors>
<bean class="org.apache.cxf.interceptor.LoggingInInterceptor" />
</jaxws:inInterceptors>
<jaxws:outInterceptors>
<bean class="org.apache.cxf.interceptor.LoggingOutInterceptor" />
</jaxws:outInterceptors>
</jaxws:endpoint>
</beans>
7.运行tomcat,访问http://127.0.0.1:8080/cxf01/ws:
8.点击连接,然后复制地址栏的wsdl文件路径:
9.在myeclipse打开soap浏览器:
10.右上角点检wsdlpage按钮:
11.粘贴wsdl文件路径然后点击go
12.填写请求参数然后点击go
13.查看响应信息
14.完毕。