一、CXF WebService准备
CXF官网:http://cxf.apache.org/
从官网上下载CXF Jar,将下载下来的Jar包解压后,目录为:
1、bin目录提供的是常用的dos控制台命令工具
2、docs 帮助文档
3、lib jar包、依赖库
4、lib-samples 也是jar包,有jetty、httpclients、junit等jar包
5、modules 打包好的WebService模块
6、samples示例demo
需要的Jar包如下:
1、 HelloWorldService服务器端代码
package com.iflytek.service; import javax.jws.WebParam; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; import javax.jws.soap.SOAPBinding.Style; /** * @author xdwang * * @create Apr 25, 2013 10:23:54 PM * * @email:xdwangiflytek@gmail.com * * @description CXF WebService 服务器端helloWorld示例 * */ @WebService @SOAPBinding(style = Style.RPC) public class HelloWorldService { public String sayHello(@WebParam(name = "name") String name) { return name + " say: Hello World "; } }
要说明的是,上面的服务器端代码运用了JDK5的新特性Annotation,这个非常好用。
需要注意的是,如果不添加@SOAPBinding(style = Style.RPC)注解,将会出现异常:
com.sun.xml.internal.ws.model.RuntimeModelerException: runtime modeler error
2、发布HelloWorldService
package com.iflytek.service.deploy; import javax.xml.ws.Endpoint; import com.iflytek.service.HelloWorldService; /** * @author xdwang * * @create Apr 25, 2013 10:28:13 PM * * @email:xdwangiflytek@gmail.com * * @description 发布CXF WebService * */ public class DeployHelloWorldService { /** * @descrption 发布WebService * @author xdwang * @create Apr 25, 201310:28:45 PM */ public static void deployService() { System.out.println("Server start ……"); HelloWorldService service = new HelloWorldService(); String address = "http://localhost:8000/helloWorld"; Endpoint.publish(address, service); } public static void main(String[] args) throws InterruptedException { // 发布WebService deployService(); System.out.println("server ready ……"); Thread.sleep(1000 * 60); System.out.println("server exiting"); // 休眠60秒后就退出 System.exit(0); } }
运行上面的main函数后在WebBrowser中请求:http://localhost:8000/helloWorld?wsdl,如果可以看到xml内容,说明发布成功了。
其中有会报
Exception in thread "main" org.apache.cxf.bus.extension.ExtensionException: Could not load extension class org.apache.cxf.ws.policy.AssertionBuilderRegistryImpl. at org.apache.cxf.bus.extension.Extension.tryClass(Extension.java:173) at org.apache.cxf.bus.extension.Extension.getClassObject(Extension.java:185) at org.apache.cxf.bus.extension.ExtensionManagerImpl.activateAllByType(ExtensionManagerImpl.java:138) at org.apache.cxf.bus.extension.ExtensionManagerBus.<init>(ExtensionManagerBus.java:126) at org.apache.cxf.bus.extension.ExtensionManagerBus.<init>(ExtensionManagerBus.java:134) at org.apache.cxf.bus.CXFBusFactory.createBus(CXFBusFactory.java:40) at org.apache.cxf.bus.CXFBusFactory.createBus(CXFBusFactory.java:36) at org.apache.cxf.bus.CXFBusFactory.createBus(CXFBusFactory.java:32) at org.apache.cxf.BusFactory.getDefaultBus(BusFactory.java:106) at org.apache.cxf.BusFactory.createThreadBus(BusFactory.java:216) at org.apache.cxf.BusFactory.getThreadDefaultBus(BusFactory.java:206) at org.apache.cxf.BusFactory.getThreadDefaultBus(BusFactory.java:193) at org.apache.cxf.jaxws.spi.ProviderImpl.createEndpoint(ProviderImpl.java:128) at org.apache.cxf.jaxws.spi.ProviderImpl.createAndPublishEndpoint(ProviderImpl.java:151) at javax.xml.ws.Endpoint.publish(Unknown Source) at com.iflytek.service.deploy.DeployHelloWorldService.deployService(DeployHelloWorldService.java:28) at com.iflytek.service.deploy.DeployHelloWorldService.main(DeployHelloWorldService.java:33) Caused by: java.lang.NoClassDefFoundError: org/apache/neethi/AssertionBuilderFactory at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(Unknown Source) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$000(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(Unknown Source) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$000(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at org.apache.cxf.bus.extension.Extension.tryClass(Extension.java:169) ... 16 more Caused by: java.lang.ClassNotFoundException: org.apache.neethi.AssertionBuilderFactory at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) ... 41 more
找了半天也没搞定,无奈之下将CXF的lib下的所有jar都copy进去了,就没报了,想找出具体是缺失哪一个也没找到,唉。
3、定制客户端调用WebService的接口
这个接口中的方法签名和参数信息可以从wsdl中的内容看到,代码如下:
package com.iflytek.service; import javax.jws.WebParam; import javax.jws.WebService; /** * @author xdwang * * @create Apr 25, 2013 10:30:38 PM * * @email:xdwangiflytek@gmail.com * * @description 客户端调用WebService所需要的接口 * */ @WebService public interface IHelloWorldService { public String sayHello(@WebParam(name = "name") String name); }
4、编写客户端调用WebService代码
package com.iflytek.client; import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; import com.iflytek.service.IHelloWorldService; /** * @author xdwang * * @create Apr 25, 2013 10:35:50 PM * * @email:xdwangiflytek@gmail.com * * @description CXF WebService客户端调用代码 * */ public class HelloWorldServiceClient { public static void main(String[] args) { // 调用WebService JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); factory.setServiceClass(IHelloWorldService.class); factory.setAddress("http://localhost:8000/helloWorld"); IHelloWorldService service = (IHelloWorldService) factory.create(); System.out.println("[result]" + service.sayHello("xdwang")); } }
运行结果:
2013-7-25 18:53:40 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass 信息: Creating Service {http://service.iflytek.com/}IHelloWorldServiceService from class com.iflytek.service.IHelloWorldService [result]xdwang say: Hello World
相关推荐
- **samples**: 包含了CXF的入门实例代码,这些例子可以帮助开发者快速理解和使用CXF的功能。 - **pom.xml**: Maven项目对象模型文件,用于构建和管理整个项目。 - **README.txt**: 提供项目的基本信息和使用指南。 ...
首先,让我们探讨一下CXF入门实例。这个部分通常会涵盖如何使用CXF创建一个基本的Web服务。这包括定义服务接口,实现该接口,然后使用CXF提供的工具或配置来发布这个服务。服务的客户端则可以通过CXF生成的客户端API...
如果你想要构建自己的Web服务或客户端,Apache CXF 2.5.9提供了丰富的文档和示例来帮助你入门。 总的来说,Apache CXF是一个强大的工具,它为开发高质量、跨平台的Web服务提供了便利。虽然2.5.9是一个旧版本,但在...
- `README`或`README.md`:通常包含项目简介、安装指南和快速入门等内容。 通过研究源代码,开发者可以深入理解CXF的工作原理,学习如何扩展和优化CXF以满足特定需求。此外,对于想要贡献代码给Apache CXF社区的...
特别是对于新用户,这些文档提供了快速入门的指导。 4. **示例**:为了便于开发者了解如何使用CXF,通常会提供一些示例项目。这些示例展示了如何创建和部署SOAP或RESTful服务,以及如何消费这些服务。通过运行和...
【CXF入门 -- 第一个简单webService】 Apache CXF 是一款强大的开源服务框架,它用于构建和开发服务,包括Web服务。本篇文章将带你入门CXF,通过创建一个简单的Web服务来理解其基本概念和工作流程。 1. **CXF简介*...
官方文档涵盖了从入门教程到高级特性的全面内容,是学习和使用CXF的重要参考。 综上所述,Apache CXF 3.1.6是一个强大的Web服务框架,它提供了全面的功能,让开发者能够高效地构建和维护Web服务。通过cxf-wsdl.bat...
入门 该插件已,可以使用 块进行应用: Groovy plugins { id " io.mateo.cxf-codegen " version " 1.0.0-rc.2 " } Kotlinplugins { id( " io.mateo.cxf-codegen " ) version " 1.0.0-rc.2 " } 文献资料 快照 下一...
**二、CXF 入门示例** **HelloWorldService** 是一个经典的入门示例,展示了如何创建和发布一个简单的Web服务。 1. **服务器端代码**: - 使用了JDK5的注解(Annotation),如`@WebService`和`@SOAPBinding`。 -...
弹簧靴骆驼CXF JAXRS快速入门 本示例演示了如何基于将Apache CXF与Spring Boot结合使用。 快速入门使用Spring Boot来配置一个小的应用程序,其中包括启用了Swagger的CXF JAXRS端点。 重要的 该快速入门可以在2种...
在Web服务开发中,"HelloWorld"是经典的入门示例,用于演示基本的服务器端和客户端交互。这个示例将展示如何使用CXF创建一个简单的服务端接口,定义一个方法如"sayHello",然后在客户端调用这个服务并打印出"Hello, ...
CXF入门步骤 #### 2.1 创建项目 首先,我们需要一个Maven项目,确保`pom.xml`中包含了CXF的依赖: ```xml <groupId>org.apache.cxf <artifactId>cxf-rt-frontend-jaxws <version>3.3.3 <groupId>org....
CXF入门教程(2) -- 简单客户端示例文章附带代码,为使用方便,将service和client代码合并到一个工程中。原文地址http://blog.csdn.net/neareast/article/details/7717568
【标题】:“CXF入门(Hello World)” 【描述】:这篇文章主要介绍如何使用Apache CXF框架进行Web服务开发,通过一个简单的“Hello World”示例来帮助初学者理解CXF的基本用法。 Apache CXF是一个开源的Java框架...
最后,Apache CXF的社区活跃,有丰富的文档和示例,方便初学者入门和高级用户深入研究。2.1版本的文档很可能已经包含了详细的教程和常见问题解答,帮助用户快速上手并解决遇到的问题。 总的来说,Apache CXF 2.1是...
Apache CXF是一个开源的服务框架,它允许开发人员构建和部署Web服务。这个压缩包"apache-cxf-2.4.0(Web Service代码生成)"显然包含了关于如何使用..."使用方法.txt"文件是入门的关键,务必仔细阅读并实践其中的步骤。
**CXF入门实例详解** Apache CXF 是一个开源的Java框架,主要用于构建和开发Web服务。它提供了多种方式来创建和消费SOAP以及RESTful服务,是Java世界中广泛使用的Web服务实现工具。在这个"CXF HelloWorld"入门实例...
本资源,是一些示例代码,包括CXF,Spring MVC,是编写博文的示例代码。同时会不断的修改,最新版本请看日期版本号 1.博文示例代码:使用CXF和Spring...2.博文示例代码:第 1 部分:Spring MVC入门,快速搭建web应用
入门 首先,将此存储库克隆到您的本地计算机并使用您喜欢的工具进行更深入的挖掘。 先决条件 您需要以下软件来完成此 POC: 命令行 导航到要克隆此项目的目录: cd $proj_root git clone git@github....
Apache CXF是一个开源的Java框架,它...总的来说,"apache-cxf-4.0.1"压缩包为开发者提供了一个完整的CXF开发环境,包括所有必要的库、文档和示例,便于开发者快速入门并充分利用CXF的强大功能来构建高质量的Web服务。