用cxf发布和调用web service

用CXF来做web service是比较简单的,本文就简单介绍一下如何一步步发布web service,以及调用现有的web service。另外如果系统已经使用了Spring MVC,那么引入CXF需要额外的步骤,见本人另外一篇博客http://kyfxbl.iteye.com/blog/1432920。如果展现层没有用spring mvc,而是用struts2之类的,可以省去这一步

首先介绍怎么发布web service:

第1步是创建一个普通的java接口,然后用@WebService注解声明这是一个web service
Java代码 收藏代码
package com.huawei.framework.webservice;

import javax.jws.WebService;

import com.huawei.framework.model.User;

@WebService
public interface HelloWorld {

String sayHi(User user);

}

可以看到,这个接口非常普通,不需要继承什么额外的接口,只需要注解一个@WebService就可以

第2步当然是需要给这个接口提供一个实现类
Java代码 收藏代码
package com.huawei.framework.webservice;

import com.huawei.framework.model.User;

public class HelloWorldImpl implements HelloWorld {

public String sayHi(User theUser) {
return "Hello " + theUser.getName() + " ,your age is "
+ theUser.getAge();
}

}

这个类更加简单,连注解都省了,但是如果这个类实现了不止一个接口,那么就需要加上@WebService注解,不过一般不会这样

第3步就到了cxf出场的时候了,需要在spring配置文件中加上cxf的配置
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-3.1.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd">

<import resource="classpath:META-INF/cxf/cxf.xml" />
<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />

<jaxws:endpoint id="helloWorld"
implementorClass="com.huawei.framework.webservice.HelloWorldImpl"
address="/HelloWorld" />

</beans>

这里只写了CXF所需的配置,spring配置文件的其他内容已省略。用到的元素是<jaxws:endpoint>,implementorClass属性就是我们提供的实现类,然后address属性是这个web service对外暴露的路径

最后第4步是在web.xml中加载cxf
Xml代码 收藏代码
<?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="MyFramework" version="3.0">

<display-name>MyFramework</display-name>

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
WEB-INF/beans.xml,
WEB-INF/cxf.xml
</param-value>
</context-param>

<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

