`
zhelong111
  • 浏览: 190085 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

@XmlAccessorType详解

 
阅读更多
JAXB框架使得通过JAVA访问xml变得非常简单

例子:

@XmlRootElement

@XmlAccessorType(XmlAccessType.FIELD)

public class Boy{

  String name=”CY”;
}



public class JAXBTest{

  public static void main(String[] args){
    JAXBContent context = JAXBContent.newInstance(Boy.class);

    Marsheller marsheller = context.createMarsheller();

    UnMarsheller unmarsheller = context.createUnMarsheller();

  

    Boy boy = new Boy();

    marsheller.marshel(boy,System.out);

    System.out.println();



    String xml=”<boy><name>David</name></boy>”;

    Boy boy2 = (Boy)unmarsheller.unmarshel(new StringReader(xml));

    System.out.println(boy2.name);

  }

}



下面是运行结果:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><boy><name>CY</name></boy>
David
先是marshall成 xml文件,

再是把 xml 文件 unmarshal 成 java object。



改动一:

@XmlAccessorType(XmlAccessType.FIELD)  --> @XmlAccessorType(XmlAccessType.PROPERTY)

意思是 只有 属性 才能被转换成 xml 中的标签。

所以再运行的结果是:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><boy/>
CY

就是说 java object 转换成 xml 的时候,name 不是属性(因为没有 get set方法),所以name不转换成标签。

-----------------------------------------------------

改动二:

在 改动一 的基础上,给name属性添加 get set 方法。 再运行,结果为:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><boy><name>CY</name></boy>
David
由此 可见 @XmlAccessorType 这个annotation 的作用。





@XmlRootElement
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Boy {   
    String name = "CY";
     int age = 10;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}



显然,这个age 是不会被 转化 到xml 文件中的。解决办法是:



@XmlRootElement // bixude
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Boy {
    String name = "CY";
    @XmlElement
     int age = 10;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}



加上 @XmlElement annotation. 运行结果为:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><boy><age>10</age> <name>CY</name></boy>
David

--------------------------------------

对于根元素,可以设置属性:

@XmlRootElement(name="b" nameSpace="http://test")

这样,在生成的xml文件中,<boy> 标签 就会变为 <b> 标签。并且加上一个命名空间。

----------------------------------------

下面解释 @XmlJavaTypeAdaptor 的作用。

@XmlRootElement
@XmlAccessorType(XmlAccessType.PROPERTY)
public class Boy {
    private String name = "CY";

    private Address address; // 是一个接口
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

在 java object 转换成 xml 的时候,接口Address 无法被转换。

所以 这里要加上 @XmlJavaTypeAdapter(AddressAdapter.class)

所以 要多写一个AddressAdaptor 类。

这个类会返回Address接口的一个具体实现类的对象。

这 就是 @XmlJavaTypeAdapter 的作用
分享到:
评论

相关推荐

    《Jaxb2 转换XML文档》学习笔记

    - `@XmlAccessorType`: 指定类中字段的默认注解策略,如`@XmlAccessorType(XmlAccessType.FIELD)`表示使用字段进行注解。 4. **对象到XML转换** 使用`Marshaller`类,我们可以将Java对象转换为XML文档。首先,...

    WebService

    【WebService开发详解】 WebService是一种基于XML的互联网交互协议,它允许不同系统间的应用程序进行互操作。在本开发手册中,我们将重点关注使用CXF框架在Tomcat服务器上开发和部署WebService的过程。 1. **CXF...

    cxf_axis_xfire客户端调用的几种方法.docx

    【CXF、AXIS2、XFire 客户端调用方法详解】 在Web服务开发中,CXF、AXIS2和XFire是常见的Java API,用于构建和消费SOAP(简单对象访问协议)服务。这些框架提供了丰富的功能,使得开发者能够方便地创建和调用Web...

    Jaxb2实现JavaBean与xml互转的方法详解

    - `@XmlAccessorType(XmlAccessType.FIELD)`:指定JAXB如何访问Java类的字段,FIELD表示使用字段进行序列化和反序列化。 - `@XmlAccessOrder`:控制XML元素或属性的顺序。 - `@XmlJavaTypeAdapter`:允许自定义...

    CXF开发webservice服务端

    ### CXF 开发 WebService 服务端详解 #### 一、引言 随着企业级应用对服务化的不断追求,Web Service 成为了实现不同系统间通信的重要手段之一。Apache CXF 是一个高性能、易于使用的框架,它支持多种协议,如SOAP...

    JDK1.6的九大新特性

    ### JDK1.6的九大新特性详解 #### 一、Overview JDK1.6(Java Development Kit 1.6)作为Java平台的一个重要版本,引入了许多新的特性和改进,这些变化不仅增强了Java语言本身的实用性,还提高了开发者的生产力。...

    20150914-jaxb-experimental

    【Java JAXB 框架详解】 Java Architecture for XML Binding (JAXB) 是Java平台上的一个标准,用于在Java对象和XML文档之间进行双向转换。它提供了自动的数据绑定机制,简化了XML数据处理,使得开发者无需编写大量...

Global site tag (gtag.js) - Google Analytics