主要引至http://suo.iteye.com/blog/1233458
一、簡介
1、概念是什么:(Java Architecture for XML Binding) 是一個業(yè)界的標準,是一項可以根據(jù)XML Schema產(chǎn)生Java類的技術(shù)。是一種xml與object映射綁定技術(shù)標準,既然是標準就可以有不同實現(xiàn).
2、JAXB中有什么:包含“xjc”工具和一個“schemagen”工具。
“xjc”工具可以用來將XML模式或其他類型模式文件(Java 1.6試驗性地支持RELAX NG,DTD以及WSDL)轉(zhuǎn)換為Java類。Java類使用javax.xml.bind.annotation包下的Java 標注,例如@XmlRootElement和@XmlElement。XML列表序列表示為java.util.List類型的屬性, 通過JAXBContext可以創(chuàng)建Marshallers(將Java對象轉(zhuǎn)換成XML)和Unmarshallers(將XML解析為Java對象)。 另外的“schemagen”工具,能夠執(zhí)行“xjc”的反向操作,通過一組標注的Java類創(chuàng)建一個XML模式。
二、JDK5以下開發(fā)需要的jar包:activation.jar、jaxb-api.jar、 jaxb-impl.jar、 jsr173-api.jar; 如果是基于JDK6以上版本已經(jīng)集成JAXB2的JAR,在目錄{JDK_HOME}/jre/lib/rt.jar中。
三、標注相關(guān)
注意:
1、注解可在屬性定義上,也可在getter()方法上,最好在方法上注解,修飾屬性用private,方法是public,屬性注解可能會出現(xiàn)問題(如:JAXB “Class has two properties of the same name”)。
2、對象中的屬性可以不全部映射到xml中,xml中出現(xiàn)的元素也不一定與映射的實體一一對應,映射的雙方可以靈活對應
3、類上注解后,類中元素也默認按默認名稱映射,但是對象屬性名稱與xml節(jié)點元素名稱不一致時或者不需要顯示在xml節(jié)點中時,則必須做對應的映射配置。
4、注解實例:映射一般分分:類名與xml根節(jié)點的映射、普通屬性與xml節(jié)點的映射、集合與xml中包含子元素的節(jié)點的映射。
示例代碼:
step1:
Customer.java
Object2XmlDemo.java
后臺打印
Xml2ObjectDemo.java
執(zhí)行后,打印
Customer [id=100,name=mkyong,age=29]
其他應用可結(jié)合API及其他范例學習.
一、簡介
1、概念是什么:(Java Architecture for XML Binding) 是一個業(yè)界的標準,是一項可以根據(jù)XML Schema產(chǎn)生Java類的技術(shù)。是一種xml與object映射綁定技術(shù)標準,既然是標準就可以有不同實現(xiàn).
2、JAXB中有什么:包含“xjc”工具和一個“schemagen”工具。
“xjc”工具可以用來將XML模式或其他類型模式文件(Java 1.6試驗性地支持RELAX NG,DTD以及WSDL)轉(zhuǎn)換為Java類。Java類使用javax.xml.bind.annotation包下的Java 標注,例如@XmlRootElement和@XmlElement。XML列表序列表示為java.util.List類型的屬性, 通過JAXBContext可以創(chuàng)建Marshallers(將Java對象轉(zhuǎn)換成XML)和Unmarshallers(將XML解析為Java對象)。 另外的“schemagen”工具,能夠執(zhí)行“xjc”的反向操作,通過一組標注的Java類創(chuàng)建一個XML模式。
二、JDK5以下開發(fā)需要的jar包:activation.jar、jaxb-api.jar、 jaxb-impl.jar、 jsr173-api.jar; 如果是基于JDK6以上版本已經(jīng)集成JAXB2的JAR,在目錄{JDK_HOME}/jre/lib/rt.jar中。
三、標注相關(guān)
注意:
1、注解可在屬性定義上,也可在getter()方法上,最好在方法上注解,修飾屬性用private,方法是public,屬性注解可能會出現(xiàn)問題(如:JAXB “Class has two properties of the same name”)。
2、對象中的屬性可以不全部映射到xml中,xml中出現(xiàn)的元素也不一定與映射的實體一一對應,映射的雙方可以靈活對應
3、類上注解后,類中元素也默認按默認名稱映射,但是對象屬性名稱與xml節(jié)點元素名稱不一致時或者不需要顯示在xml節(jié)點中時,則必須做對應的映射配置。
4、注解實例:映射一般分分:類名與xml根節(jié)點的映射、普通屬性與xml節(jié)點的映射、集合與xml中包含子元素的節(jié)點的映射。
示例代碼:
step1:
Customer.java
1
package step1;
2
import javax.xml.bind.annotation.XmlAttribute;
3
import javax.xml.bind.annotation.XmlElement;
4
import javax.xml.bind.annotation.XmlRootElement;
5
6
/*@XmlRootElement 注釋可以與以下程序元素一起使用:
7
頂層類
8
枚舉類型
9
當使用 @XmlRootElement 注釋對頂層類或枚舉類型進行注釋時,
10
類型值被表示為 XML 文檔中的 XML 元素。
11
*/
12
@XmlRootElement
13
public class Customer {
14
String name;
15
int age;
16
int id;
17
18
@XmlElement //該注釋用于將JavaBean 屬性映射到派生于屬性名稱的 XML 元素
19
public String getName() {
20
return name;
21
}
22
public void setName(String name) {
23
this.name = name;
24
}
25
26
@XmlElement
27
public int getAge() {
28
return age;
29
}
30
public void setAge(int age) {
31
this.age = age;
32
}
33
34
@XmlAttribute //將JavaBean 屬性映射到 XML 屬性。
35
public int getId() {
36
return id;
37
}
38
public void setId(int id) {
39
this.id = id;
40
}
41
42
@Override
43
public String toString() {
44
return "Customer [id=" + id + ",name=" + name + ",age=" + age + "]";
45
}
46
47
48
49
}
50

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

