一、说明:

前面介绍了使用axis2来发布Webservice服务,现在介绍一种更popular,更高效的Webservice服务发布技术:CXF

Apache CXF = Celtix + XFire,Apache CXF 的前身叫 Apache CeltiXfire,现在已经正式更名为 Apache CXF 了,以下简称为 CXF。CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用。目前它仍只是 Apache 的一个孵化项目。

Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services ,像 JAX-WS 。这些 Services 可以支持多种协议,比如:SOAP、XML/HTTP、RESTful HTTP 或者 CORBA ,并且可以在多种传输协议上运行,比如:HTTP、JMS 或者 JBI,CXF 大大简化了 Services 的创建,同时它继承了 XFire 传统,一样可以天然地和 Spring 进行无缝集成。

CXF 框架是一种基于 Servlet 技术的 SOA 应用开发框架,要正常运行基于 CXF 应用框架开发的企业应用,除了 CXF 框架本身之外,还需要 JDK 和 Servlet 容器的支持。

二、利用CXF进行简单webservice服务的发布与调用

①.  新建一个Java Project  ,CXFDemo ,并在工程下新建lib文件夹,加入CXF的jar包:

cxf-core-3.1.4.jar
jaxb-core-2.2.11.jar
jaxb-impl-2.2.11.jar
neethi-3.0.3.jar
wsdl4j-1.6.3.jar
xmlschema-core-2.2.1.jar

然后build path ,将架包加入到类路径下。

②.  在src下,新建3个package ,并分别在各个包下创建对应的相关接口和类:

com.elgin.cxf.entities
com.elgin.cxf.service
com.elgin.cxf.service.impl

❶、在service包下新建接口  HelloService

package com.elgin.cxf.service;import javax.jws.WebParam;
import javax.jws.WebService;import com.elgin.cxf.entities.User;@WebService
public interface HelloService {public String sayHello(@WebParam(name="text")String text);public String sayHellloToUser(User user);
}

❷、在service.impl 包下新建接口的实现类 HelloServiceImpl

package com.elgin.cxf.service.impl;import javax.jws.WebService;import com.elgin.cxf.entities.User;
import com.elgin.cxf.service.HelloService;@WebService(endpointInterface="com.elgin.cxf.service.HelloService",serviceName="HelloService")
public class HelloServiceImpl implements HelloService {@Overridepublic String sayHello(String text) {System.out.println("param text is :" + text);return "hello " + text;}@Overridepublic String sayHellloToUser(User user) {System.out.println("param user is :" +user);return "hello " + user.getName();}}

❸、entities包下新建用到的User类:

package com.elgin.cxf.entities;public class User {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public User(){}public User(String name) {super();this.name = name;}@Overridepublic String toString() {return "User [name=" + name + "]";}}

③.  新建package  :com.elgin.cxf.publish

并在此包下新建类: Server  用来发布webservice服务:

package com.elgin.cxf.publish;import javax.xml.ws.Endpoint;import com.elgin.cxf.service.impl.HelloServiceImpl;public class Server {public static void main(String[] args) {System.out.println("cxf service start..");HelloServiceImpl serviceImpl=new HelloServiceImpl();String address="http://localhost:8080/service/hello";Endpoint.publish(address, serviceImpl);}
}

④  运行查看发布情况:

在浏览器输入:http://localhost:8080/service/hello?wsdl ,出现下图所示数据,表示发布webservice服务成功

⑤ 服务调用代码以及结果:

