JAXB 초보 이해

6359 단어 JAXB입문 하 다
JAXB 의 전체 이름 은 Java Architecture for XML Binding 이다.JAXB 는 DTD 로 정 의 된 XML 문 서 를 자바 대상 에 매 핑 하여 간단 하고 빠 른 데이터 조작 방식 을 제공 하 는 것 이 특징 이다.XML 의 요소,속성 에 접근 하려 면 해당 대상 의 일련의 getter 와 setter 방법.대상 의 데 이 터 를 XML 파일 에 marshal 방법 으로 쓸 수도 있 고,unmarshal 방법 으로 XML 파일 의 데 이 터 를 대상 에 읽 을 수도 있 으 며,validate 방법 으로 XML 파일 이 DTD 의 제약 에 부합 되 는 지 검증 할 수도 있다.JAXB 의 단점 은 특정한(즉,당신 이 DTD 로 정의 한)XML 문서 에 만 접근 할 수 있다 는 것 이다.
먼저 예 를 봅 시다.
 
Customer.java
 
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement; 

@XmlRootElement
public class Customer {

    String name;
    int age;
    int id;
    
    @XmlElement   
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    
    @XmlElement
    public int getAge() {
        return age;
    }
 
    public void setAge(int age) {
        this.age = age;
    } 
    
    @XmlAttribute
    public int getId() {
        return id;
    }  

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

    @Override
    public String toString()
    {   	
		return "Customer[" + getName() + "," + getId() + "," + getAge() + "]";   	
    }

}

 
 
 
import java.io.File;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;

public class JAXBExample {

    public static void main(String[] args) {

      Customer customer = new Customer();
      customer.setId(100);
      customer.setName("mkyong");
      customer.setAge(29); 

      try {

        File file = new File("C:\\file.xml");
        JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
        
        //JAVA to XML
        Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
        //      
        jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        jaxbMarshaller.marshal(customer, file);
        jaxbMarshaller.marshal(customer, System.out);   //      
        
        //XML TO JAVA
        Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
	    Customer mycustomer = (Customer) jaxbUnmarshaller.unmarshal(file);
	    System.out.println(mycustomer);

          } catch (JAXBException e) {

        e.printStackTrace();

          }  
    }
}

 
 콘 솔 출력 은 다음 과 같 습 니 다.


    29
    mkyong

Customer[mkyong,100,29]
 
설명:
@XmlRootElement   자바 클래스 를 XML 의 루트 노드 인자 로 표시 합 니 다:name            이 루트 노드 의 이름 을 정의 합 니 다.         namespace   이 루트 노드 이름 공간 정의
@XmlAccessorType  이 클래스 의 어떤 종 류 를 XML 에 매 핑 해 야 하 는 지 정의 합 니 다.네 개의 인 자 를 받 을 수 있 습 니 다.각각:      XmlAccessType.FIELD:이 클래스 의 모든 필드 를 XML 에 매 핑 합 니 다.      XmlAccessType.PROPERTY:이 클래스 의 속성(get/set 방법)을 XML 에 매 핑 합 니 다.      XmlAccessType.PUBLIC_MEMBER:이 클래스 의 모든 Public field 나 property 를 XML 에 동시에 표시 합 니 다(기본 값)      XmlAccessType.NONE:@XmlElement 를 매 핑 하지 않 습 니 다.  XML 노드 에 필드 나 get/set 방법 을 지정 합 니 다.예 를 들 어 하나의 XmlAccessor Type 이 PROPERTY 로 표 시 될 때 get/set 방법 이 없 는 필드 에 이 주 해 를 표시 하면 이 필드 를 XML 에 표시 할 수 있 습 니 다.인자:defaultValue  지정 노드 기본 값         name             노드 이름 지정         namespace    노드 네 임 스페이스 지정         required         필요 한 지 여부(기본 값 false)         nillable           이 필드 에 nillable="true"속성 이 포함 되 어 있 는 지 여부(기본 값 은 false)        type               이 필드 나 속성의 관련 유형 을 정의 합 니 다@XmlAttribute  XML 에 비 치 는 필드 나 get/set 방법 을 지정 합 니 다.인자:name             속성 이름 지정         namespace    속성 네 임 스페이스 지정         required         필요 한 지 여부(기본 값 false)@XmlTransient  어떤 필드 나 속성 을 XML 로 매 핑 할 필요 가 없습니다.예 를 들 어 하나의 XmlAccessor Type 이 PROPERTY 로 표 시 될 때 특정한 get/set 방법의 필드 에 이 주 해 를 표시 하면 이 속성 은 매 핑 되 지 않 습 니 다.@XmlType 맵 에 대한 규칙 적 인 매개 변 수 를 정의 합 니 다:proporer        XML 을 매 핑 할 노드 순 서 를 지정 합 니 다.         factoryClass     UnMarshal 을 지정 할 때 맵 클래스 인 스 턴 스 를 만 드 는 데 필요 한 공장 클래스 입 니 다.기본 값 은 이 클래스 자체 입 니 다.         factoryMethod  공장 류 의 공장 방법 을 지정 하 다.         name               XML Schema 의 type 이름 정의         namespace      Schema 의 네 임 스페이스@XmlElement Wrapper 지정  배열 요소 나 집합 요 소 를 위 한 부모 노드 를 정의 합 니 다.예 를 들 어 클래스 에 List items 라 는 요소 가 있 습 니 다.이 주 해 를 추가 하지 않 으 면 이 요 소 는 매 핑 됩 니 다.    ...    ...와 같은 형식 으로 이 주 해 는 이 요 소 를 포장 할 수 있 습 니 다.예 를 들 어:    @XmlElementWrapper(name="items")    @XmlElement(name="item")    public List items;이러한 XML 스타일 이 생 성 됩 니 다:           ...       ...    @XmlJavaTypeAdapter  XML 에 비 치 는 필드 나 속성 을 사용자 정의 하 는 어댑터 입 니 다.예 를 들 어 클래스 에 인 터 페 이 스 를 포함 하고 있 습 니 다.어댑터(javax.xml.bid.annotation.adapters.XmlAdapter 류 에서 계승)를 정의 할 수 있 습 니 다.이 인 터 페 이 스 를 XML 에 어떻게 비 추 는 지 지정 합 니 다.@XmlSchema 패키지 전체 namespace 를 설정 합 니 다.이 주 해 는 package-info.자바 파일 에 넣 어야 합 니 다.
 
 
테스트:
위의 코드 를 약간 변경 합 니 다.다음 과 같 습 니 다.
 
    @XmlElement(name = "myname")   
    public String getName() {
        return name;
    }

    @XmlAttribute(name = "theID")
    public int getId() {
        return id;
    }  

 결과 출력:
 


    29
    mkyong

Customer[mkyong,100,29]
속성 과 노드 의 탭 이름 이 바 뀐 것 을 발 견 했 습 니 다.
 
요약:
주 해 는 구성원 변수 성명 위 에 놓 을 수도 있 고 set/get 함수 위 에 놓 을 수도 있 습 니 다.별명 을 지정 하려 면 변수 성명 위 에 놓 지 마 십시오.잘못 보 고 됩 니 다.
 
참고:jaxb 주해

좋은 웹페이지 즐겨찾기