`
rock
  • 浏览: 58181 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

CXF2.1.3使用总结

阅读更多

 

关于 Apache 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 官网上下载最新 2.1.3 版本,所有的 jar 都在其 lib 目录下,

CXF 核心 jar 包括一下几个 :

- cxf.jar

- commons-logging.jar

- geronimo-activation.jar (Or the Sun equivalent) [6]

- geronimo-annotation.jar (Or the Sun equivalent) [6]

- geronimo-javamail.jar (Or the Sun equivalent) [6]

- geronimo-stax-api.jar (Or the Sun equivalent) [6]

- neethi.jar

- jaxb-api.jar

- jaxb-impl.jar

- XmlSchema.jar

- wstx-asl.jar [6]

- wsdl4j.jar

- xml-resolver.jar

JAX-WS 支持 jar 包含以下几个 :

- geronimo-ws-metadata.jar [6]

- geronimo-jaxws_2.1_spec-1.0.jar (Or the Sun equivalent) [6]

- saaj-api.jar [6]

- saaj-impl.jar [6]

- asm.jar ( 这是一个可选包,主要功能是封装类型和对 jaxb 注解的支持,最好不用,因为他的版本可能跟 Spring 中提供的包冲突 )

以上 jar cxf 发布 web 服务所必修的,其他的包依功能而定,用不到的包尽量不要用,否则在跟 web 项目做集成是会造成不必要的冲突。

发布一个简单的 web 服务的步骤

1 )建立一个 HelloWord 接口,其中接口类型和 map 需要建立 Adapter ,这样 jaxb 才可以支持,对于 List string 及基本类型不用做适配处理。

package demo.hw.server;

import java.util.Map;

import javax.jws.WebService;

import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;

@WebService

public interface HelloWorld {

String sayHi(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();

}

2 HelloWorld 接口实现类

package demo.hw.server;

import java.util.LinkedHashMap;

import java.util.Map;

import javax.jws.WebService;

@WebService(endpointInterface = "demo.hw.server.HelloWorld",

serviceName = "HelloWorld")

public class HelloWorldImpl implements HelloWorld {

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;

}

}

3 User 对象的定义

package demo.hw.server;

import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;

@XmlJavaTypeAdapter(UserAdapter.class) // 表示与此接口对应的适配对 UserAdapter

public interface User {

String getName();

}

package demo.hw.server;

import javax.xml.bind.annotation.XmlType;

@XmlType(name = "User") // 表示实用的类型名为 User

public class UserImpl implements User {

String name;

public UserImpl() {

}

public UserImpl(String s) {

name = s;

}

public String getName() {

return name;

}

public void setName(String s) {

name = s;

}

}

4 User 类型的适配器类 ,继承 XmlAdapter ,重载 marshal unmarshal

package demo.hw.server;

import javax.xml.bind.annotation.adapters.XmlAdapter;

public class UserAdapter extends XmlAdapter<UserImpl, User> {

public UserImpl marshal(User v) throws Exception {

if (v instanceof UserImpl) {

return (UserImpl)v;

}

return new UserImpl(v.getName());

}

public User unmarshal(UserImpl v) throws Exception {

return v;

}

}

5 )对 Map 的适配器

package demo.hw.server;

import javax.xml.bind.annotation.XmlAccessType;

import javax.xml.bind.annotation.XmlAccessorType;

import javax.xml.bind.annotation.XmlElement;

import javax.xml.bind.annotation.XmlType;

@XmlType(name = "IntegerUserMap")

@XmlAccessorType(XmlAccessType.FIELD)

public class IntegerUserMap {

@XmlElement(nillable = false, name = "entry")

List<IntegerUserEntry> entries = new ArrayList<IntegerUserEntry>();

public List<IntegerUserEntry> getEntries() {

return entries;

}

@XmlAccessorType(XmlAccessType.FIELD)

@XmlType(name = "IdentifiedUser")

static class IntegerUserEntry {

//Map keys cannot be null

@XmlElement(required = true, nillable = false)

Integer id;

User user;

public void setId(Integer k) {

id = k;

}

public Integer getId() {

return id;

}

public void setUser(User u) {

user = u;

}

public User getUser() {

return user;

}

}

}

package demo.hw.server;

import javax.xml.bind.annotation.adapters.XmlAdapter;

public class IntegerUserMapAdapter extends XmlAdapter<IntegerUserMap, Map<Integer, User>> {

public IntegerUserMap marshal(Map<Integer, User> v) throws Exception {

IntegerUserMap map = new IntegerUserMap();

for (Map.Entry<Integer, User> e : v.entrySet()) {

IntegerUserMap.IntegerUserEntry iue = new IntegerUserMap.IntegerUserEntry();

iue.setUser(e.getValue());

iue.setId(e.getKey());

map.getEntries().add(iue);

}

return map;

}

public Map<Integer, User> unmarshal(IntegerUserMap v) throws Exception {

Map<Integer, User> map = new LinkedHashMap<Integer, User>();

for (IntegerUserMap.IntegerUserEntry e : v.getEntries()) {

map.put(e.getId(), e.getUser());

}

return map;

}

}

6 )用 spring 配置 cxf context 文件

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:jaxws="http://cxf.apache.org/jaxws"

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-2.0.xsd

http://cxf.apache.org/jaxws

http://cxf.apache.org/schemas/jaxws.xsd">

<!-- Import Apache CXF Bean Definition -->

<import resource="classpath:META-INF/cxf/cxf.xml"/>

<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>

<import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>

<jaxws:server id="jaxwsService" serviceClass="demo.hw.server.HelloWorld"

address="/hello_world">

<jaxws:serviceBean>

<bean class="demo.hw.server.HelloWorldImpl" />

</jaxws:serviceBean>

</jaxws:server>

</beans >

7 )配置 web.xml

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>/WEB-INF/classes/cxfConfig.xml</param-value>

</context-param>

<!-- Spring ContextLoaderListener -->

<listener>

<listener-class>

org.springframework.web.context.ContextLoaderListener

</listener-class>

</listener>

<!-- Apache CXFServlet -->

<servlet>

<servlet-name>CXFServlet</servlet-name>

<display-name>CXF Servlet</display-name>

<servlet-class>

org.apache.cxf.transport.servlet.CXFServlet

</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

<!-- CXFServlet Mapping -->

<servlet-mapping>

<servlet-name>CXFServlet</servlet-name>

<url-pattern>/*</url-pattern>

</servlet-mapping>

加载配置文件,配置 cxf servlet ,部署工程,启动 tomcat

输入 http://localhost:8080/工程名 一切 ok ,就是这么简单

分享到:
评论

相关推荐

    CXF2.1.3+spring3.0+struts2.3.4

    【标题】"CXF2.1.3+spring3.0+struts2.3.4" 描述了集成这三大框架实现Web服务的场景。CXF是一个开源的服务框架,它允许开发人员创建和消费各种Web服务。Spring是Java企业级应用的核心框架,提供了依赖注入和面向切面...

    cxf2.1.3开发包.part1

    cxf2.1.3开发所有的到的 所有包 很全的啊

    cxf 2.1.3 client

    在这个例子中,"client"指的是使用CXF 2.1.3实现的客户端应用程序,它连接到"server"——运行XFire 1.2.6的服务端,进行交互。 在压缩包文件名"**cxf213**"中,我们可以推测这可能包含了CXF 2.1.3的相关库和配置...

    Cxf2.1.3实例(全)

    通过这些实例,开发者可以逐步学习并熟练掌握CXF2.1.3框架的使用,包括服务的创建、部署、测试,以及客户端的生成和调用。这不仅有助于理解Web服务的基本概念,还能深入理解CXF框架的高级特性和功能。

    cxf2.1.3开发包.part2

    cxf2.1.3开发所有的到的 所有包 很全的啊

    apache-cxf-2.1.3.zip

    这个"apache-cxf-2.1.3.zip"压缩包包含了该框架的版本2.1.3的所有组件和资源,使得开发者可以便捷地在他们的项目中集成和使用CXF。 CXF的核心功能包括: 1. **SOAP与RESTful服务支持**:CXF允许开发人员创建和消费...

    Cxf2.1.3API

    在“docs”这个压缩包子文件中,可能包含了CXF2.1.3的API文档,这些文档通常会详细解释各个类、接口、方法以及它们的使用示例,是学习和使用CXF的重要参考资料。开发者可以通过阅读这些文档,深入理解CXF的工作原理...

    CXF2.1.3工具

    7. **使用CXF工具**: 在解压并配置好环境变量后,开发者可以直接在命令行中运行这些工具,比如`wsdl2java -d &lt;output_directory&gt; &lt;wsdl_file&gt;`用于生成Java代码,`java2wsdl -l ...

    cxf-2.1.3-lib.rar

    "cxf-2.1.3-lib.rar"这个压缩包很显然是包含了Apache CXF 2.1.3版本的相关库文件,这对于使用CXF框架进行Web服务开发的用户来说是至关重要的。 CXF这个名字是"CXF = XFire + Celtix"的缩写,它融合了两个知名的Java...

    apache-cxf-2.1.3

    使用Apache CXF 2.1.3版本需要注意的是,由于这是一个较旧的版本,可能不包含某些新特性或对最新标准的支持。例如,对于更高级的安全标准和协议支持,建议升级到最新版本。同时,随着时间的推移,社区对旧版本的维护...

    apache cxf 用户手册

    apache cxf 2.1.3 的用户手册

    apache-cxf-2.1.1.zip

    - **src目录**:可能包含源代码示例,帮助开发者理解如何使用CXF开发Web服务。 - **docs目录**:包含API文档和其他用户指南,有助于学习和调试。 - **bin目录**:可能有CXF的脚本文件,用于启动和管理CXF服务。 - **...

    CXF webservice 示例

    这个示例基于CXF 2.1.3版本,它是一个较早但仍然广泛使用的版本,支持SOAP和RESTful服务。CXF允许开发者通过Java编程模型创建Web服务,同时也提供了客户端API来调用这些服务。 1. **CXF简介** - CXF 是"Client ...

    cxf webservice 文件分块上传

    在IT领域,CXF是一个广泛使用的开源框架,用于构建和部署Web服务。它支持多种Web服务规范,包括SOAP、RESTful等。"文件分块上传"是一种处理大文件的技术,通常用于优化网络传输效率,避免一次性传输大量数据导致的...

    CXF webservice Demo

    【CXF Webservice Demo】是基于Apache CXF框架的一个示例项目,用于演示如何使用CXF来创建和消费Web服务。Apache CXF是一个开源的Java框架,它允许开发者构建和集成Web服务,支持多种Web服务标准,如SOAP、RESTful ...

    cxf环境变量配置以及命令

    总结来说,Apache CXF 是一个强大且灵活的工具,用于开发和部署符合标准的 Web 服务。其全面的功能和对多种协议的支持,使其成为 Java 开发者的首选框架之一。通过正确的环境配置和使用 CXF 提供的工具,开发者可以...

    cxf-2.1.4.jar

    commons-logging-1.1.jar geronimo-activation_1.1_spec-1.0-M1.jar (or Sun's Activation jar) geronimo-annotation_1.0_spec-1.1.jar (JSR 250) geronimo-javamail_1.4_spec-1.0-M1.jar (or Sun's JavaMail jar) ...

    Jax-ws所需要的JAR包

    它简化了创建和使用Web服务的过程,使得开发者能够通过SOAP消息与远程服务进行交互。JAX-WS允许开发者将服务接口直接映射到SOAP消息,提供了强类型化的客户端调用API。 在Java应用服务器,如Tomcat中使用JAX-WS时,...

    Java Web Service总结

    WebService 的开源实现有 Axis、Apache CXF 等。Axis 是一种流行的开源 Web Service 实现,它提供了完整的 Web Service 开发和部署解决方案。 二、AXIS AXIS 是一种流行的开源 Web Service 实现。AXIS 提供了完整...

Global site tag (gtag.js) - Google Analytics