CXF框架入门实例

cxf实现webservice简单案例 1.创建一个简单的maven工程,添加依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.a... 阅读详情

CXF是apache旗下的开源框架,由Celtix + XFire这两门经典的框架合成,是一套非常流行的web service框架。

它提供了JAX-WS的全面支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用,同时它能与spring进行完美结合。

在apache cxf官网提供了cxf较全面的帮助文档,英语教好的童鞋可以到这个地址学习:http://cxf.apache.org/docs/index.html

 

下面就以官网教程为例,简单介绍下cxf的使用。

 

1、依赖的jar包

去官网下载cxf压缩文件:http://cxf.apache.org/download.html

解压后,把apache-cxf-2.4.1\lib目录下的jar包引用到java项目中

 

2、JAX-WS简单实例

 首先编写一个ws接口:

Java代码   收藏代码
  1. @WebService  
  2. public interface HelloService {  
  3.     public String sayHi(String text);  
  4.     public String getUser(User user);  
  5.     public List<User> getListUser();  
  6. }  

 

需要在接口头部注明一个"WebService"注解,表示这是一个webservice。

至于User类则是一个序列化的javabean(在对象传输过程建议尽量序列化,熟悉java io的朋友应该清楚这点):

Java代码   收藏代码
  1. public class User implements Serializable{  
  2.     private static final long serialVersionUID = 1001881900957402607L;  
  3.       
  4.     private Integer id;  
  5.     private String name;  
  6.   
  7.    getter,setter...  
  8. }  

 

然后编写接口的实现类:

Java代码   收藏代码
  1. @WebService(endpointInterface = "com.bless.ws.HelloService", serviceName = "HelloService",portName="HelloServicePort")  
  2. public class HelloServiceImpl implements HelloService {  
  3.   
  4.     @Override  
  5.     public String sayHi(String text) {  
  6.         System.out.println("sayHi called...");  
  7.         return "Hi :" + text;  
  8.     }  
  9.   
  10.     @Override  
  11.     public String getUser(User user) {  
  12.         System.out.println("sayUser called...");  
  13.         return "User:[id=" + user.getId() + "][name=" + user.getName() + "]";  
  14.     }  
  15.   
  16.     @Override  
  17.     public List<User> getListUser() {  
  18.         System.out.println("getListUser called...");  
  19.         List<User> lst = new ArrayList<User>();  
  20.         lst.add(new User(2, "u2"));  
  21.         lst.add(new User(3, "u3"));  
  22.         lst.add(new User(4, "u4"));  
  23.         lst.add(new User(5, "u5"));  
  24.         lst.add(new User(6, "u6"));  
  25.         return lst;  
  26.     }  
  27.   
  28. }  

 此时注解WebService内还有三个属性:

endpointInterface表示webservice接口名,因为一个类可以继承多个接口,你必须指明哪个是webservice接口

serviceName:表示当前webservice的别名

portName:表示当前webservice的端口名

这些属性定义好之后,在wsdl中是能看到的,如果不定义,cxf会配置默认的别名和端口名

 

最后一步部署webservice:

Java代码   收藏代码
  1. public class Server {  
  2.       
  3.     protected Server() throws Exception {  
  4.         // START SNIPPET: publish  
  5.         System.out.println("Starting Server");  
  6.         HelloServiceImpl implementor = new HelloServiceImpl();  
  7.         String address = "http://localhost:8111/helloWorld";  
  8.         Endpoint.publish(address, implementor);  
  9.         // END SNIPPET: publish  
  10.     }  
  11.       
  12.     public static void main(String[] args) throws Exception {  
  13.         new Server();  
  14.         System.out.println("Server ready...");  
  15.   
  16.         Thread.sleep(5 * 60 * 1000);  
  17.         System.out.println("Server exiting");  
  18.         System.exit(0);  
  19.     }  
  20. }  

 web service是需要部署到服务器的,通过Endpoint.publish方法部署的话,我估计是部署到jetty上的,具体神马情况,因为个人经验不足在这不胡说了。通过运行main函数就可以启动服务了,检验服务是否启动,可以访问如下地址:http://localhost:8111/helloWorld?wsdl,如果能显示正确的xml信息则表示服务启动成功。

 

