文档章节

CXF

T-Brain
 T-Brain
发布于 2015/10/20 01:30
字数 1189
阅读 33
收藏 0
点赞 0
评论 0

概念

 什么CXF它是一个开源的webservice框架提供大量功能特性实现快速开发

CXF支持的协议:SOAP1.1/1.2REST

 CXF支持的数据格式:XMLJSON(只在REST下支持

与EndPoint不同,CXF支持接口形式的发布,Endpoint不支持接口发布

配置

目录

 

配置

JAVA_HOMEjdk安装目录bin的上一级

CXF_HOMEcxf的目录,bin的上一级

Path = ;%JAVA_HOME%\bin;%CXF_HOME%\bin;

CLASSPATH=.;%CXF_HOME%\lib\cxf-manifest.jar


直接访问服务地址会报如下异常,原因CXF发布服务未提供说明界面需直接访问wsdl地址



利用CXF服务端开发

开发步骤:

第一步:创建一个java工程

第二步:导入cxfjar包。138

第三步:编写SEI接口。需要在SEI接口上添加@Webservice注解。

第四步:编写SEI实现类。不需要加注解。

第五步:发布服务

1、创建一个JaxWsServerFactoryBean对象

2、设置SEI接口setServiceClass

3、设置SEI实现类对象。setServiceBean

4、设置服务发布地址。setAddress

5、发布服务。Create

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class WeatherServer {
     public static void main(String[] args) {
         //JaxWsServerFactoryBean发布一个webservice服务
         JaxWsServerFactoryBean jaxWsServerFactoryBean = new JaxWsServerFactoryBean();
         //设置服务接口
         jaxWsServerFactoryBean.setServiceClass(WeatherInterface. class );
         //设置服务实现类实例
         jaxWsServerFactoryBean.setServiceBean( new WeatherInterfaceImpl());
         //设置服务地址
         jaxWsServerFactoryBean.setAddress( "http://127.0.0.1:12345/weather" );
         //发布服务
         jaxWsServerFactoryBean.create();
     }
}

利用CXF客户端开发

开发步骤:

引入jar包:

第二步:生成客户端代码

Ø Wsdl2java:它cxf提供客户端生成命令,支持SOAP1.1SOAP1.2其他和wsimport类似

Ø 常用参数:-d,指定输出目录;-p,指定包名如果不指定也是使用命名空间的倒序


第三步:使用生成的客户端代码调用服务端JaxWsProxyFactoryBean,设置两个参数:1.服务接口2.服务地址,create方法创建一个服务接口的实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class WeatherClient {
     public static void main(String[] args) {
         //JaxWsProxyFactoryBean去调用服务端
         JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();
         //设置服务接口
         jaxWsProxyFactoryBean.setServiceClass(WeatherInterface. class );
         //设置服务地址,不是WSDL地址
         jaxWsProxyFactoryBean.setAddress( "http://127.0.0.1:12345/weather" );
         //获取接口实现类的实例
         WeatherInterface weatherInterface = (WeatherInterface) jaxWsProxyFactoryBean.create();
         //调用查询方法
         String weather = weatherInterface.queryWeather( "北京" );
         System.out.println(weather);
     }
}

CXFSpring整合发布SOAP协议的服务

<jaxws:endpoint>标签Endpoint发布方式的一个封装,不需要接口的

<jaxws:server>标签JaxWsServerFactoryBean一个封装,可以发布接口

服务端:

第一步创建web的项目

第二步导入jar

第三步发接口和实现类

第四步配置spring的配置文件:applicationContext.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<? xml version = "1.0" encoding = "UTF-8" ?>
     xmlns:jaxws = "http://cxf.apache.org/jaxws"
     xmlns:jaxrs = "http://cxf.apache.org/jaxrs" xmlns:cxf = "http://cxf.apache.org/core"
     xsi:schemaLocation="http://www.springframework.org/schema/beans
                             http://www.springframework.org/schema/beans/spring-beans.xsd
                             http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
                             http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
                             http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd">
     <!--==============================================================================-->
     <!-- <jaxws:endpoint发布一个无需接口的服务 -->
     < jaxws:endpoint address = "/hello" implementor = "cn.itcast.ws.cxf.server.HelloWorld" >
     </ jaxws:endpoint >
     
     <!===============================================================================-->
     <!-- <jaxws:server发布一个带接口的服务 -->
     < jaxws:server address = "/weather" serviceClass = "cn.itcast.ws.cxf.server.WeatherInterface" >
         < jaxws:serviceBean >
             < ref bean = "weatherInterface" />
         </ jaxws:serviceBean >
     </ jaxws:server >
     <!-- 配置一个服务实现类的bean -->
     < bean name = "weatherInterface" class = "cn.itcast.ws.cxf.server.WeatherInterfaceImpl" />
</ beans >

第五步配置CXFservletspring配置文件,配置到web.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<? xml version = "1.0" encoding = "UTF-8" ?>
   < display-name >ws_2_cxf_spring_server</ display-name >
   <!-- spring配置文件 -->
   < context-param >
   <!-- contextConfigLocation名字是固定的,不能更改, 如果不配置,去默认路径/WEB-INF/applicationContext.xml,这个路径也不能更改-->
     < param-name >contextConfigLocation</ param-name >
     <!-- 可以配置称WEB-INF/classes/applicationContext.xml -->
     < param-value >classpath:applicationContext.xml</ param-value >
   </ context-param >
   <!-- 配置spring的listener,加载配置文件,初始化spring上下文-->
   < listener >
     < listener-class >org.springframework.web.context.ContextLoaderListener</ listener-class >
   </ listener >
   <!-- 配置CXF的servlet -->
   < servlet >
     < servlet-name >CXF</ servlet-name >
     < servlet-class >org.apache.cxf.transport.servlet.CXFServlet</ servlet-class >
   </ servlet >
   < servlet-mapping >
   <!-- 和上边的servletname保持一致 -->
     < servlet-name >CXF</ servlet-name >
     <!--
     路径映射:
     1.以"/"开头且以"/*"结尾,这种方式叫路径映射
     2.以"*."结尾,比如*.do,这叫扩展映射
     3.只写"/",指定默认的servlet,
     4.其他的映射方式,都是精确映射,
     路径拦截规则顺序:
     1.精确映射
     2.路径映射
     3.扩展映射
     4.默认servlet
      -->
     < url-pattern >/ws/*</ url-pattern >
   </ servlet-mapping >
   
   < welcome-file-list >
     < welcome-file >index.html</ welcome-file >
     < welcome-file >index.htm</ welcome-file >
     < welcome-file >index.jsp</ welcome-file >
     < welcome-file >default.html</ welcome-file >
     < welcome-file >default.htm</ welcome-file >
     < welcome-file >default.jsp</ welcome-file >
   </ welcome-file-list >
</ web-app >

第六步部署tomcat启动tomcat

第七步:测试服务是否发布成功

wsdl地址访问规则:

http://ip:端口号/项目名称/servlet拦截路径/发布的服务?wsdl





© 著作权归作者所有

共有 人打赏支持
T-Brain
粉丝 1
博文 44
码字总数 46138
作品 0
海淀
程序员

暂无相关文章

构建自定义组件

#前言 接上篇,因项目需由H5转到小程序,故需打造自定义对话框。而这块需使用到微信小程序的自定义组件功能。 小程序自定义组件 点击此处,可以查看小程序自定义组件的api。 从自定义组件的样...

387 ⋅ 13分钟前 ⋅ 0

Maven 项目添加本地jar包的三种方式

Maven 项目添加本地jar包的三种方式 翻译自3 ways to add local jar to maven project [TOC] 简介 在构建 Maven 项目时,有时候需要导入本地的jar包,本文介绍了三种添加本地jar包的方法。 ...

Os_yxguang ⋅ 14分钟前 ⋅ 0

long超过16位之后浏览器自动截断问题处理。

java前后端交互的过程中,定义的Long字段超过16位之后,js发生截断,从而不能跟后台数据进行匹配。 处理方法 把long型字段转成string进行处理。(可以使用json注解转换或者springmvc统一拦截...

strict_nerd ⋅ 16分钟前 ⋅ 0

一文带你搞定Integer

1.1 前言 Integer是int对应的包装类,它包含一个int类型的字段存储数据,并提供了多个基本操作,能在 int 类型和 String 类型之间互相转换。在Java5中,引入了自动装箱和自动拆箱功能,Java可...

筱虾米 ⋅ 16分钟前 ⋅ 0

Linux kernel脉络和主干总结

写在前面 前人常说,对Linux操作系统/内核的理解,是计算机行业从业者的内功,决定了你在技术领域想走多远。但内核的庞大以及学习曲线之陡峭,总让我在学习途中觉得犹如“管中窥豹”。 随着工...

Markz0928 ⋅ 31分钟前 ⋅ 0

在gcc中使用intel风格的内联汇编

很简单,内联汇编使用asm(“.intel_syntax noprefix/n”)声明一下,以后的内联汇编就可以用intel风格了,构建可执行文件时给gcc加上-masm=intel参数。 先写一个小程序测试一下: [cpp] view...

simpower ⋅ 41分钟前 ⋅ 0

NIO 之 ByteBuffer实现原理

相关文章 BIO、NIO、AIO 内部原理分析 NIO 之 Selector实现原理 NIO 之 Channel实现原理 前言 Java NIO 主要由下面3部分组成: Buffer Channel Selector 在传统IO中,流是基于字节的方式进行...

轨迹_ ⋅ 51分钟前 ⋅ 0

Jenkins docker权限问题

环境Ubuntu Server 工具 jenkins-war:2.89.2 报错信息 Cannot connect to the Docker daemon. Is the docker daemon running on this host?Build step 'Execute shell' marked build as fai......

Pulsar-V ⋅ 51分钟前 ⋅ 0

180621-一个简单的时间窗口设计与实现

如何设计一个计数的时间窗口 时间窗口,通常对于一些实时信息展示中用得比较多,比如维持一个五分钟的交易明细时间窗口,就需要记录当前时间,到五分钟之前的所有交易明细,而五分钟之前的数...

小灰灰Blog ⋅ 今天 ⋅ 0

Android之Dalvik、ART、JIT、AOT

Android之Dalvik、ART、JIT、AOT 本文内容:Dalvik、ART、JIT、AOT之间关系 本文定位:知识记录 学习过程记录,加深理解,提升文字组合表达能力。也希望能给学习的同学一些灵感 本文整理于[...

lichuangnk ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部