Apche CXF与springMVC整合的webService发布

一:我们先看发布端(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 睡觉啦。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值