最后写一个客户端程序调用web service:

Java代码   收藏代码
  1. public final class Client {  
  2.   
  3.     private static final QName SERVICE_NAME   
  4.         = new QName("http://ws.bless.com/", "HelloService");  
  5.     private static final QName PORT_NAME   
  6.         = new QName("http://ws.bless.com/", "HelloServicePort");  
  7.   
  8.   
  9.     private Client() {  
  10.     }   
  11.   
  12.     public static void main(String args[]) throws Exception {  
  13.         Service service = Service.create(SERVICE_NAME);  
  14.         // Endpoint Address  
  15.         String endpointAddress = "http://localhost:8111/helloWorld";  
  16.   
  17.         // Add a port to the Service  
  18.         service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);  
  19.           
  20.         HelloService hw = service.getPort(HelloService.class);  
  21.         System.out.println(hw.sayHi("World"));  
  22.   
  23.         System.out.println(hw.getUser(new User(1, "kaka")));  
  24.           
  25.         for(User user : hw.getListUser()){  
  26.             System.out.println("List User [id:"+user.getId()+"][name:"+user.getName()+"]");  
  27.         }  
  28.     }  
  29.   
  30. }  

 

 

测试:

首先启动server,如果没问题的话,再启动clien,大家可以看控制台的效果。

 

 

3、CXF与spring整合:

熟悉spring的朋友应该知道spring的IOC管理对象非常强大,那么cxf与spring整合也是源于此目的:

Java代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"  
  4.     xsi:schemaLocation="  
  5. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd  
  6. http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">  
  7.   
  8.     <import resource="classpath:META-INF/cxf/cxf.xml" />  
  9.     <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />  
  10.     <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />  
  11.   
  12.     <jaxws:endpoint id="helloWorld" implementor="com.bless.ws.HelloServiceImpl" address="http://localhost:8080/webservice/helloService" />  
  13.       
  14.     <jaxws:client id="helloClient" serviceClass="com.bless.ws.HelloService" address="http://localhost:8080/webservice/helloService" />  
  15.       
  16. </beans>  

 

大家可以通过java代码测试(测试时把上一步配置的beans.xml文件放在src根下面):

Java代码   收藏代码
  1. public class SpringTest {  
  2.     public static void main(String[] args) {  
  3.         // START SNIPPET: client  
  4.         ClassPathXmlApplicationContext context   
  5.             = new ClassPathXmlApplicationContext("beans.xml");  
  6.           
  7.         HelloService client = (HelloService)context.getBean("helloClient");  
  8.   
  9.         String response = client.sayHi("Joe");  
  10.         System.out.println("Response: " + response);  
  11.         System.exit(0);  
  12.         // END SNIPPET: client  
  13.     }  
  14. }  

 

 

如果是web项目,那么你需要配置web.xml文件:

 

