찾다
백엔드 개발XML/RSS 튜토리얼Java&Xml Tutorial (11) JAXB는 XML 및 Java 객체 변환을 구현합니다.


JAXB는 Java Architecture for XML Binding의 약어로, Java 클래스와 XML 간의 매핑을 설정하는 데 사용되며 개발자가 XML과 Java 객체를 서로 쉽게 변환하는 데 도움을 줍니다.
이 기사에서는 간단한 예를 사용하여 JAXB의 사용법을 소개합니다. 먼저 JAXB에서 일반적으로 사용되는 API를 이해해야 합니다.

  • JAXBContext 클래스는 애플리케이션의 진입점이며 XML/Java 바인딩 정보를 관리하는 데 사용됩니다.

  • Marshaller 인터페이스는 Java 객체를 XML 데이터로 직렬화합니다.

  • Unmarshaller 인터페이스는 XML 데이터를 Java 객체로 역직렬화합니다.

  • @XmlType은 Java 클래스 또는 열거형 유형을 XML 스키마 유형

  • @XmlAccessorType(XmlAccessType.FIELD), 제어 필드 또는 직렬화로 매핑합니다. 속성. FIELD는 JAXB가 Java 클래스의 모든 비정적(정적), 비일시적(@XmlTransient로 표시) 필드를 자동으로 XML에 바인딩한다는 것을 의미합니다. 다른 값은 XmlAccessType.PROPERTY 및 XmlAccessType.NONE입니다.

  • @XmlAccessorOrder, JAXB 바인딩 클래스의 속성 및 필드 순서 제어

  • @XmlJavaTypeAdapter, 사용자 정의 어댑터 사용(예: 추상 클래스 확장) XmlAdapter를 사용하고 marshal() 및 unmarshal() 메서드를 재정의하여 Java 클래스를 XML로 직렬화합니다.

  • @XmlElementWrapper는 배열 또는 컬렉션(즉, 여러 요소가 포함된 멤버 변수)의 경우 배열 또는 컬렉션을 래핑하는 XML 요소(래퍼라고 함)를 생성합니다.

  • @XmlRootElement는 Java 클래스 또는 열거 유형을 XML 요소에 매핑합니다.

  • @XmlElement는 Java 클래스의 속성을 속성과 동일한 이름을 가진 XML 요소에 매핑합니다.

  • @XmlAttribute는 Java 클래스의 속성을 해당 속성과 동일한 이름을 가진 XML 속성에 매핑합니다.

바인딩해야 하는 Java Bean의 내용은 다음과 같습니다.
Employee.java

package net.csdn.beans;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)  
@XmlRootElement  @XmlType(name = "Employee", propOrder = { "name", "age", "role", "gender" }) 
public class Employee {
    private String name;    
    private String gender;    
    private int age;    
    private String role;    
    public String getName() {        
    return name;
    }    public void setName(String name) {        
    this.name = name;
    }    public String getGender() {        
    return gender;
    }    public void setGender(String gender) {        
    this.gender = gender;
    }    public int getAge() {        
    return age;
    }    public void setAge(int age) {        
    this.age = age;
    }    public String getRole() {        
    return role;
    }    public void setRole(String role) {        
    this.role = role;
    }    @Override
    public String toString() {        
    return "Employee:: Name=" + this.name + " Age=" + this.age + " Gender="
                + this.gender + " Role=" + this.role;
    }

}

변환해야 하는 XML 파일의 내용
Employee.xml

<?xml version="1.0"?><employee id="1">
    <name>Pankaj</name>
    <age>29</age>
    <role>Java Developer</role>
    <gender>Male</gender></employee>

다음으로 테스트 사례 코드를 작성합니다.
TestJAXB.java

package net.csdn.test;
import java.io.InputStream;
import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import net.csdn.beans.Employee;
import org.junit.Test;public class TestJAXB {
    @Test
    public void testXml2Obj() throws Exception {
        InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("employee.xml");
        byte[] bytes = new byte[is.available()];
        is.read(bytes);
        String xmlStr = new String(bytes);
        JAXBContext context = JAXBContext.newInstance(Employee.class);  
        Unmarshaller unmarshaller = context.createUnmarshaller();  
        Employee emp = (Employee) unmarshaller.unmarshal(new StringReader(xmlStr));
        System.out.println(emp);
    }

    @Test
    public void testObj2Xml() {
        Employee  emp = new Employee();
        emp.setAge(10);
        emp.setGender("Male");
        emp.setName("Jane");
        emp.setRole("Teacher");
        String xmlStr = TestJAXB.convertToXml(emp,"utf-8");  
        System.out.println(xmlStr);
    }

    public static String convertToXml(Object obj, String encoding) {  
        String result = null;  
        try {  
            JAXBContext context = JAXBContext.newInstance(obj.getClass());  
            Marshaller marshaller = context.createMarshaller();  
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);  
            marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding);  

            StringWriter writer = new StringWriter();  
            marshaller.marshal(obj, writer);  
            result = writer.toString();  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  

        return result;  
    } 

}

