`

CXF+JAXB发布获取web

阅读更多

CXF有多种数据绑定方式,如:Aegis  Databinding,JAXB,MTOM Attachments . 其中JAXB(JavaTM Architecture for XML Binding)是其默认的数据绑定方式。JAXB是一套自动映射XMLJava实例的开发接口和工具。

如果web Service发布的接口为:

  String sayUserHello(User user); 

List<User> findUsers();

且传入参数类型是类,而且返回的为List ,String 等,这样,发布web service与普通java的没有区别,是因为JAXB都能支持。

JAXB不能将一些 Java 类型自然映射到 XML 表示形式,例如,HashMap 或其他非 JavaBean 类。如参数类型为接口,以及Map  ,这需要特殊的XmlAdapter类进行处理. 例如:

1、    编写要发布的web service 接口和实现

import javax.jws.WebService;

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

 

@WebService

public interface HelloWorld {

    String sayHello(String text);

    String sayUserHello(User user);

    List<User> findUsers();

    @XmlJavaTypeAdapter(UserMapAdapter.class)

    Map<Integer, User> getMapUsers();

}

import java.util.ArrayList;

import java.util.LinkedHashMap;

import java.util.List;

import java.util.Map;

import javax.jws.WebService;

@WebService(endpointInterface = "test.HelloWorld",

            serviceName = "HelloWorld")

public class HelloWorldImpl implements HelloWorld {

     public String sayHello(String text) {

          return "Hello " + text;

      }

      public String sayUserHello(User user) {

         return "Hello " + (user!=null?user.getUsername():"guest");

     }

      public List<User> findUsers() {

      ArrayList<User> list = new ArrayList<User>();

      list.add(new UserImpl("aa","bb"));

      list.add(new UserImpl("aa1","bb"));

      list.add(new UserImpl("aa2","bb"));

      list.add(new UserImpl("aa3","bb"));

      return list;

     }

    public  Map<Integer,User>  getMapUsers() {

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

       users.put(1, new UserImpl("aa","bb"));

       users.put(2, new UserImpl("sss","sss"));

       return users;

  }

}

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

 

@XmlJavaTypeAdapter(UserAdapter.class)

public interface User {

    String getPassword();

    String getUsername();

    void setUsername(String username);

    void setPassword(String password);

    void setUserId(Integer userId);

    Integer getUserId();

}

@XmlType(name = "User")

public class UserImpl implements User {

    private Integer userId;

    private String username;

    private String password;

       public Integer getUserId() {

       return userId;

    }

    public void setUserId(Integer userId) {

       this.userId = userId;

    }

    public String getPassword() {

       return password;

    }

    public void setPassword(String password) {

       this.password = password;

    }

    public String getUsername() {

       return username;

    }

    public void setUsername(String username) {

       this.username = username;

    }

    public UserImpl(String username, String password) {

       super();

       this.username = username;

       this.password = password;

    }

    public UserImpl() {

    }

    public UserImpl(String username) {

       this.username = username;

    }

    public UserImpl(Integer userId, String username, String password) {

       this.userId = userId;

       this.username = username;

       this.password = password;

    }

  

}

2、    编写适配器

因为JAXB不支持将HashMap 或其他非 JavaBean 自然映射到xml表示形式,这样就要定义一个适配器使用java类型适应自定义编组.一般有两步:

1>. 编写一个类继承XmlAdapter,以实现此抽象类的适配器。

2>. 安装使用注释 XmlJavaTypeAdapter 的适配器。

 

XmlAdapter的说明:

XmlAdapter<ValueType,BoundType>

BoundType - JAXB 不知道如何处理的一些类型。编写一个适配器,以便允许通过 ValueType 将此类型用作内存表示形式。

ValueType - JAXB 无需其他操作便知道如何处理的类型。

其两个抽象方法:

marshal(...):编组过程中,JAXB 绑定框架调用 XmlAdapter.marshal(..) bound 类型修改为 value 类型,然后将 value 类型编组为 XML 表示形式。

unmarshal(...):解组过程中,JAXB 绑定框架首先将 XML 表示形式解组为 value 类型,然后调用 XmlAdapter.unmarshal(..) value 类型修改为 bound 类型。

 

常用的几个注释说明:

a.@XmlJavaTypeAdapter 注释可以与下列编程元素一起使用: JavaBean 属性 、字段、参数 、包 Cou

分享到:
评论

相关推荐

    apache-cxf-3.1.18.zip

    3. **示例**:CXF通常会提供一些示例应用,演示如何发布和消费Web Services,这有助于初学者快速上手。 4. **构建脚本**:如Maven的pom.xml文件,用于构建、测试和打包CXF项目。 5. **源代码**:如果你解压了此...

    cxf 完整的服务端客户端

    通过这个“cxf 完整的服务端客户端”示例,你可以深入理解 CXF 如何处理服务发布、服务消费、数据绑定、异常处理等核心功能,并能更好地掌握 Web 服务的开发流程。同时,对于理解和使用其他基于 Java 的 Web 服务...

    cxf3.1.4发布restful风格的web service

    CXF还提供了丰富的数据绑定机制,如JAXB(Java Architecture for XML Binding)用于XML数据的自动序列化和反序列化,以及Jackson或Gson库支持JSON数据处理。这使得开发者无需手动处理XML或JSON字符串,简化了开发...

    CXF3.0+Spring3.2 RESTFul服务(下)

    **CXF**(Common eXtensible Framework)是一个用于构建和开发Web服务的开放源码框架,它支持SOAP、WS-*规范以及RESTful风格的服务。CXF允许开发者选择XML或者非XML(如JSON)作为消息格式,使得服务更易被浏览器和...

    CXF webservers资源

    - 对于具体的新特性,需要查看官方发布说明或文档来获取详细信息。 以上就是关于“CXF Webservers资源”的主要知识点,涵盖了CXF的使用、配置、部署、安全性和扩展性等多个方面。通过深入学习和实践,开发者能够...

    在WebSphere发布CXF注意事项

    在WebSphere上发布CXF(Camel XFire)服务是一个涉及多个步骤的过程,需要注意一系列细节以确保服务能够正常运行。CXF是一个流行的开源框架,用于构建和开发基于Java的Web服务。以下是一些关键的注意事项: 1. **...

    apache-cxf-2.4.6.zip

    这个"apache-cxf-2.4.6.zip"压缩包包含了CXF框架的2.4.6版本,这是一个相对早期的版本,发布于2012年。在深入探讨CXF之前,我们先来了解一下什么是Apache CXF。 Apache CXF是一个融合了多个前任项目的综合框架,...

    jdk21集成cxf示例程序

    2. **获取CXF库**:你可以从Apache CXF的官方网站下载CXF的最新版本。解压缩后,将CXF的jar文件添加到项目的类路径中,或者如果你使用的是Maven或Gradle,可以在pom.xml或build.gradle文件中添加相应的依赖。 3. **...

    apache-cxf-3.1.6.zip官网完整包

    这个"apache-cxf-3.1.6.zip"是Apache CXF的3.1.6版本的官方完整包,发布于2016年4月14日,包含了与Spring框架的集成支持。 **Apache CXF核心特性:** 1. **Web服务实现**:CXF提供了基于Java API for Web Services...

    CXF2.3依赖包

    10. **geronimo-ws-metadata_2.0_spec-1.1.3.jar**:Apache Geronimo对Web服务元数据2.0规范的实现,用于获取Web服务的元数据,如WSDL、WS-Policy等。 这些依赖包的集合为开发基于CXF的Web服务提供了完整的环境,...

    Spring+cxf请求webService

    - 首先,获取Web服务的WSDL(Web Service Definition Language)文件,它是描述Web服务接口的标准XML文档。 - 使用CXF的Wsdl2Java工具,根据WSDL生成Java客户端代理类。这一步可以生成服务接口和服务实现类,使得...

    apache-cxf-3.1.9

    3. **数据绑定**:CXF 提供JAXB(Java Architecture for XML Binding)和JAX-BT(Java API for XML-based Web Services with Attachments)数据绑定,使得Java对象可以直接与XML消息交互。 4. **协议栈**:CXF支持...

    webservice,cxf

    在"CXF整合"部分,我们将学习如何利用CXF来替代JDK原生的Web服务实现,以获取更高级的功能和更好的性能。 当CXF与Spring框架整合时,可以实现更高效的依赖注入和管理,简化Web服务的配置和部署。"CXF+Spring整合...

    cxf所需jar包

    6. **cxf-rt-rs-extension-providers**: 对于RESTful服务,CXF提供了JAXB和JSON支持,这个模块包含了相应的提供者。 7. **cxf-rt-security**: 提供安全相关的功能,如WS-Security和OAuth。 8. **cxf-rt-transports...

    CXF2.7.4完整架包

    然而,具体的变更日志需要查看官方发布的文档才能获取详细信息。提供的压缩包文件" f092113464d64e588ac54528db8d9059"包含了所有必要的CXF库文件,用于搭建开发环境或集成到现有项目中。使用这个包,开发者可以立即...

    使用Simple Frontend+Aegis方式发布并获取webservice

    在本文中,我们将探讨如何使用Apache CXF框架的Simple Frontend和Aegis绑定来发布和获取Web服务。这种方法提供了一种简洁的方式,无需过多的注解或特定于技术的接口,使得我们可以轻松地将任何类转换为Web服务。 1....

    cxf一个入门实例,用最新的cxf2.2.4开发的

    2. **下载CXF库**:从CXF官方网站获取2.2.4版本的库文件,包括所需的JARs。 3. **创建项目**:在Eclipse中创建一个新的Java项目,然后将下载的CXF JARs添加到项目的`lib`目录。 4. **编写服务接口和服务实现**:根据...

    apache-cxf-2.1.1.zip

    4. **数据绑定**:CXF支持多种数据绑定技术,如JAXB(Java Architecture for XML Binding)用于XML到Java对象的自动转换,以及Aegis绑定,用于非JAXB类的序列化。 5. **安全特性**:CXF提供了多种安全机制,包括WS-...

    apache-cxf-2.4.3

    这个"apache-cxf-2.4.3"版本是该框架的一个特定发行版,发布于2011年,为开发者提供了构建RESTful API和SOAP服务的能力。 CXF(前身为XFire和Celtix)的核心功能包括: 1. **Web服务实现**:CXF允许开发人员使用...

    CXF客户端启动过程

    - CXF使用JAXB(Java Architecture for XML Binding)将XML配置转换为Java对象,以便进一步处理。 2. **服务代理创建**: - 根据配置信息,CXF会生成一个服务代理类,这个代理类实现了服务接口。这个代理类是...

Global site tag (gtag.js) - Google Analytics