Object2XmlDemo.java
1
package step1;
2
3
import java.io.File;
4
import javax.xml.bind.JAXBContext;
5
import javax.xml.bind.JAXBException;
6
import javax.xml.bind.Marshaller;
7
8
/**
9
*編組 Marshal(java 2 xml)
10
*/
11
public class Object2XmlDemo {
12
public static void main(String[] args) {
13
14
Customer customer = new Customer();
15
customer.setId(100);
16
customer.setName("mkyong");
17
customer.setAge(29);
18
try {
19
File file = new File("H:\\file3.xml");
20
//獲得JAXBContext類的新實例
21
JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
22
//創(chuàng)建一個可以用來將 java 內(nèi)容樹轉(zhuǎn)換為 XML 數(shù)據(jù)的 Marshaller 對象。
23
//(Marshaller 類負責管理將 Java 內(nèi)容樹序列化回 XML 數(shù)據(jù)的過程)
24
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
25
// output pretty printed
26
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); //設置XML自動換行
27
jaxbMarshaller.marshal(customer, file);//將以customer為根的內(nèi)容樹 編組到輸出流中
28
jaxbMarshaller.marshal(customer, System.out);
29
} catch (JAXBException e) {
30
e.printStackTrace();
31
}
32
}
33
}
34
執(zhí)行后生成對應的xml文件
2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

后臺打印
1
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2
<customer id="100">
3
<age>29</age>
4
<name>mkyong</name>
5
</customer>
6

2

3

4

5

6

Xml2ObjectDemo.java
1
package step1;
2
3
import java.io.File;
4
import javax.xml.bind.JAXBContext;
5
import javax.xml.bind.JAXBException;
6
import javax.xml.bind.Unmarshaller;
7
8
/**
9
*解組 Unmarshaller(xml 2 java)
10
*/
11
public class Xml2ObjectDemo {
12
public static void main(String[] args) {
13
try {
14
File file = new File("H:\\file.xml");
15
JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
16
//創(chuàng)建一個可以用來將 XML 數(shù)據(jù)轉(zhuǎn)換為 java 內(nèi)容樹的 Unmarshaller 對象。
17
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
18
//從指定的文件解組 XML 數(shù)據(jù)并返回得到的內(nèi)容樹。
19
Customer customer = (Customer) jaxbUnmarshaller.unmarshal(file);
20
System.out.println(customer);
21
} catch (JAXBException e) {
22
e.printStackTrace();
23
}
24
}
25
}
26

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

執(zhí)行后,打印
Customer [id=100,name=mkyong,age=29]
其他應用可結(jié)合API及其他范例學習.