testObj2Xml 테스트 메서드를 실행하고 콘솔 출력을 실행합니다. :

<?xml version="1.0" encoding="utf-8" standalone="yes"?><employee>
    <name>Jane</name>
    <age>10</age>
    <role>Teacher</role>
    <gender>Male</gender></employee>

testXml2Obj 테스트 메소드 실행, 콘솔 출력:

Employee:: Name=Pankaj Age=29 Gender=Male Role=Java Developer

참고: 이 예에서는 JUnit4가 Eclipse에서 단위 테스트 도구로 사용됩니다. Window->Show View를 클릭합니다. ->OutLine 메뉴를 사용하여 각각 testXml2Obj 및 testObj2Xml 메소드에서 개요 보기를 엽니다. 마우스 오른쪽 버튼 클릭->Run As->JUnit Test.

JAXB는 Java Architecture for XML Binding의 약어로, Java 클래스와 XML 간의 매핑을 설정하는 데 사용되며 개발자가 XML과 Java 객체를 서로 쉽게 변환할 수 있도록 도와줍니다.
이 기사에서는 간단한 예를 사용하여 JAXB의 사용법을 소개합니다. 먼저 JAXB에서 일반적으로 사용되는 API를 이해해야 합니다.

  • JAXBContext 클래스는 애플리케이션의 진입점이며 XML/Java 바인딩 정보를 관리하는 데 사용됩니다.

  • Marshaller 인터페이스는 Java 객체를 XML 데이터로 직렬화합니다.

  • Unmarshaller 인터페이스는 XML 데이터를 Java 객체로 역직렬화합니다.

  • @XmlType은 Java 클래스 또는 열거형 유형을 XML 스키마 유형

  • @XmlAccessorType(XmlAccessType.FIELD), 제어 필드 또는 직렬화로 매핑합니다. 속성. FIELD는 JAXB가 Java 클래스의 모든 비정적(정적), 비일시적(@XmlTransient로 표시) 필드를 자동으로 XML에 바인딩한다는 것을 의미합니다. 다른 값은 XmlAccessType.PROPERTY 및 XmlAccessType.NONE입니다.

  • @XmlAccessorOrder, JAXB 바인딩 클래스의 속성 및 필드 순서 제어

  • @XmlJavaTypeAdapter, 사용자 정의 어댑터 사용(예: 추상 클래스 확장) XmlAdapter를 사용하고 marshal() 및 unmarshal() 메서드를 재정의하여 Java 클래스를 XML로 직렬화합니다.

  • @XmlElementWrapper는 배열 또는 컬렉션(즉, 여러 요소가 포함된 멤버 변수)의 경우 배열 또는 컬렉션을 래핑하는 XML 요소(래퍼라고 함)를 생성합니다.

  • @XmlRootElement는 Java 클래스 또는 열거 유형을 XML 요소에 매핑합니다.

  • @XmlElement는 Java 클래스의 속성을 속성과 동일한 이름을 가진 XML 요소에 매핑합니다.

  • @XmlAttribute는 Java 클래스의 속성을 해당 속성과 동일한 이름을 가진 XML 속성에 매핑합니다.

바인딩해야 하는 Java Bean의 내용은 다음과 같습니다.
Employee.java

package net.csdn.beans;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)  
@XmlRootElement  
@XmlType(name = "Employee", propOrder = { "name", "age", "role", "gender" }) 
public class Employee {
    private String name;    
    private String gender;    
    private int age;    
    private String role;    
    public String getName() {        
    return name;
    }    public void setName(String name) {        
    this.name = name;
    }    public String getGender() {        
    return gender;
    }    public void setGender(String gender) {        
    this.gender = gender;
    }    public int getAge() {        
    return age;
    }    public void setAge(int age) {        
    this.age = age;
    }    public String getRole() {        
    return role;
    }    public void setRole(String role) {        
    this.role = role;
    }    @Override
    public String toString() {        
    return "Employee:: Name=" + this.name + " Age=" + this.age + " Gender="
                + this.gender + " Role=" + this.role;
    }

}

변환해야 하는 XML 파일의 내용
Employee.xml

<?xml version="1.0"?><employee id="1">
    <name>Pankaj</name>
    <age>29</age>
    <role>Java Developer</role>
    <gender>Male</gender></employee>