package com.elgin.cxf.client;import java.net.URL;import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import javax.xml.ws.soap.SOAPBinding;import com.elgin.cxf.entities.User;
import com.elgin.cxf.service.HelloService;public class Client {private static final QName SERVICE_NAME = new QName("http://impl.service.cxf.elgin.com/", "HelloService");private static final QName PORT_NAME = new QName("http://impl.service.cxf.elgin.com/", "HelloServicePort");private Client() {} public static void main(String args[]) throws Exception {rightInvoker();exceptionInvoker();}/* * @Title: rightInvoker* @Description: 可成功调用,返回正确的结果* @throws Exception    参数*/public static void rightInvoker() throws Exception  {// Endpoint AddressString endpointAddress = "http://localhost:8080/service/hello";URL url=new URL(endpointAddress);Service service = Service.create(url,SERVICE_NAME);HelloService hs = service.getPort(HelloService.class);System.out.println(hs.sayHello("World"));User user = new User("Jack");System.out.println(hs.sayHellloToUser(user));}/** @Title: exceptionInvoker* @Description: 调用时出现异常错误信息:* * Exception in thread "main" javax.xml.ws.WebServiceException: * WSDL Metadata not available to create the proxy, * either Service instance or ServiceEndpointInterface com.elgin.cxf.service.HelloService should have WSDL information* * 对于造成上述异常的具体原因尚不明确,很有可能是缺少CXF某个jar包引起*/public static void exceptionInvoker(){// Endpoint AddressService service = Service.create(SERVICE_NAME);String endpointAddress = "http://localhost:8080/service/hello";service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);HelloService hs = service.getPort(HelloService.class);System.out.println(hs.sayHello("World"));User user = new User("Jack");System.out.println(hs.sayHellloToUser(user));}
}

正确运行结果:

hello World
hello Jack

转载于:https://www.cnblogs.com/elgin-seth/p/5293724.html

使用CXF发布WebService服务简单实例相关推荐

  1. cxf发布 webservice服务

    导包 antlr-2.7.7.jar aopalliance-1.0.jar asm-3.3.jar commons-collections-3.2.1.jar commons-lang-2.6.ja ...

  2. webservice实例java_Java WebService(实战) 简单实例

    一.准备工作(以下为本实例使用工具) 1.MyEclipse10.7.1 2.JDK 1.6.0_22 二.创建服务端 1.创建[Web Service Project],命名为[TheService ...

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

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

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

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

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

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

  6. Springboot 基于CXF构建WebService服务

    前言 最近因为系统需要接入了一个新的支付通道,一般来说都是使用RestApi 来接入,但是本次接入的支付通道为境外支付,使用的WebService,对于WS我们在实际业务中基本上不会用到,所以查阅了一 ...

  7. 用Java 开发 WebService Axis简单实例

    用 Java 开发 WebService Axis 简单实例 在开发之前, 先了解一下AXIS,axis目前出现的2版本以其灵活性,快速开发工具的集成高于xfire而使用者居其上.用Eclipse开发 ...

  8. java cxf服务端代码_【JAVA】 cxf 生成 webservice 服务端代码

    CXF Apache CXF = Celtix + XFire.CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding . ...

  9. vue 调用webservice_js跨域调用WebService的简单实例

    步骤1. 在web.config中的system.web节点里加入 步骤2.webservice代码 using System; using System.Collections.Generic; u ...

最新文章

  1. 酒桌游戏c语言,最受欢迎的12种酒桌游戏
  2. CentOS 7下用firewall-cmd
  3. 【Groovy】MOP 元对象协议与元编程 ( 方法注入 | 使用 MetaClass 注入静态方法 )
  4. 一日一学:返回排序好的列表的索引顺序
  5. java连接ldap验证,验证用户使用LDAP登录
  6. 收发一体超声波测距离传感器模块_超声波避障传感器在哪些地方运用
  7. Http Body 的四种格式
  8. 【MySQL性能优化的21个最佳实践】
  9. Maven开发笔记(三)—— Maven中dependencies和dependencyManagement
  10. Apizza-快速生成Api文档
  11. 路由器网速测试用哪个软件,怎么测网速比较准确,测试网速最准确的办法
  12. Chrome保存整个网页为图片、PDF
  13. 招聘中使用的奇葩心理分析
  14. GitHub 上最适合初学者的开源项目——Python 篇
  15. 判断字符串是否为纯英文或纯中文
  16. iOS App Crash 防护框架之 MKCrashGuard
  17. 时艳强对话杨霞:智能合约的安全bug,有可能让你的资产瞬间归零
  18. 产品经理应该懂哪些术语?
  19. 【Java编程练习】司机肇事后逃跑,现场三人半瞎系列
  20. 安装spss破解版以及spss安装之后提示我程序无法启动,因为应用程序的并行配置不正确

热门文章

  1. [机器学习-sklearn] KNN(k近邻法)学习与总结
  2. [深度学习]-基于tensorflow的CNN和RNN-LSTM文本情感分析对比
  3. 深度学习-TF函数-layers.concatenate用法
  4. github的python代码怎么跑_如何利用Python模拟GitHub登录详解
  5. TensorFlow 第一步 开门见山:Hello World!
  6. CCD摄像头视场角计算公式
  7. 【环境搭建001】ubuntu 和 win7 在vm 下的文件夹共享实践
  8. 安装npm_微信小程序使用npm安装第三方库
  9. 波士顿大学研究生计算机科学专业排名,2020年波士顿大学排名TFE Times美国最佳计算机科学硕士专业排名第52...
  10. mathcal 对应于什么库_数据库理论