JAXB 자바 빈 과 xml 의 상호 전환 실현 (2) - 패키지

6745 단어 J2EE
지난 블 로 그 는 JAXB 에 대한 소개 와 간단 한 인 스 턴 스 를 실 시 했 으 나 프로젝트 에 활용 하 는 것 은 분명 유연성 이 부족 하 다. 다음은 계속 포장 하 겠 다.
1. xmlToObject 와 objectToXml 방법 으로 패키지
상세 설명 은 코드 주석 참조
package com.jaxb;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

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

/**
 * JAXB,xml object   
 *
 */
public class JAXB {
    
//    /**
//     * xml bean(   )
//     * @param xml
//     * @return
//     * @throws JAXBException
//     */
//    public static Student xmlToBean(String xml) throws JAXBException{
//        //  JAXBContext    ,   Student.class,   JAXBContext   Student 
//        JAXBContext jaxbContext = JAXBContext.newInstance(Student.class);
//        //  Unmarshaller  ,   xml     java  
//        Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
//        //              
//        InputStream inputStream = new ByteArrayInputStream(xml.getBytes());
//        //  inputStream,  java  
//        Student student = (Student) unmarshaller.unmarshal(inputStream);
//        return student;
//    }
    
    /**
     * xmlToObject
     * @param    T,        ,         ,         ,                。 
     * @param objectClass
     * @param xml
     * @return T
     * @throws JAXBException
     */
    @SuppressWarnings("unchecked")
    public static  T xmlToObject(Class objectClass,String xml) throws JAXBException{
        InputStream inputStream = null;
        Unmarshaller unmarshaller = null;
        JAXBContext jaxbContext = null;

        //  JAXBContext    ,   JAXBContext     objectClass  new class[] objectClass.getClass()
        jaxbContext = JAXBContext.newInstance(objectClass);
        //  Unmarshaller  ,   xml     java  
        unmarshaller = jaxbContext.createUnmarshaller();  
        //              
        inputStream = new ByteArrayInputStream(xml.getBytes());
        //         (  close()      )
        if(inputStream != null){
            try
            {
                //         
                inputStream.close();
            }
            catch(IOException e)
            {
                e.printStackTrace();
            }
        }
        //  inputStream,    
        return (T)unmarshaller.unmarshal(inputStream); 
    }  
    
    /**
     * objectToXml
     * @param object
     * @param format
     * @return string
     * @throws JAXBException
     */
    @SuppressWarnings("unchecked")
    public static  T objectToXml(Object object, boolean format) throws JAXBException
    {
        String xml;
        Marshaller marshaller = null;
        JAXBContext jaxbContext = null;
        ByteArrayOutputStream baos = null;
        
        jaxbContext = JAXBContext.newInstance(object.getClass());
        marshaller = jaxbContext.createMarshaller();
        
        //           (    )
        marshaller.setProperty("jaxb.encoding",  "UTF-8");
        //           ,System.getProperty("file.encoding")                     (    main   java       )
        //marshaller.setProperty("jaxb.encoding", System.getProperty("file.encoding"));
        
        //   xml
        marshaller.setProperty("jaxb.formatted.output", format);
        
        baos = new ByteArrayOutputStream();
        // object  baos(    )
        marshaller.marshal(object, baos);
        //   string  
        xml = baos.toString();
        
        if(baos != null){
            try
            {
                baos.close();
            }
            catch(IOException e)
            {
                e.printStackTrace();
            }
        }
        return (T)xml;
    }
}

2. 인 스 턴 스 - object
변환 할 object - Student 실체:
package com.jaxb;

import java.io.Serializable;

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

/**
 * @XmlAccessorType(XmlAccessType.FIELD):        、             XML,    XmlTransient   。
 * @XmlRootElement:xml    
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "student")
public class Student implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

        //               XML  
	@XmlElement
	private String id;
	
	@XmlElement
	private String name;
	
	@XmlTransient
	private String country;

	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 getCountry() {
		return country;
	}

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

@ XmlAccessorType (XmlAccessType. FIELD) 매 거 진 상수 요약FIELD           JAXB 바 인 딩 클래스 의 모든 비 정적, 비 과도 필드 는 XmlTransient 주석 이 없 는 한 XML 에 자동 으로 바 인 딩 됩 니 다.NONE           일부 JAXB 주석 을 사용 하지 않 는 한 모든 필드 나 속성 을 XML 에 연결 할 수 없습니다.PROPERTY           JAXB 바 인 딩 클래스 의 모든 획득 방법 / 설정 방법 은 XmlTransient 주석 이 없 는 한 XML 에 자동 으로 바 인 딩 됩 니 다.PUBLIC_MEMBER           모든 공공 획득 방법 / 설정 방법 은 XmlTransient 주석 이 없 는 한 모든 공공 필드 와 자동 으로 XML 로 연 결 됩 니 다.
3. 실례 - main
먼저 xml 를 object 로 바 꾼 다음 object 를 xml 로 바 꿉 니 다.
package com.jaxb;

import java.io.ByteArrayInputStream;
import java.io.InputStream;

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


public class JaxbMain {

    public static void main(String[] args) throws JAXBException {
        //xml
        String xml = "001AKK  ";
        
        //xmlToObject
        Student student = (Student) JAXB.xmlToObject(Student.class, xml);
        
        System.out.println(student.getName());
        
        xml = null;
        //objectToXml
        xml = JAXB.objectToXml(student, true);
        
        System.out.println(xml);
        
    }
}

4. 실행 - 출력 결과
AKK


    001
    AKK

전체적으로 보면 패 키 징 은 어렵 지 않 습 니 다. 업무 와 관련 된 매개 변수 와 반환 값 을 추상 화 하 는 것 입 니 다. 보통 일반적인 사용 은 팬 형 을 통 해 이 루어 집 니 다. 마치 우리 JAXB 의 전환 방법 과 같 습 니 다.

좋은 웹페이지 즐겨찾기