项目中要使用webService了;今天上午直接上官网学习CXF,本文来源于对官方文档A
simple JAX-WS service的翻译与实践,针对最新的cxf-2.6.1版本调整了所依赖的jar包,并在代码中补全了原文没有提到的一些类;边学边记录,谨防遗忘,顺便分享。
本例与cxf-2.6.1发行版中的示例java_first_jaxws相对应,适用于CXF
2.0.1及以上版本。
本文也附上了笔者代码的下载地址,欢迎下载;工程中不包含所引用的jar包,使用者参照文中的截图建立相应的user Library即可使用:
http://download.csdn.net/detail/neareast/4410086
搭建环境
打开你用的最顺手的IDE,创建一个新项目。笔者使用的是Eclipse indigo,创建了一个基本的Java项目。我们要做的第一件事就是在项目中加入CXF所依赖的类。我们可以在CXF的发行版的lib目录找到相应的jar包,注意根据发行版本的不同,jar包的版本号可能有相应的变化:
commons-logging-1.1.1.jar
geronimo-activation_1.1_spec-1.0.2.jar (or Sun's Activation jar)
geronimo-annotation_1.0_spec-1.1.1.jar (JSR 250)
geronimo-javamail_1.4_spec-1.6.jar (or Sun's JavaMail jar)
geronimo-servlet_2.5_spec-1.2.jar (or Sun's Servlet jar)
geronimo-ws-metadata_2.0_spec-1.1.2.jar (JSR 181)
geronimo-jaxws_2.1_spec-1.0.jar (or Sun's jaxws-api-2.1.jar)
geronimo-stax-api_1.0_spec-1.0.1.jar (or other stax-api jar)
jaxb-api-2.1.jar
jaxb-impl-2.1.12.jar
jetty-6.1.21.jar
jetty-util-6.1.21.jar
neethi-2.0.4.jar
saaj-api-1.3.jar
saaj-impl-1.3.2.jar
wsdl4j-1.6.2.jar
wstx-asl-3.2.8.jar
XmlSchema-1.4.5.jar
xml-resolver-1.2.jar
spring的包(可选,需要使用XML配置支持时引入):
aopalliance-1.0.jar
spring-core-2.5.5.jar
spring-beans-2.5.5.jar
spring-context-2.5.5.jar
spring-web-2.5.5.jar
当然,还有最重要的,CXF的包:
cxf-2.6.1的发行版所带的jar包与上面的清单有较大不同,笔者在Eclipse中创建了一个名为“cxf-dependency”的user Library,最终使用的jar包列表如下图所示:

开始写Service
首先我们写一个serivce接口,其中包含一个操作sayHi,它的作用是向其提交名字的人问好。
package com.neareast.test.cxf.service;
import java.util.Map;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import com.neareast.test.cxf.bean.User;
import com.neareast.test.cxf.util.IntegerUserMapAdapter;
@WebService
public interface iHelloWorld {
//加入WebParam注解,以保证xml文件中参数名字的正确性
String sayHi(@WebParam(name="text") String text);
/* Advanced usecase of passing an Interface in. JAX-WS/JAXB does not
* support interfaces directly. Special XmlAdapter classes need to
* be written to handle them
*/
String sayHiToUser(User user);
/* Map passing
* JAXB also does not support Maps. It handles Lists great, but Maps are
* not supported directly. They also require use of a XmlAdapter to map
* the maps into beans that JAXB can use.
*/
@XmlJavaTypeAdapter(IntegerUserMapAdapter.class)
Map<Integer, User> getUsers();
}
WebParam注解是必须的,因为java借口编译后的.class文件不保存参数的名字,所以如果没有加注解,参数将被命名为arg0。接口实现部分的示例如下:
package com.neareast.test.cxf.service;
import java.util.LinkedHashMap;
import java.util.Map;
import javax.jws.WebService;
import com.neareast.test.cxf.bean.User;
@WebService(endpointInterface = "com.neareast.test.cxf.service.iHelloWorld", serviceName = "HelloWorld")
public class HelloWorldImpl implements iHelloWorld {
Map<Integer, User> users = new LinkedHashMap<Integer, User>();
public String sayHi(String text) {
System.out.println("sayHi called");
return "Hello " + text;
}
public String sayHiToUser(User user) {
System.out.println("sayHiToUser called");
users.put(users.size() + 1, user);
return "Hello " + user.getName();
}
public Map<Integer, User> getUsers() {
System.out.println("getUsers called");
return users;
}
}
@WebService注解让CXF知道我们希望使用哪个接口来创建WSDL,本例中就是iHelloWorld接口。
发布服务
package com.neareast.test.cxf.service;
import javax.xml.ws.Endpoint;
public class ServiceTest {
protected ServiceTest() throws Exception {
// START SNIPPET: publish
System.out.println("Starting Server");
HelloWorldImpl implementor = new HelloWorldImpl();
String address = "http://localhost:9000/helloWorld";
Endpoint.publish(address, implementor);
// END SNIPPET: publish
}
public static void main(String args[]) throws Exception {
new ServiceTest();
System.out.println("Server ready...");
Thread.sleep(5 * 60 * 1000);
System.out.println("Server exiting");
System.exit(0);
}
}
第一次直接运行的时候,程序报错:
Exception in thread "main" javax.xml.ws.WebServiceException: javax.xml.ws.WebServiceException: Could not load Webservice SEI
检查代码发现,是HelloWorldImpl类的@WebService注解写错了,endpointInterface属性的值没有写对;改成正确的接口路径之后,程序运行就OK了。
service程序启动之后,用浏览器访问http://localhost:9000/helloWorld?wsdl,如果能够看到类似下图所示的XML文件,就说明我们的第一个webservice已经创建成功了!
分享到:
相关推荐
【CXF入门 -- 第一个简单webService】 Apache CXF 是一款强大的开源服务框架,它用于构建和开发服务,包括Web服务。本篇文章将带你入门CXF,通过创建一个简单的Web服务来理解其基本概念和工作流程。 1. **CXF简介*...
2. **快速入门**:引导开发者设置开发环境,创建第一个CXF Web服务,展示如何编写服务端和客户端代码。 3. **API参考**:提供CXF的详细API文档,包括类、接口和方法的描述,方便开发者查阅。 4. **示例代码**:...
第一天: 什么是webservice? 从案例(便民查询网站)分析如何实现? 使用socket实现。 使用jaxws开发webservice。 Webservice三要素 Wsdl(webservice使用说明书)重点掌握 Soap(jaxws开发webservice的传输协议...
CXF(CXF: Composite eXtensible Framework)是一个开源的Java框架,它主要用于构建和部署Web服务。作为初学者,了解并掌握CXF Webservice的使用是进入Web服务开发的重要一步。CXF允许开发者使用Java编程语言来实现...
**第一步:导入 CXF 相关包** 首先,你需要从官方下载地址(http://cxf.apache.org/download.html)获取 CXF 的 JAR 包,并将其添加到你的项目类路径中。通常,这可以通过将 JAR 文件放入 `WEB-INF/lib` 目录或在...
视频教程可能包含使用这些工具创建一个简单的WebService示例,包括定义服务接口、实现服务逻辑、发布服务以及编写客户端代码进行调用。 此外,安全性也是WebService开发中不可忽视的一环。因为数据在互联网上传输,...
2. **CXF入门**:学习如何安装和配置CXF环境,创建第一个CXF项目,包括服务端和客户端的搭建。 3. **JAX-WS实战**:通过实际案例,演示如何使用CXF和JAX-WS创建SOAP WebService,包括服务接口定义、服务实现、部署...
本项目以"webservice 第一个小项目"为主题,将带你入门Java实现的WebService技术。 首先,我们需要了解WebService的基本概念。WebService是一种基于开放标准(如XML、SOAP、WSDL和UDDI)的互联网协议,它能够使应用...
1. `helloWs`:这个可能是创建的第一个Web服务示例,"Ws"通常代表Web服务。它可能包含了一个简单的"Hello World"服务,展示了如何在CXF中定义和部署一个服务。 2. `helloWs1`和`helloWs2`:这些可能是对基础...
【标题】"CXF Webservice" 是一个基于Java的开源框架,主要用于构建和部署Web服务。这个项目的主要目标是提供一种简单、高效的方式来创建和消费Web服务,它支持多种Web服务标准,包括SOAP、WSDL、WS-Security等。CXF...
【标题】"第一个Web服务(WebService)例子源码"提供了初学者深入了解和实践WebService开发的绝佳素材。在本文中,我们将深入探讨这个简单的"Hello World"程序如何工作,以及它如何帮助我们理解WebService的核心概念...
### Java6开发WebService入门 #### 一、背景与意义 在早期的Web服务开发中,开发者通常会使用CXF、Axis2、XFire等工具来构建基于Java的应用程序。这些工具之所以被广泛采用,主要是因为它们能够提供广泛的兼容性和...
- 创建Web服务项目:在MyEclipse中新建一个动态Web项目,然后添加Web服务相关的库,如Axis2或CXF。 - 编写服务接口:定义服务的业务逻辑,通常是一个Java接口,包含了各种操作方法。 - 实现服务接口:创建接口的...
6. **测试与调试**:CXF提供了强大的测试工具,如WSDL第一和代码第一的测试支持,以及SOAP消息的跟踪和日志记录,便于开发者进行服务的验证和调试。 7. **插件支持**:CXF与多种构建工具(如Maven和Gradle)集成...
CXF支持SOAP和RESTful两种风格的Web Service,并提供了丰富的功能,包括WSDL第一和代码第一的开发模式、WS-Security安全支持、数据绑定、JAX-RS和JAX-WS标准实现等。 通过CXF,开发者可以方便地将Java类直接映射为...
#### 一、Java6开发WebService入门概述 在Java6中,开发者可以直接利用内置的支持来创建WebService应用,而无需借助额外的框架如CXF、Axis2或XFire等。这种方式不仅简化了项目的安装和部署流程,还减少了对第三方库...
shiro是apache的一个开源框架,是一个权限管理的框架,实现 用户认证、用户授权 传统使用URL拦截的时候,要将所有的URL都配置起来,繁琐、不易维护 而我们的Shiro实现系统的权限管理,有效提高开发效率,从而...