关于Maven项目集成cxf框架发布和接收WebService

从网上找了很多,发现大多数都是类似“单机”版的发布,直到看了一篇博客,给我很大的启发。

在此感谢这位博客的作者:http://www.imooc.com/article/14635

下面我所写的适用于“单独发布WebService”也适用于“集成在项目中发布”。

如果单独发布WebService的话,就要用到文中的所有代码;
如果集成项目发布的话,则需要用到部分代码(详情请看我代码备注);
废话少说,开始…


1. 下载cxf相关jar

下载地址:http://cxf.apache.org/download.html

2. 配置环境变量

(其实也可以省略这一步,但是后续测试客户端调用时,需要用到dos命令,所以建议配置环境变量)

将下载的jar包压缩后会出现一个文件夹,进入到文件夹的bin目录,并复制当前目录的地址……不说了,因为它和jdk的环境变量配置一模一样(需要注意的是当前配置需要jdk1.6以上的版本支持)。

环境配置完之后,打开dos窗口,输入:wsdl2java -help(-help之前有个空格)当出现以下内容时,则证明配置成功...
![这里写图片描述](https://img-blog.csdn.net/20170830151620175?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSmF2YV9nYW9zdzE5OTU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

3. 编写项目的pom.xml

  <properties><spring.version>4.3.3.RELEASE</spring.version></properties><dependencies><!-- 当前代码如果原pom.xml中存在的话可忽略 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><!--spring--><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-transports-http</artifactId><version>3.1.8</version></dependency><!--如果您是在项目中集成cxf的话,上面的那些maven相关jar在项目搭建时肯定是存在的,你只需要编写以下maven相关jar即可--><!--org.apache.cxf.transport.servlet.CXFServlet--><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-transports-http</artifactId><version>3.1.8</version></dependency><!--不加这个包会报错Unable to locate spring NamespaceHandler for XML schema namespace [http://cxf.apache.org/jaxws]--><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></dependencies>

4.编写WebService的接口和实现类

package com.bjhg.cxf.service;import javax.jws.WebMethod;@javax.jws.WebService
public interface WebService {@WebMethod//代表当前方法是被发布的,可忽略public String getValue();
}
package com.bjhg.cxf.service.impl;import javax.jws.WebService;@WebService
public class WebServiceImpl implements com.bjhg.cxf.service.WebService{@Overridepublic String getValue() {return "德玛西亚";}}

上面代码中由于本人想把它的引用描述的详细些,所以有些注解和实现类写的是详细地址;
还有就是方法的参数可以根据自己的需求来编写,也可调用项目中其它接口的返回数据,由于上面代码是个示例,所以我返回的信息是“德玛西亚”(当然啦,你也可以返回“提莫队长,正在待命…”)

5.编写spring-web.xml和spring-webservice.xml

下面第一个代码块为spring-web.xml(也有的人喜欢叫spring-application.xml)
下面第二个代码块为spring-webservice.xml

如果您是在项目中集成cxf,那么您就忽略spring-web.xml(因为这个配置也是web项目必不可少的配置)
spring-webservice.xml主要是引用webservice接口的实现类,最终引入到web.xml中

第一个代码块:spring-web.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:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-4.0.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.0.xsd"><!--配置springmvc--><!--1.开启springmvc注解模式--><!--简化配置:(1)主动注册DefaultAnnotationHandlerMapping,AnnotationMethodHandlerAdapter(2)提供一系列功能:数据绑定,数字和日期的format @NumberFormt @DataTimeFormat,xml json默认的读写支持--><mvc:annotation-driven/><!--servlet-mapping--><!--2静态资源默认的servlet配置,(1)允许对静态资源的处理:js,gif    (2)允许使用“/”做整体映射--><!-- 容器默认的DefaultServletHandler处理 所有静态内容与无RequestMapping处理的URL--><mvc:default-servlet-handler/><!--3:配置jsp 显示viewResolver--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/><property name="prefix" value="/WEB-INF/views/"/><property name="suffix" value=".jsp"/></bean><!-- 4自动扫描且只扫描@Controller --><context:component-scan base-package="com.bjhg.*.controller" /><!-- 定义无需Controller的url<->view直接映射 --><mvc:view-controller path="/" view-name="redirect:/index"/>
</beans>

第二个代码块: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/jaxwshttp://cxf.apache.org/schemas/jaxws.xsd http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"default-lazy-init="true"><!--发布webservice--><!-- implementor:是被发布webservice接口的实现类地址 --><!-- address:是项目发布成功后,浏览器中的访问地址 --><jaxws:endpoint implementor="com.bjhg.cxf.service.impl.WebServiceImpl" address="/ws"></jaxws:endpoint>
</beans>

这两个配置最后需要引入到项目中的web.xml的配置中

6.编写项目的web.xml

<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_2_5.xsd"version="2.5"><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list><!-- 引入WebService的配置文件 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-webservice.xml</param-value></context-param><servlet><servlet-name>springServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-web.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping><filter><filter-name>characterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>characterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!--
如果您是在项目中集成cxf的话,上面的代码可以忽略,因为上面的servlet和过滤器的配置是一个web项目必然存在的,当然如果不存在,那您就加上,下面代码中监听器的配置,如果您的项目中存在的话也可以忽略
-
另外还得在科普一下(大神请忽略):
上面的代码中分别引入了两个两个配置文件,一个是引入spring-webservice.xml的配置,另一个是配置Servlet时引入的主配置文件spring-web.xml,请仔细观察,不要忽略。
-
我这项目的主配置文件叫spring-web.xml,也有很多人喜欢叫spring-application.xml,请注意。
--><!--Spring MVC是通过DispatcherServlet来加载Spring配置文件的,因此不需要在web.xml中配置ContextLoaderListener。但是CXF却需要通过ContextLoaderListener来加载Spring。--><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 配置CXF框架的核心Servlet  --><servlet><servlet-name>CXFServlet</servlet-name><servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class><!-- 这个是servlet的初始化的优先级,写成2只因为不想跟上面的servlet冲突 --><load-on-startup>2</load-on-startup></servlet><servlet-mapping><servlet-name>CXFServlet</servlet-name><!-- 这个是webservice浏览器访问时的地址,项目名后面加上server,后面的*号写webservice配置文件中的adress名 --><url-pattern>/server/*</url-pattern></servlet-mapping>
</web-app>

7.发布WebService

完成上面的配置之后,启动tomcat,在浏览器中输入:http:localhost:8080/项目名/server/ws?wsdl

解释一下,http:localhost:8080/项目名,这个就不用说了,后面的server是web.xml中配置cxf框架的核心Servlet那块的url-pattern,在后面的ws是spring-webservice.xml配置文件中的address,?wsdl这个就不用说了吧。

访问后出现下图类似的信息,则发布成功!

8.客户端访问WebService接口信息

客户端调用WebService的方法有很多种,在这里我采用的是用dos命令生成本地文件,之后进行调用。

由于开始的时候配置了cxf的环境变量,现在只需要打开dos窗口,输入:wsdl2java -d 客户端项目路径 -client http://localhost:8080/CxfService/server/ws?wsdl
示例:

解释一下:
1:wsdl2java,什么意思我也不知道,我就认为是人家的语法(就像你上网要遵循http协议,写java代码有java规范,生活在中国要遵守国家的法律一样,这个别钻牛角尖,就这样写)
2:-d,就是客户端项目的位置信息(如果不是maven架构的项目,写到src即可)
3:D:\appMng\aaa\src\main\java,就是客户端项目的本地地址信息了(我的项目叫aaa)
4:-client,webservice的暴露地址信息,也就是最后面的信息(上面第7步浏览器中的信息)

最后如果没报错,那就是成功了,刷新一下客户端访问的项目就会出来,webservice的本地文件。
如图:

接下来就编写main方法测试一下,数据是否调用成功:
上图中的web包就是我写的main方法测试类。

代码示例:

package com.bjhg.web;import com.bjhg.cxf.service.WebService;
import com.bjhg.cxf.service.impl.WebServiceImplService;public class Client {public static void main(String[] args) {// impl中的实现类WebServiceImplService web=new WebServiceImplService();// 调用生成的客户端类 WebService_WebServiceImplPort_Client。主要是_后面的nameWebService webServiceImplPort = web.getWebServiceImplPort();// 此时通过webServiceImplPort可以调用到你接口信息中的方法String value = webServiceImplPort.getValue();// 最后打印输出System.out.println(value);}
}

截图:

最终,调用成功。

这块我得在多说一笔,由于我的接口信息写的很简单,只有一句“德玛西亚”,所有本地文件比较少。
正常来说,接口的返回数据可能会是对象信息,那么你要做的是:
①:返回对象的实体类要实例化(实体类名后面要implements java.io.Serializable)
②:webservice的实现类调用别处接口数据时,注解最好使用@Resource
③:客户端调用的话,需要遍历,遍历时最好使用增强for循环,如果调用数据中的某些数据,就直接.get就可以,如果需要遍历所有数据,需要在对应的实体类中加上toString();(此时的客户端本地文件会有对应的实体类文件,名字很容易区别)
④:如果生成的本地文件报错,并且报错的原因是关于WebService的,请注意,你的接口发布时webservice注解怎么写,生成的本地文件就怎样写。

最后,希望我写的这些能够对你们有所帮助。

Maven项目集成cxf框架发布WebService相关推荐

  1. CXF框架发布WebService服务的例子

    1.CXF框架概念介绍 Apache CXF 是一个开源的 WebService 框架,CXF可以用来构建和开发 WebService,这些服务可以支持多种协议,比如:SOAP.POST/HTTP.H ...

  2. 采用CXF框架发布WebService

    1. CXF介绍 :soa的框架     * cxf 是 Celtrix (ESB框架)和 XFire(webserivice) 合并而成,并且捐给了apache       * CxF的核心是org ...

  3. 使用CXF框架发布SOAP协议的 WebService服务

    引言 Apache CXF = Celtix + XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF.CXF 继承了 Celtix 和 X ...

  4. 基于CXF框架的webservice接口发布与调用

    目录 前言 正文 一,开发接口服务端(soap风格),接收SAP系统推送过来的数据 二,调用SAP提供的webservice接口(soap风格) 三,调用SRM系统提供的rest接口 四,接口调试工具 ...

  5. Spring 5 + Spring MVC 5 + MyBatis 3 的 Maven 项目集成

    相关链接: MyEclipse CI 2018.9.0 配置 Apache Maven 3.5.4 在MyEclipse CI 2018.9.0 中使用 Maven 3.5.4 创建Maven项目 在 ...

  6. Spring和CXF整合发布WebService(服务端、客户端)

    参考Spring和CXF整合发布WebService(服务端.客户端) 转载于:https://www.cnblogs.com/timspace/p/11113576.html

  7. springmvc+spring+mybatis+maven项目集成shiro进行用户权限控制【转】

    项目结构: 1.maven项目的pom中引入shiro所需的jar包依赖关系 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ...

  8. Web服务cxf框架发布2

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本人声明.否则将追究法律责任. 作者:永恒の_☆ 地址:http://blog.csdn.net/chenghui0317/ ...

  9. WebService(CXF对外发布WebService服务)(1)

    一.创建Maven工程 注意pom.xml中的dependency配置,需要引入这三个包:(特别注意,引入的这三个包的版本要一致,否则会报奇怪的错误) <project xmlns=" ...

最新文章

  1. Reveal使用步骤和 破解Revealapp的试用时间限制
  2. realmeq参数配置详情_realmeq2i参数_realmeq2i参数配置详情
  3. CVE-2017-7529Nginx越界读取缓存漏洞POC
  4. mysql s授权所有用户_批量获取mysql用户权限的方法
  5. Excel导入到sql数据库中完整代码
  6. 页面修改成套用MasterPage时遇到Invalid postback or callback argument的错误
  7. 大型网站技术架构(八)——网站的安全架构
  8. php制作入库单,教你如何利用vba制作自动登记数据的仓库入库单
  9. 解决 mac系统下sublime imput 函数交互问题
  10. python正则表达式例题_python—正则表达式实例
  11. html左侧菜单展开与收起,CSS3 实现侧边栏展开收起动画
  12. 如何选型APS系统,还需明确这七大关键因素
  13. KSO-C#语言2021年落选,Python获年度编程语言
  14. App磁盘沙盒工具实践
  15. bzoj2121 字符串游戏
  16. oracle数据库进程pmon,【案例】Oracle进程异常 pmon和LISTENER进程负载均比较高的解决办法...
  17. 闪烁的星星(Nehe)
  18. 面对质疑,统一操作系统UOS竟然这样回应!
  19. 记录一次合并单元格表格渲染错位问题。
  20. Linux之ELF文件初探 ---(elf源码)

热门文章

  1. autojs发射广播源码,使用了sendBroadcast方法
  2. 织梦系统基本参数php,织梦后台系统基本参数新增的变量数据库修改
  3. 我的三维mandelbulb制作fractal成长之路[续]
  4. 软考时间管理思维导图
  5. iOS App thinning【( 通过 LinkMap、mach-o寻找优化点)】1、段迁移rename_section减小__TEXT 段大小(需关闭 Bitcode)2、查无用方法/类/宏/图
  6. html自动汉字转拼音,输入汉字转换成拼音首字母js代码
  7. 计算机文件自动备份到移动硬盘,电脑文件定时自动备份到移动硬盘,有什么方法?...
  8. 轻快步伐远不足以跟上轻快心情
  9. 关于word2vec词向量化
  10. 解释术语 计算机系统结构,北京邮电大学 计算机系统结构(体系结构) 期末复习 术语解释.doc...