Java代码   收藏代码
  1. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.     xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
  3.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
  4.     id="WebApp_ID" version="2.5">  
  5.     <display-name>CxfDemo</display-name>  
  6.   
  7.     <context-param>  
  8.         <param-name>contextConfigLocation</param-name>  
  9.         <param-value>WEB-INF/beans.xml</param-value>  
  10.     </context-param>  
  11.   
  12.     <!--Spring ApplicationContext 载入 ,必须-->  
  13.     <listener>  
  14.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  15.     </listener>  
  16.   
  17.     <!-- Spring 刷新Introspector防止内存泄露 -->  
  18.     <listener>  
  19.         <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>  
  20.     </listener>  
  21.   
  22.     <servlet>  
  23.         <servlet-name>CXFServlet</servlet-name>  
  24.         <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>  
  25.         <load-on-startup>1</load-on-startup>  
  26.     </servlet>  
  27.   
  28.     <servlet-mapping>  
  29.         <servlet-name>CXFServlet</servlet-name>  
  30.         <url-pattern>/webservice/*</url-pattern>  
  31.     </servlet-mapping>  
  32.   
  33. </web-app>  
CXF入门教程(一) CXF 简介 Apache CXF = Celtix + XFire,Apache CXF 的前身叫 Apache CeltiXfire,现在已经正式更名为 Apache CXF 了,以下简称为 CXF。CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Tra... 阅读详情

相关推荐

cxf-core-3.2.4_cxf_源码

cxf的jar包,请随意下载。?乛?乛?

webservice之cxf及整合spring自学结果

webservice之cxf

学而不敲则罔,敲而不学则殆 391

cxf-core-3.0.1-API文档-中文版.zip

赠送jar包:cxf-core-3.0.1.jar; 赠送原API文档:cxf-core-3.0.1-javadoc.jar; 赠送源代码:cxf-core-3.0.1-sources.jar; 赠送Maven依赖信息文件:cxf-core-3.0.1.pom; 包含翻译后的API文档:cxf-core-3.0.1-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.apache.cxf:cxf-core:3.0.1; 标签:cxf、core、apache、jar包、java、API文档、中文版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

WebService之CXF笔记

分为Server和Client两个部分 1.Server端 1.1如果用Jetty实现,在pom中需要引入jetty和cxf的依赖 <dependencies> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-core</artifactId> <vers

jacksonary的博客 380

HI3403烧录全流程:从ToolPlatform安装到eMMC配置避坑指南

本文详细介绍了海思HI3403芯片的完整烧录流程,涵盖从ToolPlatform工具安装、驱动配置到eMMC分区策略的实战指南。文章深入解析了BurnTool工具的使用方法、关键配置项,并提供了烧录过程中的常见问题排查与解决方案,旨在帮助开发者高效、稳定地完成HI3403嵌入式系统的部署。

weixin_29279101的博客 333

一文详解本地知识库RAG(检索增强):LangChain + Hugging Face 三件套 + 本地大模型 + MCP 协议 + Chroma + Agent 全流程实战

模型上下文协议(MCP)是 Anthropic 推出的开放标准,基于 JSON-RPC 2.0,为 AI 应用与外部工具/数据源之间提供统一的双向通信协议,被称为“AI 应用的 USB-C”。LangChain 是一个围绕 LLM、提示模板(Prompts)、记忆(Memory)、链(Chains)、工具(Tools)和代理(Agents)等组件打造的开源框架,旨在简化复杂自然语言应用的开发。:任意可调用的功能或服务(API、数据库查询、本地函数等),由 Agent 或 Chain 在推理过程中调用。

weixin_41645791的博客 1425

【WebService框架-CXF】——CXF入门实例

这篇文章主要介绍如何编写WebService的服务端和客户端 准备工作 下载apache-cxf-2.4.0的jar包 将bin目录配置到环境变量中,如:E:\Workspaces\MyEclipse 10\CXF\apache-cxf-2.4.0\bin 编写服务端编写服务端 1. New –》 Java Project  备注:如果使用apache-cxf-2.4.0,

To Begin,Begin   4456

华为防火墙USG6000系列多ISP上网(通过WEB界面设置)

华为防火墙多ISP上网,内网分区上网。内网多网段不同上网方式。

daxihe880的博客 1万+

Apache CXF框架webservice入门实例

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

weixin_34324081的博客 114

无人机视角下基于YOLOv5/v8/v10的车辆检测系统:从算法原理到UI界面实战

随着无人机技术的普及和智慧城市的发展,无人机视角下的车辆检测在交通监控、战场侦察、灾害救援等领域展现出巨大的应用价值。然而,无人机航拍图像存在目标尺度小、视角多变、背景复杂等挑战。本文深入探讨了如何利用YOLOv5、YOLOv8、YOLOv10三个代表性目标检测算法,构建一套完整的无人机车辆检测系统。文章不仅详细解析了各版本YOLO的核心技术演进,还提供了从数据集准备、模型训练、性能评估到基于PyQt5/PySide6的图形界面开发的完整代码实现。通过本文,读者将能够掌握构建无人机实时车辆检测系统的全流程技

YOLO 172

Dify使用教程3:Dify创建工作流

Dify使用教程3:Dify创建工作流 接着,我们连接下一个节点:“LLM”填入上下文变量为:result。这时候知识库就添加成功了。添加新节点:结束节点。

拥抱具身智能,昇腾Ascend C 5129

java webservice 开发教程_Apache CXF开源框架实现java webservice接口开发的入门实例教程...

本资料为webservice接口入门例子,主要描述通过CXF方式开发webservice接口,包含了服务端Server接口的开发与对外发布以及客户端Client调用过程。Apache CXF 是一个开放源代码框架,提供了用于方便地构建和开发 Web 服务的可靠基础架构。它允许创建高性能和可扩展的服务,您可以将这样的服务部署在 Tomcat 和基于 Spring 的轻量级容器中,以及部署在更高级的服...

weixin_32528123的博客 527

045、镜头模组公差链分析:从 Lens 到 Sensor 的装配公差累积与良率优化

本文深入分析了镜头模组从镜片到传感器各环节的公差累积问题及优化策略。文章首先剖析了四级公差链(镜片单体、镜筒装配、VCM定位、传感器贴装)的误差传递机制,指出各环节典型公差值及其影响(如5微米镜片偏差可导致0.02度光线偏折)。其次对比了最坏情况法与均方根法的差异,强调需考虑公差相关性(如镜片曲率与镜筒间隙的正相关性)。最后提出良率优化"三板斧":通过蒙特卡洛仿真优化公差分配、采用主动对准工艺在线补偿、建立数据反馈闭环系统,并结合"阴阳脸"案例说明如何定位根因(模具磨损+贴片机老化导致的误差叠加)。作者总结

sundong_81的博客 59

CXF框架

CXF框架CXF框架常见的远程调用技术WebService特点SOAP 协议WSDL服务器客户端公共开放的WebService CXF框架 Apache CXF 是一个开源的 WebService 框架,**CXF可以用来构建和开发 WebService,这些服务可以支持多种协议,比如:SOAP、POST/HTTP、HTTP ,**CXF 大大**简化了WebService**并且可以**天然地...

qq_36932217的博客 3283

华为od 面试八股文_前端_01_含答案

华为od 面试八股文_前端_01_含答案

MISAYAONE的博客 2748

【PCIe EP 设备入门学习专栏 -- 8 PCIe EP 架构详细介绍】

Synopsys PCIe 5.0 EP 架构由多个功能模块组成,整体遵循分层 + 模块化设计CXPL(事务层 + 链路层 + 物理层 MAC)XADM(仲裁/生成)、XAIM(应用接口)RADM(过滤/路由/Completion)CDM(配置空间)、PMC(电源管理)、LBC/DBI(寄存器访问)MSG_GEN(消息)、CXS(多芯片一致性)

CodingCos的博客 383

【WebService框架-CXF】——WebService和CXF

在接下来的几篇博客中将对CXF的基础知识和简单应用进行总结。下面列出了要总结的内容。本篇文章集中介绍CXF的基础知识。 CXF博客总结目录WebService和CXF基础知识 CXF入门实例(编写客户端和服务端) CXF对Map等无法自动转化的类型的处理 CXF添加普通拦截器和自定义拦截器 CXF+Spring+自定义拦截器构建WebService服务端 CXF+Spring+Struts

To Begin,Begin   2403

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: 运用CXF开发webService接口服务端和客户端
下一篇: Oracle sql语句插入多条数据--已解决
wangcomputer2010
博客等级 码龄17年 9粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值