CXF webservice完整例子
Web Service技术应用广泛,可实现不同平台的数据交换,现做了一个CXF webservice小例子,供webservice初学者参考.
1.环境搭建
1.1 下载 Apache CXF 可以去官方下载 http://cxf.apache.org/ 。也可点击http://pan.baidu.com/s/1jIPyOYU 我分享的云盘下载(apache-cxf-2.4.2). 解压文件
1.2 配置Apache CXF环境变量: 创建一个CXF_HOEM变量,值为CXF框架所在根目录
在path中添加CXF_HOEM变量
1.3 创建java项目 引入 D:\work\apache-cxf-2.4.2\lib 目录下的jar包
2.代码编写
2.1 创建IHelloService.java 接口

package com.service; import javax.jws.WebParam; import javax.jws.WebService; @WebService public interface IHelloService { public String sayHello(@WebParam(name = "text") String text); public User getUser(String id); }
2.2 创建HelloServiceImpl.java实现 IHelloService 接口

package com.service; import java.util.Date; import javax.jws.WebService; @WebService(endpointInterface = "com.service.IHelloService", serviceName = "HelloWorld") public class HelloServiceImpl implements IHelloService { @Override public String sayHello(String text) { return "Hello x " + text; } @Override public User getUser(String id) { User u = new User(); u.setId(id); u.setAge(10); u.setName("小明"); u.setBirthday(new Date(new Date().getTime() - 10 * 12 * 30 * 24 * 3600)); return u; } }
2.3 编写 webServiceApp.java类来暴露 web服务

package com.service; import javax.xml.ws.Endpoint; public class WebServiceApp { public static void main(String[] args) { System.out.println("web service start"); HelloServiceImpl implementor = new HelloServiceImpl(); String address = "http://localhost:8080/HelloService"; Endpoint.publish(address, implementor); System.out.println("web service started"); } }
2.4 run webServiceApp.java 类来启动服务。 访问 http://localhost:8080/HelloService?wsdl 查看是否成功
2.5 编写客户端访问服务
======== 方法1:
创建客户端的代理,生成factory对象,用于调用服务端的方法
package com.service; import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; public class HelloServiceClient { public static void main(String[] args) { JaxWsProxyFactoryBean svr = new JaxWsProxyFactoryBean(); svr.setServiceClass(IHelloService.class); svr.setAddress("http://localhost:8080/HelloService"); IHelloService hw = (IHelloService) svr.create(); System.out.println(hw.sayHello("你好")); User u = hw.getUser("1"); System.out.println(u.getName()); } }
======== 方法2:
通过命令自动生成客户端文件
法一. 1.cmd 进入doc窗口,
2.用 wsimport -s D:\ -p com.client http://localhost:8080/HelloWorld?wsdl (不用安装apache-cxf客户端)命令生成
法二.
1. cmd 进入doc窗口, 进入apache-cxf-2.4.2\bin路径
2. 运行 wsdl2java -frontend jaxws21 -p com.client -d D:\ -client -autoNameResolution http://localhost:8080/HelloWorld?wsdl 会在D盘生成 com\client文件夹,里面有生成号的客户端文件。将文件拷贝到项目中
3. 调用接口
package com.main; import com.client.HelloWorld; import com.client.IHelloService; public class ClientMain { public static void main(String[] args) { HelloWorld factory = new HelloWorld(); IHelloService hw = factory.getHelloServiceImplPort(); System.out.println(hw.sayHello("sss")); System.out.println(hw.getUser("11").getName()); } }
下面链接可下载上述源码
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程