`

EclipseLink MOXy's JAXB 入门

阅读更多

EclipseLink MOXy的JAXB实现可以定制生成的XML文件。

 

一  如何使用 EclipseLink的 MOXy的JAXB特性

1) 引入 org.eclipse.persistence.moxy_2.3.1.v20110908-r10021.jar,org.eclipse.persistence.core.jar或者eclipselink.jar

2) 创建jaxb.properties

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

 将其放在模型对象的同级目录包之下。

 

二 简单案例

moxy.pojo.Animal.java

package moxy.pojo;
import javax.xml.bind.annotation.XmlTransient;
import org.eclipse.persistence.oxm.annotations.XmlPath;
@XmlTransient
public class Animal {
	@XmlPath("xml/id/text()")
	private String id;
	@XmlPath("xml/name/text()")
	private String name;
	@XmlPath("xml/desc/text()")
	private String desc;

	public Animal() {}

	public Animal(String id, String name, String desc) {
		this.id = id;
		this.name = name;
		this.desc = desc;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

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

	public String getDesc() {
		return desc;
	}

	public void setDesc(String desc) {
		this.desc = desc;
	}

	@Override
	public String toString() {
		return this.id+":"+this.name+":"+this.desc;
	}
	
	
}

 

 moxy.pojo.Dog.java

package moxy.pojo;

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

//@XmlTransient
@XmlRootElement
@XmlAccessorType
public class Dog extends Animal {
	private String color;

	public String getColor() {
		return color;
	}

	public void setColor(String color) {
		this.color = color;
	}

}

 

moxy.pojo.package.java

@XmlSchema(namespace="this is the default namespace",elementFormDefault=javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package moxy.pojo;
import javax.xml.bind.annotation.XmlSchema;

 

moxy/pojo/jaxb.properties

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

 

util.JAXBUtil.java

package util;

import java.io.ByteArrayInputStream;
import java.io.StringWriter;
import java.io.Writer;

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

public class JAXBUtil {
	  public static String marshalData(Object object) throws Exception {  
	        JAXBContext context = JAXBContext.newInstance(object.getClass());  
	  
	        Marshaller marshaller = context.createMarshaller();  
	        marshaller.setProperty(Marshaller.JAXB_ENCODING, "utf-8");// 编码格式  
	        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);// 是否格式化生成的xml串  
	        // 是否省略xml头信息(<?xml version="1.0" encoding="gb2312" standalone="yes"?>)  
	        marshaller.setProperty(Marshaller.JAXB_FRAGMENT, false);  
	        Writer writer =new StringWriter();
	        marshaller.marshal(object,writer);  
	        writer.close();
	        return writer.toString();
	    }  
	  
	    // 解组数据  
	    @SuppressWarnings("unchecked")
		public static <T> T unmarshalData(String xml,Class<T> clazz) throws Exception {  
	        JAXBContext context = JAXBContext.newInstance(clazz);  
	  
	        Unmarshaller unmarshaller = context.createUnmarshaller();  
	  
	        T object = (T) unmarshaller.unmarshal(new ByteArrayInputStream(xml.getBytes()));  
	  
	        return object;
	    }  
}

 

 测试类 moxy.test.Main.java

package moxy.test;
import moxy.pojo.Dog;
import moxy.pojo.Animal;
import util.JAXBUtil;
public class Main {

	public static void main(String[] args) throws Exception {
		testDog();
	}
	
	public static void testDog()throws Exception{
		System.out.println("marshal data");
		Dog dog = new Dog();
		dog.setId("001");
		dog.setName("dog");
		dog.setDesc("lovely dog");
		dog.setColor("yellow");
		
		String xml = JAXBUtil.marshalData(dog);
		System.out.println(xml);

		System.out.println("unmarshal data");
		Dog object = JAXBUtil.unmarshalData(xml, Dog.class);
		System.out.println(object);
	}
}

 生成xml文件如下

<dog xmlns="this is the default namespace">
   <xml>
      <id>001</id>
      <name>dog</name>
      <desc>lovely dog</desc>
   </xml>
   <color>yellow</color>
</dog>

 

Note:

1) 要使用MOXy特性必须添加jaxb.properties并发在要转化的模型对象的同级目录

2) package-info.java 可以指定同级目录的模型对象转化成xml文件的namespace信息

3) 可以通过XmlPath 指定最终生成的xml文件格式

4) 如果有继承,最终生成的xml可能会有xsi信息,可以通过添加@XmlTransient消除这部分信息

 

 

分享到:
评论

相关推荐

    JAXB的 eclipse插件

    Eclipse中的JAXB插件通常是通过Eclipse的Marketplace或者安装向导来获取的,如Eclipse XML Development Tools (XSD)或JAXB Tools等。这些插件提供了以下主要功能: 1. **XML Schema到Java类的生成**:用户可以导入...

    eclipselink的英文文档

    - **主要特性**:涵盖了EclipseLink的特性概览,如其支持的JPA 2.1组件、JAXB、MOXy、SDO组件等。 - **关键组件**:EclipseLink提供了一系列核心API和组件,以支持对象关系映射和Web服务等需求。 - **性能监控和分析...

    eclipselink+jobss EAP6.2集成module

    在IT行业中,EclipseLink和JBOSS EAP(企业应用平台)是两个重要的组件,它们在企业级Java应用程序开发中扮演着核心角色。本文将深入探讨如何在JBOSS EAP 6.2版本中集成EclipseLink模块,以及如何实现实体自动扫描...

    eclipselink.jar

    下载eclipselink.jar,这个jar包版本2.5.2,下载eclipselink.jar

    eclipselink doc文档

    eclipselink 1.0 doc 文档

    eclipselink的crud

    EclipseLink是一个强大的Java持久化框架,它是Java Persistence API (JPA) 的一个实现,用于管理应用程序中的对象-关系映射(ORM)。本教程将深入探讨如何使用EclipseLink进行CRUD(创建、读取、更新和删除)操作,...

    EclipseLink JPA User Guide

    详细讲述了EclipseLink的使用方法。EclipseLink的前身是Oracle的TopLink.

    eclipselink

    标题 "EclipseLink" 指的是一个开源的Java持久化框架,它是Java Persistence API (JPA) 的一个实现。EclipseLink 是由 Eclipse 基金会维护,旨在提供全面的数据访问和对象关系映射(ORM)解决方案,用于管理应用程序...

    eclipselink-2.5.2.v20140319-9ad6abd.zip

    EclipseLink是一个强大的Java持久化框架,它是Java Persistence API (JPA)的官方推荐实现之一。JPA是一种标准的API,用于在Java应用程序中管理和访问关系数据库,它为开发人员提供了一种对象/关系映射(ORM)工具,...

    Spring +JPA+EclipseLink Maven 配置

    EclipseLink是JPA的一种实现,它提供了高级特性和性能优化。Maven则是一个项目管理工具,能够管理项目的构建、报告和依赖关系。本篇文章将深入探讨如何配置Spring、JPA(EclipseLink实现)和Maven来创建一个高效且...

    EclipseLink 测试出错程序

    EclipseLink测试出错程序是针对Glassfish V3.1服务器上运行的EclipseLink持久化框架的一个测试示例,该程序旨在检验EclipseLink在处理悲观锁(Pessimistic Lock)时的功能和性能。然而,在实际运行过程中,用户遇到...

    XML JAXB入门示例

    这可以通过使用`xjc`命令行工具完成,或者使用IDE(如Eclipse或IntelliJ IDEA)的插件。这个过程会根据XML Schema(XSD)文件生成对应的Java类。 然后,你可以创建Java对象并进行序列化,即将Java对象转换为XML文档...

    JPA-eclipselink-project:使用 EclipseLink 实现的 JPA 项目示例

    JPA-eclipselink-项目使用 EclipseLink 实现的 JPA 项目示例JPA:java persistence api 是一个 O/R 映射持久化的规范。 API 描述了如何将 Java 对象映射到关系数据库。 此映射确保将对象转换为数据库,反之亦然,...

    eclipse-jaxb:Eclipse Java11 JAXB OSGI

    eclipse-jaxb 2021年3月20日,星期六 已经有很多关于如何使JAXB与Java11和OSGI平台(如Eclipse)一起使用的文章。对于Java8,JAXB(Java XML绑定)API和实现是Java平台和“标准”的一部分。使用Java9时,不建议将其...

    ant-eclipselink-schemagen-1.0.6.jar.zip

    《Ant-EclipseLink-Schemagen-1.0.6.jar.zip:Java开发中的数据库建模工具》 在Java开发过程中,数据库的建模是至关重要的一步,它涉及到数据的存储结构设计,对应用的性能和扩展性有直接影响。Ant-EclipseLink-...

    EclipseLink通过JPA方式映射Sdo_geometry字段

    在Java Persistence API (JPA) 中,EclipseLink作为一个强大的对象关系映射(ORM)框架,允许开发者将数据库中的数据模型映射到Java对象。在处理特定数据库特性时,如Oracle的SDO_GEOMETRY(Spatial Data Object ...

    eclipselink-1.0.jar

    jar包,官方版本,自测可用

    eclipselink_2.1.1.jar

    jar包,官方版本,自测可用

    Eclipse+Web开发从入门到精通(实例版)

    Eclipse+Web开发从入门到精通(实例版) 供需要者用于学习参考

Global site tag (gtag.js) - Google Analytics