`

WebService CXF JAXB角色及简单使用

 
阅读更多

WebService传递XML文档,当然也可以传递JSON对象。这节我只针对传递XML,那么JAVA绑定成XML,服务端将XML解析成Java对象有什么工具可用吗,其实这样的工具多的是。这里我选择一个比较简单的JAXB工具来讲解一下。 
    JAXB(Java Architecture for XML Binding)提供了一个快速而方便的方式绑定XML Schemas和java,使java程序员能够很方便的在java应用程序中处理XML数据。JAXB提供了将XML文档解组为java内容树的方法,以及将java内容树重新编组回XML文档的方法。JAXB同样也提供了一种从java对象生成XML Schema的方式。

 

一、JAXB充当的角色

   

 

 

JAXB中常用的注解



 

 

 

 二、简单示例

    1、@XmlRootElement

        POJO:

       

package org.wy.pojo;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class User {
	private String name = "wy";
	private String sex = "man";
    public int age = 20;
    
    
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}	

 

       

JaxbTest.java

 

package org.wy.jaxb;

import java.io.StringReader;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

import org.wy.pojo.User;


public class JaxbTest {

	public static void main(String[] args) throws JAXBException {
		JAXBContext context = JAXBContext.newInstance(User.class);
		
		//JavaObject ---> XML
		Marshaller marshaller = context.createMarshaller();  
		User user = new User();
		marshaller.marshal(user, System.out);
		
		System.out.println();
		
		// XML---> JavaObject
		Unmarshaller unmarshaller = context.createUnmarshaller();
		String str = "<user><age>23</age></user>";
		user = (User)unmarshaller.unmarshal(new StringReader(str));
		System.out.println(user.age);
	}

}

 

输出结果:

 

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><user><age>20</age><name>wy</name></user>
23

 

从输出结果看到 性别没有转换到xml中,原因可以从后接口XmlAccessorType.java中找到原因

我们可以看到如下

 

@Inherited @Retention(RUNTIME) @Target({PACKAGE, TYPE})
public @interface XmlAccessorType {

    /**
     * Specifies whether fields or properties are serialized. 
     * 
     * @see XmlAccessType
     */
    XmlAccessType value() default XmlAccessType.PUBLIC_MEMBER;
}

 默认处理方式PUBLIC_MEMBER,处理public的。但是name是private的也转换成功了,原因是name被设置成了属性。

 

XmlAccessorType 有几种处理方式哪?

  查看枚举类XmlAccessType.java

  

public enum XmlAccessType {
    /**
     * Every getter/setter pair in a JAXB-bound class will be automatically
     * bound to XML, unless annotated by {@link XmlTransient}.
     *
     * Fields are bound to XML only when they are explicitly annotated
     * by some of the JAXB annotations.
     */
    PROPERTY,
    /**
     * Every non static, non transient field in a JAXB-bound class will be automatically
     * bound to XML, unless annotated by {@link XmlTransient}.
     *
     * Getter/setter pairs are bound to XML only when they are explicitly annotated
     * by some of the JAXB annotations.
     */
    FIELD,
    /**
     * Every public getter/setter pair and every public field will be
     * automatically bound to XML, unless annotated by {@link XmlTransient}.
     *
     * Fields or getter/setter pairs that are private, protected, or 
     * defaulted to package-only access are bound to XML only when they are
     * explicitly annotated by the appropriate JAXB annotations.
     */
    PUBLIC_MEMBER,
    /**
     * None of the fields or properties is bound to XML unless they
     * are specifically  annotated with some of the JAXB annotations.
     */
    NONE
}

 

 

当然JAXB也支持修改XML文档的根节点名称和命名空间,修改方式如下

@XmlRootElement(name="userwy", namespace="user-wy")

 

 

2、@XmlAccessorType

 

    POJO:

   

package org.wy.pojo;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
@XmlAccessorType(XmlAccessType.PROPERTY)
public class User {
	private String name = "wy";
	private String sex = "man";
    public int age = 20;
    
    
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}	

 

输出结果:

 

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><user><name>wy</name></user>
20

 

 

将@XmlAccessorType(XmlAccessType.FIELD)

 

输出结果:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><user><name>wy</name><sex>man</sex><age>20</age></user>
23

 

 

 3、@XmlJavaTypeAdapter

   复杂对象

   POJO:

  

package org.wy.pojo;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;

@XmlRootElement
@XmlAccessorType(XmlAccessType.PROPERTY)
public class User {
	private String name = "wy";
	private String sex = "man";
    public int age = 20;
    
    private Address address;
    
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@XmlJavaTypeAdapter(AddressAdapter.class)
	public Address getAddress() {
		return address;
	}

	public void setAddress(Address address) {
		this.address = address;
	}
	
	
}	

 

Address.java接口

package org.wy.pojo;

public interface Address {
   public String getAddress();
}

 

AddressImpl.java

  

package org.wy.pojo;

public class AddressImpl implements Address{
    private String address;

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

}

 

AddressAdapter.java

package org.wy.pojo;

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

public class AddressAdapter extends XmlAdapter<String, Address> {

	@Override
	public Address unmarshal(String v) throws Exception {
		AddressImpl address = new AddressImpl();
		address.setAddress(v);
		return address;
	}

	@Override
	public String marshal(Address v) throws Exception {
		return v.getAddress();
	}

}

 

JaxbTest.java

 

  

package org.wy.jaxb;

import java.io.StringReader;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

import org.wy.pojo.AddressImpl;
import org.wy.pojo.User;


public class JaxbTest {

	public static void main(String[] args) throws JAXBException {
		JAXBContext context = JAXBContext.newInstance(User.class);
		
		//JavaObject ---> XML
		Marshaller marshaller = context.createMarshaller();  
		User user = new User();
		AddressImpl address = new AddressImpl();
		address.setAddress("BeiJing");
		user.setAddress(address);
		marshaller.marshal(user, System.out);
		
		System.out.println();
		
		// XML---> JavaObject
		Unmarshaller unmarshaller = context.createUnmarshaller();
		String str = "<user><age>23</age></user>";
		user = (User)unmarshaller.unmarshal(new StringReader(str));
		System.out.println(user.age);
	}

}

 

输出结果:

 

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><user><address>BeiJing</address><name>wy</name></user>
20

 

 

 

  • 大小: 20.2 KB
  • 大小: 25.9 KB
  • 大小: 24.1 KB
分享到:
评论

相关推荐

    WebService CXF 对应版本及资源

    WebService CXF 用了一天时间找,官网打不开,国内要积分,下下来又永不了。最后终于搞到手,上传上来分享给大家。 jdk版本 CXF版本 java 9及以上 3.3.x java 8 3.x java 7 2.2x --- 3.2之前版本 java 6 3.1 ...

    WebService CXF 详细教程

    **WebService CXF 详解** **一、WebService简介** WebService是一种基于标准的,可以在不同操作系统、编程语言之间交换数据的Web应用程序。它通过WSDL(Web服务描述语言)定义了服务接口,利用SOAP(简单对象访问...

    WebService CXF 对象传递 附

    **WebService CXF 对象传递详解** 在Web服务领域,CXF是一个非常重要的开源框架,它允许开发者创建和消费各种Web服务。CXF支持SOAP、RESTful等多种通信模式,并且能够处理复杂的对象传递,使得Web服务的数据交换...

    WebService CXF学习文档

    做开发时,查了大量资料,发现一比较全面的资料,分享一下! WebService CXF学习——入门篇 1.CXF由来 2.HelloWorld 3.WSDL描述 WebService CXF学习——进阶篇 ...WebService CXF学习——JAXB剖析

    webservice cxf.jar 相关包

    4. 编码解码:CXF支持多种数据绑定技术,如JAXB(Java Architecture for XML Binding)和Aegis,用于XML与Java对象之间的转换。 5. 安全性:通过WSS,CXF提供了一套完整的安全解决方案,包括基本认证、数字签名、...

    webservice使用cxf的实例

    总的来说,"webservice使用cxf的实例"这个主题涵盖了从基础理论到实际操作的各个环节,包括CXF框架的使用、Web服务的创建与部署、客户端调用、数据绑定、安全性和Spring集成等多个方面。通过学习和实践,开发者可以...

    WebService CXF使用说明

    【WebService CXF 使用详解】 WebService CXF 是一个开源框架,用于构建和开发符合 WS-* 标准的 Web 服务。它提供了丰富的功能,包括支持多种协议和服务风格,以及与 Spring 框架的深度集成。CXF 允许开发者轻松地...

    WebService CXF、 Mybatis简单实例

    WebService CXF和Mybatis是两种在Java开发中广泛使用的技术,它们分别用于构建Web服务和数据库操作。让我们深入了解这两个框架以及如何将它们与Spring框架结合使用。 **WebService CXF** CXF是一个开源的Java框架...

    webservice-cxf-spring-jar.zip

    【标题】"webservice-cxf-spring-jar.zip" 是一个包含了使用Apache CXF与Spring框架集成开发Web服务的Java库集合。这个压缩包提供了一整套必要的JAR文件,以便于开发者在他们的项目中快速搭建和运行基于CXF的Web服务...

    webservice cxf 简单实例

    在本实例中,我们将探讨如何使用Eclipse IDE和Apache CXF来创建和发布一个简单的Web服务。首先,确保你已经安装了Eclipse IDE和Apache CXF的插件。这些插件通常可以在Eclipse Marketplace中找到,通过搜索"CXF"进行...

    webservice cxf jar包

    【标签】"webservice cxf jar包"强调了这是关于CXF框架的Web服务开发工具包,CXF是一个广泛使用的Java框架,它允许开发者通过SOAP和RESTful接口创建和消费Web服务。 以下是一些主要的jar文件及其在Web服务开发中的...

    webservice实例 CXF的JAXWS和JAXRS实现 及JAXB标准接口实现带jar包

    在提供的压缩包“ws_test”中,很可能包含了使用CXF实现的Web服务示例,包括JAX-WS和JAX-RS的服务端点,以及使用JAXB进行数据交换的类。这个实例可能是全部手写的,意味着它提供了一整套从创建服务到处理请求和响应...

    Webservice笔记含使用cxf和jaxws两种方式开发webservice【源代码+笔记】

    使用jaxws开发webservice。 Webservice三要素 Wsdl(webservice使用说明书)重点掌握 Soap(jaxws开发webservice的传输协议)重点掌握 UDDI(了解) Webservice的使用场景分析(掌握) 学会jaxws基本开发方法...

    webservice cxf 客户端创建

    确保包含了CXF的核心库和其他必要的依赖,如JAXB(Java Architecture for XML Binding)和WS-I Basic Profile等。 2. **配置CXF:** 创建并配置CXF的服务器端点(Endpoint)。这通常涉及创建一个实现你的服务接口的...

    WebService cxf

    【WebService CXF】是Apache软件基金会的一个开源项目,专门用于构建和开发Web服务。CXF全称是"CXF: The Next Generation JAXWS & JAXRPC Stack",它提供了全面的工具和技术来支持Web服务的创建、部署和消费。Apache...

    webservice CXF结合Spring所需jar包

    本篇文章将深入探讨如何使用CXF与Spring集成,以及在开发过程中所需的jar包。 首先,让我们理解Web服务的基本概念。Web服务是一种通过网络(通常基于HTTP协议)进行通信的应用程序接口(API)。它允许不同系统间的...

    webservice-cxf-2.3.5

    CXF 支持 JAXB(Java Architecture for XML Binding)和 Aegis 来进行对象到 XML 和 XML 到对象的转换,简化了数据交换过程。 6. **传输协议和绑定**: - HTTP/HTTPS:CXF 支持标准的 HTTP 和安全的 HTTPS 协议。...

    WebService_CXF范例.

    【WebService CXF详解与入门】 WebService是一种允许不同系统之间进行通信和交互的标准协议,它基于HTTP协议,使得应用程序可以无视具体实现细节地调用互联网上的服务。这种技术使得分布式应用程序的发展成为可能,...

    webservice cxf 开发实战

    【标题】:“Webservice CXF 开发实战” 在IT行业中,Web服务是应用程序之间进行通信的一种标准方式,而Apache CXF则是一个强大的开源框架,用于构建和开发Web服务。本篇将深入探讨CXF框架在Webservice开发中的实战...

    WebService_CXF实现及ANT

    你只需要在Java类上使用特定的JAXB注解,如`@XmlRootElement`和`@XmlElement`,CXF就能理解并处理这些对象。 3. CXF整合Spring: Spring是一个流行的Java企业级应用框架,提供依赖注入和面向切面编程等功能。CXF...

Global site tag (gtag.js) - Google Analytics