다음으로 테스트 사례 코드를 작성합니다.
TestJAXB.java

package net.csdn.test;
import java.io.InputStream;
import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import net.csdn.beans.Employee;
import org.junit.Test;
public class TestJAXB {
    @Test
    public void testXml2Obj() throws Exception {
        InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("employee.xml");
        byte[] bytes = new byte[is.available()];
        is.read(bytes);
        String xmlStr = new String(bytes);
        JAXBContext context = JAXBContext.newInstance(Employee.class);  
        Unmarshaller unmarshaller = context.createUnmarshaller();  
        Employee emp = (Employee) unmarshaller.unmarshal(new StringReader(xmlStr));
        System.out.println(emp);
    }

    @Test
    public void testObj2Xml() {
        Employee  emp = new Employee();
        emp.setAge(10);
        emp.setGender("Male");
        emp.setName("Jane");
        emp.setRole("Teacher");
        String xmlStr = TestJAXB.convertToXml(emp,"utf-8");  
        System.out.println(xmlStr);
    }

    public static String convertToXml(Object obj, String encoding) {  
        String result = null;  
        try {  
            JAXBContext context = JAXBContext.newInstance(obj.getClass());  
            Marshaller marshaller = context.createMarshaller();  
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);  
            marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding);  

            StringWriter writer = new StringWriter();  
            marshaller.marshal(obj, writer);  
            result = writer.toString();  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  

        return result;  
    } 

}

testObj2Xml 테스트 메서드를 실행하고 콘솔 출력을 실행합니다. :

<?xml version="1.0" encoding="utf-8" standalone="yes"?><employee>
    <name>Jane</name>
    <age>10</age>
    <role>Teacher</role>
    <gender>Male</gender></employee>

testXml2Obj 테스트 메소드 실행, 콘솔 출력:

Employee:: Name=Pankaj Age=29 Gender=Male Role=Java Developer

참고: 이 예에서는 JUnit4가 Eclipse에서 단위 테스트 도구로 사용됩니다. Window->Show View를 클릭합니다. ->OutLine 메뉴를 사용하여 각각 testXml2Obj 및 testObj2Xml 메소드에서 개요 보기를 엽니다. 마우스 오른쪽 버튼 클릭->Run As->JUnit Test.

위는 Java&Xml 튜토리얼입니다. (11) XML 및 Java 객체 변환의 JAXB 구현에 대한 자세한 내용은 PHP 중국어 웹사이트(www.php.cn)를 참고하세요!


성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
带你搞懂Java结构化数据处理开源库SPL带你搞懂Java结构化数据处理开源库SPLMay 24, 2022 pm 01:34 PM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于结构化数据处理开源库SPL的相关问题,下面就一起来看一下java下理想的结构化数据处理类库,希望对大家有帮助。

Java集合框架之PriorityQueue优先级队列Java集合框架之PriorityQueue优先级队列Jun 09, 2022 am 11:47 AM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于PriorityQueue优先级队列的相关知识,Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的,下面一起来看一下,希望对大家有帮助。

完全掌握Java锁(图文解析)完全掌握Java锁(图文解析)Jun 14, 2022 am 11:47 AM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于java锁的相关问题,包括了独占锁、悲观锁、乐观锁、共享锁等等内容,下面一起来看一下,希望对大家有帮助。

一起聊聊Java多线程之线程安全问题一起聊聊Java多线程之线程安全问题Apr 21, 2022 pm 06:17 PM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于多线程的相关问题,包括了线程安装、线程加锁与线程不安全的原因、线程安全的标准类等等内容,希望对大家有帮助。

Java基础归纳之枚举Java基础归纳之枚举May 26, 2022 am 11:50 AM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于枚举的相关问题,包括了枚举的基本操作、集合类对枚举的支持等等内容,下面一起来看一下,希望对大家有帮助。

详细解析Java的this和super关键字详细解析Java的this和super关键字Apr 30, 2022 am 09:00 AM

本篇文章给大家带来了关于Java的相关知识,其中主要介绍了关于关键字中this和super的相关问题,以及他们的一些区别,下面一起来看一下,希望对大家有帮助。

Java数据结构之AVL树详解Java数据结构之AVL树详解Jun 01, 2022 am 11:39 AM

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于平衡二叉树(AVL树)的相关知识,AVL树本质上是带了平衡功能的二叉查找树,下面一起来看一下,希望对大家有帮助。

java中封装是什么java中封装是什么May 16, 2019 pm 06:08 PM

封装是一种信息隐藏技术,是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法;封装可以被认为是一个保护屏障,防止指定类的代码和数据被外部类定义的代码随机访问。封装可以通过关键字private,protected和public实现。

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.