`

webservice学习 3.JAXB的简单使用

 
阅读更多
http://zh.wikipedia.org/wiki/JAXB 写道
JAXB(Java Architecture for XML Binding简称JAXB)允许Java开发人员将Java类映射为XML表示方式。JAXB提供两种主要特性:将一个Java对象序列化为XML,以及反向操作,将XML解析成Java对象。换句话说,JAXB允许以XML格式存储和读取数据,而不需要程序的类结构实现特定的读取XML和保存XML的代码。

当规格复杂且经常变化时JAXB特别有用。在这种情况下,经常修改XML模式定义以与Java定义保持一致很花费时间并且容易产生错误。

JAXB是Java EE平台的API之一,同时是Java Web服务开发包 (JWSDP)的一部分。 JAXB也是Web服务互操作性技术(WSIT)的基础之一. JAXB是J2SE1.6的一部分。

JAXB 1.0是在Java社群过程中作为JSR 31开发出来的。JAXB 2.0是作为JSR 222开发的。这两个版本的参考实现可以从java.net下载。

 在CXF(2.7.0)里面的定义和实现包是以下两个:



 

在使用上个人感觉和xstream等工具是很类似的 毕竟实现对于使用者来说是透明的.

 

以下是一个简单的例子代码 因为是第一次写难免写错不要介意:

package org.cc.jaxb;

import java.io.ByteArrayOutputStream;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

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

public class Client {
  public static void main(String[] args) throws JAXBException {
	ObjectFactory factory=new ObjectFactory();
	Person person=factory.createPerson();
	Address address=new Address();
	address.setCountry("中国");
	address.setStreet("西湖区");
	address.setHouse("xxx街道xx号");
	person.setAge(22);
	person.setBirthDate(new Date());
	person.setName("cc");
	person.setSex(true);
	person.setTempId(1);
	person.setAddress(address);
	
	List<String> favors=new ArrayList<String>();
	favors.add("吃饭");
	favors.add("睡觉");
	person.setFavors(favors);
	JAXBContext jaxbContext=JAXBContext.newInstance("org.cc.jaxb");
	Marshaller marshaller=jaxbContext.createMarshaller();
	
	ByteArrayOutputStream baos = new ByteArrayOutputStream();
	marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
	marshaller.setProperty(Marshaller.JAXB_ENCODING, "gbk");

	marshaller.marshal(person, baos);
	    
	StringBuffer sb = new StringBuffer(new String(baos.toByteArray()));
	
	System.out.println(sb.toString());
	
	
	Unmarshaller unmarshaller=jaxbContext.createUnmarshaller();
	StringReader reader = new StringReader(sb.toString());
	Person per = (Person)unmarshaller.unmarshal(reader);
	System.out.println(per.getFavors());
}
}

 

package org.cc.jaxb;

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

@XmlRootElement
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Address {
   private String country;
	
	private String street;
	
	private String house;

	public String getCountry() {
		return country;
	}

	public void setCountry(String country) {
		this.country = country;
	}

	public String getStreet() {
		return street;
	}

	public void setStreet(String street) {
		this.street = street;
	}

	public String getHouse() {
		return house;
	}

	public void setHouse(String house) {
		this.house = house;
	}
}

 

package org.cc.jaxb;

import java.util.Date;
import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

@XmlRootElement(name="Person") // 根名叫做Person
@XmlAccessorType(XmlAccessType.FIELD) //非static类型和标明transient的会被处理
public class Person {
    @XmlAttribute //作为属性
	public String name;
    @XmlAttribute //作为属性
    private int age;
    @XmlAttribute //作为属性
	private boolean sex;
    @XmlElement  //作为一个元素
	private Date birthDate;
	@XmlTransient // 标明不处理这个
	private long tempId;
	
	private Address address; //另一个类型的对象
	
	@XmlElementWrapper(name="list") //favors外包一层list
	private List<String> favors;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public boolean isSex() {
		return sex;
	}
	public void setSex(boolean sex) {
		this.sex = sex;
	}
	public Date getBirthDate() {
		return birthDate;
	}
	public void setBirthDate(Date birthDate) {
		this.birthDate = birthDate;
	}
	public long getTempId() {
		return tempId;
	}
	public void setTempId(long tempId) {
		this.tempId = tempId;
	}
	public Address getAddress() {
		return address;
	}
	public void setAddress(Address address) {
		this.address = address;
	}
	public List<String> getFavors() {
		return favors;
	}
	public void setFavors(List<String> favors) {
		this.favors = favors;
	}
}

 

package org.cc.jaxb;

import javax.xml.bind.JAXBElement;
import javax.xml.bind.annotation.XmlElementDecl;
import javax.xml.bind.annotation.XmlRegistry;
import javax.xml.namespace.QName;

@XmlRegistry
public class ObjectFactory {
	private final static QName _Person_QName =new QName("http://fair-jm.iteye.com","Person");
	private final static QName _Adress_QName =new QName("http://fair-jm.iteye.com","Address");
	
	public Person createPerson(){
		return new Person();
	}
	
	public Address createAddress(){
		return new Address();
	}
	
	@XmlElementDecl(namespace="http://fair-jm.iteye.com",name="Person")
	public JAXBElement<Person> createPerson(Person value){
		return new JAXBElement<Person>(_Person_QName, Person.class, value);
	}
	
	@XmlElementDecl(namespace="http://fair-jm.iteye.com",name="Address")   
	public JAXBElement<Address> createAddress(Address value){
		return new JAXBElement<Address>(_Adress_QName,Address.class,value);
	}
	
}

 输出结果:

<?xml version="1.0" encoding="gbk" standalone="yes"?>
<Person name="cc" age="22" sex="true" xmlns:ns2="http://fair-jm.iteye.com">
    <birthDate>2013-05-12T14:21:48.486+08:00</birthDate>
    <address>
        <country>中国</country>
        <house>xxx街道xx号</house>
        <street>西湖区</street>
    </address>
    <list>
        <favors>吃饭</favors>
        <favors>睡觉</favors>
    </list>
</Person>

[吃饭, 睡觉]

 

 

 

  • 大小: 3.4 KB
分享到:
评论

相关推荐

    webservice之使用jaxb把xml转换Object或把对象转换成xml文件

    在Java世界中,使用JAXB(Java Architecture for XML Binding)库可以方便地实现XML数据与Java对象之间的转换,从而在WebService中轻松处理数据交换。本篇文章将深入探讨如何使用JAXB进行XML到Object以及Object到XML...

    java_调用Webservice接口借鉴.pdf

    接着,使用`apt`命令编译Java源文件,这会产生JAXB相关的文件。然后,通过`wsimport`工具根据WSDL(Web Service Description Language)生成客户端的代理类。最后,编写客户端程序,通过代理类调用服务端的方法。...

    使用JAX-WS开发WebService入门教程.pdf

    通过以上步骤,我们可以成功地使用JAX-WS开发并部署一个简单的WebService,以及创建客户端来访问该服务。这种技术在企业级应用开发中非常常见,尤其是在需要实现不同系统之间的远程通信和数据交换的场景下。

    Jaxb webservice java调用

    通过这样的方式,JAXB使得我们在Java中调用Web服务变得简单且直观,无需手动处理XML解析和序列化的复杂过程。在实际应用中,JAXB结合其他Java Web服务框架,如JAX-WS,可以构建强大的客户端和服务端应用。

    xfire下webservice服务实例.docx

    XFire不仅支持简单的API,使POJO(Plain Old Java Object)和schema开发变得更加便捷,还兼容多种Web服务标准,如JBI(Java Business Integration)、JAXB(Java Architecture for XML Binding)和XMLBeans。...

    WebService完整教程.pdf

    JAX-WS(Java API for XML Web Services)是Java中用于开发WebService的标准接口,其底层支持为JAXB(Java Architecture for XML Binding)。JAX-WS是JAX-RPC(Java API for XML Remote Procedure Call)的进化版本...

    jdk21集成cxf示例程序

    本示例程序将向你展示如何在JDK21环境下集成CXF,以创建和运行一个简单的Web服务。 首先,我们需要了解JDK21。这是Java Development Kit的第21个版本,可能包含了一些新的特性和改进。然而,需要注意的是,截至本文...

    jaxws-rt 2.1.4 jar java webservice依赖包

    maven 下载jaxws-rt 2.1.4 jar 失败了 其中包含包 ...com.sun.xml.bind jaxb-impl 2.1.7 ...javax.xml.ws jaxws-api 2.1 org.jvnet.staxex stax-ex 1.2 ...做java webservice时缺少这些包 好不容易下载下来 备份csdn

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

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

    WebService源码和笔记.zip

    4. **WebService开发工具**:如使用Apache CXF、Gson、JAXB等工具进行WebService的开发和调试。 5. **安全性考虑**:介绍如何在WebService中实现安全机制,如HTTPS加密、WS-Security(SOAP消息的安全标准)等。 6....

    webservice.zip

    开发者可以通过定义Java接口或类,然后使用JAX-WS的工具(如wsimport或JAXB)生成服务端代码,将业务逻辑暴露为Web服务。 3. **客户端**:客户端是调用服务端Web服务的程序,可以本地调用或远程调用。本地调用通常...

    JAXB2 Webservice

    NULL 博文链接:https://endeavor416.iteye.com/blog/270507

    java用XFire开发调用webService例子知识.pdf

    1. **POJO绑定**:支持将Web服务直接绑定到POJO,同时也支持XMLBeans、JAXB1.1、JAXB2.0和Castor等数据绑定技术。 2. **多协议支持**:除了基本的HTTP协议,XFire还支持JMS和XMPP等通信协议,提供了多种访问Web服务...

    jaxb-api-2.1.jar

    在使用webservice,esb等需要jaxb的项目里经常会出现 JAXB 2.0 API is being loaded from the bootstrap classloader错误.执行System.out.println(System.getProperty("java.endorsed.dirs"));输出jaxb-api-2.1.jar...

    WebService_CXF学习.doc

    WebService的核心优势在于它的开放性和互操作性,这意味着无论客户端和服务器端使用何种技术栈,都可以通过标准的协议进行无缝通信。 - **特点**: - **基于HTTP协议**:WebService通常基于HTTP协议进行通信,这是...

    webService JWS实现方式

    3. **WSDL**: Web服务描述语言(WSDL)是定义Web服务接口的标准,它描述了服务如何被调用、使用什么协议以及在哪里找到服务。在JWS中,通过JAX-WS工具可以自动生成WSDL文件,这使得其他系统能更容易地发现和理解Web...

    WebService CXF学习文档

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

    webService服务端.rar

    首先,定义一个Java接口,然后使用注解(如@WebService)来标识服务类,并通过工具如wsimport或JAXB来生成客户端所需的Stubs和Skeletons。 6. 运行和部署: 一旦服务端代码编写完成,需要将其部署到支持WebService...

    webservice最小jar包

    Web服务(Web Service)是一种基于互联网的、使用标准XML(Extensible Markup Language)进行通信的软件系统,允许不同平台的应用程序之间交换数据。在Java世界中,开发Web服务的一个常见方式是使用Java API for XML...

Global site tag (gtag.js) - Google Analytics