一:我们先看发布端(Endpoint)
服务端项目:结构如下
1.maven管理jar包 pom.xml如下:加入几个Apache CXF 的核心包
<!-- Apache CXF核心jar-->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.1.8</version>
</dependency>
<!--不加这个包会报错
Unable to locate spring NamespaceHandler for XMLschema namespace
-->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.1.8</version>
</dependency>
<!--java实现webservice,不部署到tomcat,需要jetty包支持-->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>3.1.8</version>
</dependency>
2.web.xml 加入如下配置:把请求交给CXFServlet去处理
<!-- 配置CXF框架的核心Servlet -->
<servlet>
<servlet-name>cxf</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>cxf</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
3.创建一个webService接口和接口的实现类
接口如下:(注意类上要有@webService标识):
package com.xu.lang.CXFwebService;
import javax.jws.WebParam;
import javax.jws.WebService;
/**
* @Author: Xuhao
* @Description:
* @Date: Created in 15:00 2018/3/4
*/
@WebService
public interface FirstCXFWebService {
String conversionString(@WebParam(name = "name") String name,
@WebParam(name = "password") String password,
@WebParam(name = "token") String token);
}
webService接口实现如下:
package com.xu.lang.CXFwebService;
/**
* @Author: Xuhao
* @Description:
* @Date: Created in 15:06 2018/3/4
*/
import com.xu.lang.entity.Student;
import com.xu.lang.mapper.StudentMapper;
import javax.annotation.Resource;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
//endpointInterface 作用是指定实现的接口
@WebService(endpointInterface = "com.xu.lang.CXFwebService.FirstCXFWebService")
public class FirstCXFWebServiceImpl implements FirstCXFWebService {
@Override
public String conversionString(String name,
String password,
String token) {
//这里只是做了一个字符串的连接 测试用无所谓啦
return new StringBuilder(name).append(password).append(token);
}
}
4.创建一个spring-webService.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://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"
default-lazy-init="true">
<!--发布webservice-->
<bean id="jaxWsServiceFactoryBean"
class="org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean">
<property name="wrapped" value="true" />
</bean>
<!--
创建一个端点用来暴露接口
address :相对刚才web.xml CXF请求路径也就是:
http://localhost:8080/demoTest/services/person?wsdl
-->
<jaxws:endpoint id="serviceimp" address="/person"
implementor="com.xu.lang.CXFwebService.FirstCXFWebServiceImpl">
<jaxws:serviceFactory>
<ref bean="jaxWsServiceFactoryBean" />
</jaxws:serviceFactory>
</jaxws:endpoint>
</beans>
启动tomcat中间件:
访问“http://localhost:8080/demoTest/services/person?wsdl”
demoTest:为我的项目名称也是application Context的根目录
services:是web.xml中 CXFServlet
出现如下界面 说明启动成功:-。-
成功就在眼前 -.-
二 客户端的用法:
1.首先需要在本机安装apache-cxf-3.1.8.zip
http://cxf.apache.org/download.html 官网
下载后解压在任意的目录,解压后的如下图:
然后配置环境变量:
最后用cmd测试下输入wsdl2java:出现下图表示成功
2.上边都是准备工作
使用WebService的wsdl2java工具生成客户端代码:
wsdl2java encoding 编码格式 -p 包名 -d 客户端的项目所在磁盘目录 wsdl路径
我的客户端目录如下:
我执行的命令:
wsdl2java -encoding utf-8 -p com.lida.dream_webservice.info -d E:\githubFile\dream-webservice\src\main\java http://localhost:8080/demoTest/services/person?wsdl
不报错就是执行成功了 如上图红框的文件就是生成过来的.java文件
3.在客户端测试 可以写个main方法测试下
public static void main(String[] args) {
JaxWsProxyFactoryBean jaxWsProxyFactoryBean = newJaxWsProxyFactoryBean();
String address = "http://localhost:8080/demoTest/services/person?wsdl"
jaxWsProxyFactoryBean.setAddress(address);
jaxWsProxyFactoryBean.setServiceClass(FirstCXFWebService.class);
FirstCXFWebService firstCXFWebService =
(FirstCXFWebService)jaxWsProxyFactoryBean.create();
String str = firstCXFWebService.conversionString("a", "b","c");
System.out.println(str);//abc
}
4.结合spring 可以如下
<!--
使用<jaxws:clietn>调用服务端
jaxws:client内部使用JaxWsProxyFactoryBean方式
-->
<jaxws:client id="firstCXFWebService"
address="http://localhost:8080/demoTest/services/person?wsdl"
serviceClass="com.lida.dream_webservice.info.FirstCXFWebService">
</jaxws:client>
spring 客户端测试类:
ApplicationContext context= new ClassPathXmlApplicationContext("spring/spring-web.xml");
FirstCXFWebService userDAO= (FirstCXFWebService)context.getBean("firstCXFWebService");
String s = userDAO.conversionString("a", "b", "c");
System.out.println(s);
OK大功告成-。-大约花了一整天学习 从0到现在会了基本的操作并且亲测成功运行。有意见或者有什么不对的地方 还请大神指点 互相学习共同进步~
代码还没发布到github上 想要代码的小伙伴加我qq511831389 睡觉啦。