<servlet>
<servlet-name>framework</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>framework</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/webservice/*</url-pattern>
</servlet-mapping>

</web-app>

这里写的比较复杂,是为了兼容spring mvc。这里把/webservice/*作为对外暴露的路径,和上面的web service address要结合起来,比如说http://ip:port/app_name/webservice/HelloWorld,就会指向这个例子里声明的web service接口

通过以上4步,就发布了一个web service,在浏览器里输入http://ip:port/app_name/webservice,就会看到这个sayHi的web service了,并且cxf已经自动生成了wsdl文件

然后介绍一下怎么通过cxf调用已有的web service

第1步是需要“获得”web service的对应接口类,这里的“获得”有多种情况。在条件允许的情况下,比如2个子系统都是自己项目组开发的,或者对方愿意提供,那么直接拷贝过来就可以了。但一般是没有这么方便的。。那么这种情况下,就是wsdl发挥作用的时候了。只要对方发布了web service,就一定会有一个wsdl文件,那么可以根据这个wsdl文件来手写还原java接口类和所需的实体类(比如本例中的User模型类),还有一个办法就是用wsdl2java工具,生成所需的类

在这个例子中,我直接把HelloWorld.java拷贝过来就行了,注意拷贝过来的时候,@WebService注解还是需要的

第2步是配置cxf,这里用到的是<jaxws:client>元素,和上面的<jaxws:endpoint>是对应的
Xml代码 收藏代码
<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">

<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:webservice_address.properties</value>
</list>
</property>
</bean>

<jaxws:client id="helloClient" serviceClass="com.huawei.webservice.client.HelloWorld"
address="${helloworld}" />

</beans>

其中serviceClass属性,就是指向HelloWorld所在的位置,address是目标web service的地址,也就是http://ip:port/app_name/webservice/HelloWorld

这里有一个额外的东西,就是把所有的address,放在单独的webservice_address.properties文件里管理,这样如果用到的web service比较多时,可以集中维护,不需要修改spring配置文件

第3步就是执行,十分简单
Java代码 收藏代码
public class Main {

public static void main(String[] args) {

ApplicationContext context = new ClassPathXmlApplicationContext(
"cxf.xml");
HelloWorld client = (HelloWorld) context.getBean("helloClient");

User user = new User();
user.setName("zhengshengdong");

String message = client.sayHi(user);
System.out.println(message);
}

}

上面可以看到,首先是启动Spring容器,然后像获取普通的bean一样,用getBean()方法实例化HelloWorld接口,然后直接在其上调用sayHi()方法即可

在这个过程中,CXF对底层的复杂操作进行了封装,包括将实体数据封装成soap格式的消息,然后塞到http的request post里,发送到目标web service。然后从返回的http response中取出soap格式的消息,再反向解析,生成实体对象
Linux内核配置选项详解及编译过程 在内核编译完成后,可以通过重启系统并选择新编译的内核来使用它。可以在该菜单下选择需要编译进内核的设备驱动,也可以选择将设备驱动编译为模块。可以在该菜单下选择需要编译进内核的设备驱动,也可以选择将设备驱动编译为模块。可以选择需要的调试选项,并根据需要启用或禁用相应的功能。可以选择需要的文件系统类型,并根据需要启用或禁用相应的选项。可以选择需要的网络协议和功能,并根据需要启用或禁用相应的选项。可以选择需要的调试选项,并根据需要启用或禁用相应的功能。可以选择需要的文件系统类型,并根据需要启用或禁用相应的选项。 阅读详情

相关推荐

研发工作量科学量化评估模型:从多维系数到等级落地指南

摘要:本文提出了一套基于多维系数的科学量化评估模型,用于精准评估软件开发工作量。该模型从需求复杂度、技术难度、质量要求和依赖风险四个核心维度进行量化评估,通过系数乘积计算综合工作量。文章详细说明了各维度的系数区间划分标准,并演示了从基础工作量估算到综合系数计算的具体步骤。该模型通过结构化评估过程,将主观经验转化为客观量化指标,帮助团队提高工作量评估的准确性,增强项目交付的可预测性。其价值在于使评估过程透明化、结构化和可追溯,从而减少项目延期风险,优化资源规划。

友莘居士的博客 1682

java使用cxf调用webservice

java使用cxf调用webservice

LuoHuaX的博客 1049

2025虚幻游戏逆向工程解包尝试

2025虚幻游戏逆向工程解包指南 本文详细介绍了虚幻引擎5游戏逆向解包的完整流程,主要包括获取AES密钥、生成映射文件和导出资源三个关键步骤。作者在实际操作中遇到诸多难题:AES密钥获取工具存在加壳保护问题,映射文件生成器依赖复杂的VS编译环境,DLL注入工具的使用也存在技术门槛。通过多次尝试,作者发现部分游戏可直接搜索现成的AES密钥,而映射文件生成需要额外下载Memcury依赖库才能正常编译。文章提供了相关工具的下载链接和具体操作说明,但同时也指出每个环节都可能出现意外状况,逆向工程实际执行过程远比理论

wsdchong的博客 6150

SpringBoot | 第三十四章:CXF构建WebService服务

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33991727的博客 373

基于FreeRTOS与MQTT的物联网技术应用系列——步进电机控制(三)SD卡驱动、FatFS等的移植和ini配置文件读取的实现

本文实现了基于STM32F107VC的金牛开发板的基于SPI模式的SD卡驱动和FatFS的移植,以及利用minini库对ini配置信息文件进行读取。

sqshining的专栏 2137

高精度磁力计RM3100 传感器LR振荡电路偏置电路分析

LR振荡器电路通过正向和反向偏置实现磁场测量。Sen-XY-f/Z-f传感器线圈作为电感元件构成LR弛张振荡电路,其振荡频率随磁场变化而改变。测量时,线圈一端接地,另一端交替通入正反向电流,通过两次偏置测量消除电路自身磁场干扰,仅保留外部磁场影响。MagI2C芯片通过高速时钟测量振荡次数和时间差,计算磁场强度。该设计具有抗干扰强、数字化输出和高分辨率等优势,是RM3100传感器高精度磁测量的核心原理。

bother3000的博客 1135

java使用CXF生成客户端实现调用webService接口

进入下载好的Apache CXF的bin目录下输入cmd命令在黑窗口输入解析wsdl的命令。1.使用cxf框架生成webservice客户端代码 首先需要下载Apache CXF。下载后配置系统环境变量,在cmd中输入 wsdl2java -h命令测试是否配置成功。wsimport是JDK自带的解析wsdl文件生成本地客户端代码的工具。把解析后生成的客户端代码,放在项目目录下.-s . .为当前目录。

T1aN_的博客 3772

工业视觉实战:用摄像头+AI高精度测量钢板尺寸(附深度分析)

摘要: 钢铁制造业正加速采用基于摄像头与深度学习的视觉测量技术,以取代传统人工测量,实现钢板长、宽、高(厚)的非接触、高精度在线检测。核心方案包括单目视觉(低成本但受限于变形)、双目/多目立体视觉(可精确测量变形钢板)及3D激光扫描(微米级精度)。系统精度受硬件(相机分辨率、镜头)、算法(亚像素技术)及环境稳定性共同影响,综合精度可达±0.1mm。实战中需重点解决热膨胀(需红外测温实时补偿)和钢板变形(必须采用三维方案)两大挑战,并通过工程化设计(散热、防振)确保系统可靠运行。该技术需融合光学、机械与算法,

数字人生 391

java使用CXF调用webservice(生成客户端代码方式)

本文介绍“插件生成” 和“脚本”两种方式 准备工作: 1、下载:axis2-1.7.4-bin.zip,axis2-1.7.4-war.zip 下载地址:http://axis.apache.org/axis2/java/core/ 2、环境变量设置 AXIS2_HOME E:\axis2-1.7.4-bin\axis2-1.7.4 JAVA_HOME C:\Program Files\Java\jdk1.6.0_21 3、axis2-1.7.4-war.zip解压,将压缩包内的axis2.war部署..

Aplumage的专栏 1367

huggingface高速下载模型的实战代码

本文主要介绍了huggingface高速下载模型的实战代码,尤其是无法通过国内源进行下载的huggingface模型,希望能对学习大模型的同学们有所帮助。需要特别说明的是,本文的代码是完全原创的,即能够最大限度利用宽度的速度,而且还能实现断点续传。 文章目录 1. 背景 2. 实战代码

herosunly的博客 29万+

利用 RSAU_LOG_API 把 SAP 安全审核日志接入企业 SIEM 的完整指南

在 SAP 世界里,安全审核日志(Security Audit Log,简称 SAL)是审计和合规的核心基础设施之一。系统会在后台把安全相关的关键事件记录下来,比如:(用户登录与登录失败用户锁定、解锁权限对象或角色变更远程调用(RFC)相关活动关键事务码的启动程序直接执行、批处理作业相关的敏感操作传统 ABAP 系统里,这些日志会写到本地应用服务器上的审计文件中(背后对应类似表RSAUENTR2的结构),包含事件标识、客户端、用户、终端、事务码、时间戳等信息。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 161

Java 前台 cxf 调用 WebService 问题汇总

最近与客户对接接口,客户提供了WebService测试地址,调用过程中出现了一些问题,在此记录下。 1. unexpected element (uri:“http://xxx.xxx.xxx”, local:“arg”). Expected elements are &amp;amp;amp;amp;lt;{}arg&amp;amp;amp;amp;gt; 直接使用axis方式调用WebService,返回异常信息 unexpected element (u...

null 1万+

基于lstm+gru+transformer的电池寿命预测健康状态预测-完整数据代码

基于lstm+gru+transformer的电池寿命预测健康状态预测-完整数据代码

881

Java CXF RestFul风格的web service发布与调用

优点: Ø如此restful风格的web service定制完毕。 ØRestful风格的web service是直接通过http协议通信。       所以,可以直接通过浏览器访问服务方法       相对于soap格式的web service 更快,不愈要声称客户端代码。 一、发布: Ø导入依赖jar Ø定制RetFul风格的web service Ø将w

zhangyunfeixyz的博客 2692

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【WebService】使用cxf发布及调用web service

什么是 CXF? CXF 是目前最主流 WebService 开发框架 ,由 Apache 提供。 CXF WebService 开发,主要分为两种服务提供方式 WS 、RS JAX-WS 传输数据,就是 XML 格式,基于 SOAP 协议 JAX-RS 传输数据,传输 XML 格式或者 JSON 格式,基于 HTTP 协议 JAX-WS独立服务使用 1、 建立 maven java 项目 2、 在项目中导入 CXF jar 包支持 <dependencies>

ooooooooooooooxiaosu的博客 444

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Springboot整合CXF发布Web service和客户端调用(用户和密码验证)

Springboot整合CXF发布Web service和客户端调用(用户和密码验证)服务端:pom.xmlCXF 配置ServiceMasterServiceMasterImplClientLoginInterceptor服务端,定义拦截器用户用户验证客户端pom.xmlWebController下载地址:https://download.csdn.net/download/qq_4245914...

茉莉蜜茶丶hi 2325

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

cxf+spring发布webservice和调用

这是转载的,不知道对不对,没有亲自试,有机会自己亲自测试,看行不行! 项目所需jar包:http://url.cn/V6RvIw 因为我用到了httpclient,所以里面包含了httpclient的jar包。 建项目什么就不说了。 直接上代码说接口: 写一个demo接口 ? 1 2 3 4 5 6 7 8 package c

fanlulu2015的博客 345

Android调用Axis、Axis2、Cxf发布的web service

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33898876的博客 276

SPRINGBOOT整合CXF发布WEB SERVICE和客户端调用(用户和密码验证)

springboot整合CXF发布web wervice和客户端调用(用户和密码验证)

没啥可说的,一切都看博客吧 900

CXF简单实现web service服务器端

一,        目的1.       通过cxf实现webservice服务器端的发布,从而为其他应用提供接口服务2.       通过cxf调用其他应用提供的webservice服务 二,        说明此处Cxf 采用的版本为2.1.3,cxf的工具包网上有免费下载。 三,        服务器端实现步骤 1.      将cxf工具包中apache

pxz123的专栏 2182

CXF开发指南

Web Services、SOA简介: SOA 目前已经成为了人人皆知的热点,对分析人员来讲,SOA 重点需要加强对业务服务的分析;各种不同的服务是 SOA 的重要基础;ESB 则提供了一个舞台,让各种异构系统的业务服务在这里进行实际业务的展现、集成等。对开发人员来讲,如何更快速地创建出更稳定的业务服务组件是关键;应该更加深入领会使用面向接口的组件化开发方式;开发人员重点是保障服务的生命周期,其它的事情则让业务开发人员来做。 SOA 的重点在于服务的重用,更高一级层次的重用则属于业务层次了。但是对于开发人员

woaini886353的博客 652

Web Service 入门 一看会!

Web Service 入门 一、什么是web service 1.1 概念 它是一种跨编程语言和跨操作系统平台的远程调用技术即跨平台远程调用技术。将调用方称为客户端,将被调方称为服务端,客户端通过网络通信协议访问服务端提供的接口。 xml是web service的跨语言、跨平台的基础,XML主要的优点在于它既与平台无关,又与厂商无关。 web service采用标准SOAP(Simple Object Access Protocol) 协议传输,soap属于w3c标准。Soap协议是基于ht

weixin_43967401的博客 927

web service014——spring整合jaxws发布和调用CXF类型的webservice服务,拷贝服务端接口文件方式

一、服务端 1.1、创建动态web工程,并导入cxf的jar包 1.2、接口及接口的实现 1.3、spring配置——applicationContent.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" x

weixin_45084986的博客 805

CXF wsdl2Java

一. 简介 Apache CXF 是一个Service框架,他简化了Service的创建, CXF实现了JAX-WS2.0规范,并通过了JAX-WS2.0 TCK; CXF和Spring无缝集成;CXF支持多种传输协议(HTTP, JMS, Corba等), 支持多种Binding数据格式(SOAP,XML,JSON等), 支持多种DataBinding数据类型(JAXB, Aegis) 。C...

linshow26的博客 168

WebService接口实现

一、服务端

qq_37634156的博客 1672
上一篇: 【WebService】通过CXF发布WebService第一例
下一篇: Solr使用初探——SolrJ的使用
linshow26
博客等级 码龄14年 0粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值