문제
.NET XML 직렬화의 Java 아날로그는 무엇입니까?
해결책
2008년 답변이에 대한 "공식" Java API는 이제 JAXB - XML 바인딩용 Java API입니다.보다 Oracle의 튜토리얼.참조 구현은 다음 위치에 있습니다. http://jaxb.java.net/
2018년 업데이트 참고하세요 Java EE 및 CORBA 모듈은 JDK9의 SE에서 더 이상 사용되지 않으며 JDK11의 SE에서 제거됩니다..따라서 JAXB를 사용하려면 예를 들어 번들로 제공되는 기존 엔터프라이즈급 환경에 있어야 합니다.앱 서버를 사용하지 않으면 수동으로 가져와야 합니다.
다른 팁
엑스스트림 많은 구성과 비용 없이 객체를 XML로 직렬화하는 데 꽤 능숙합니다!(BSD 라이센스하에 있습니다).
우리는 프로젝트 중 하나에서 이를 사용하여 기존의 일반 Java 직렬화를 대체했으며 거의 즉시 작동했습니다.
"간단한 XML 직렬화" 프로젝트
당신은 간단한 XML 직렬화 프로젝트.이는 .Net의 System.Xml.Serialization과 가장 가까운 것입니다.
JAXB는 JDK 표준 버전 버전 1.6+의 일부입니다.그래서 그렇습니다 FREE
다운로드하고 관리할 추가 라이브러리가 없습니다.간단한 예를 찾을 수 있습니다 여기
XStream이 죽은 것 같습니다.마지막 업데이트는 2008년 12월 6일이었습니다.Simple
JAXB만큼 쉽고 간단해 보이지만 기업용으로 평가할 수 있는 라이선스 정보를 찾을 수 없었습니다.
버전 1.4부터 Java에는 java.beans.XMLEncoder 및 java.beans.XMLDecoder 클래스가 있다는 점을 언급할 가치가 있습니다.이러한 클래스는 최소한 XML 직렬화와 매우 유사한 XML 인코딩을 수행하며 일부 상황에서는 이러한 작업을 수행할 수도 있습니다.
클래스가 getter 및 setter에 대해 JavaBeans 사양을 고수하는 경우 이 방법은 사용하기 쉽고 스키마가 필요하지 않습니다.다음과 같은 주의 사항이 있습니다.
- 일반적인 Java 직렬화와 마찬가지로
- 코딩 및 디코딩은 InputStream 및 OutputStream을 통해 실행됩니다.
- 프로세스는 친숙한 writeObject 및 readObject 메소드를 사용합니다.
- 일반적인 Java 직렬화와 달리
- 인코딩과 디코딩으로 인해 생성자와 초기화 프로그램이 호출됩니다.
- 클래스가 직렬화 가능 여부를 구현하는지 여부에 관계없이 인코딩 및 디코딩이 작동합니다.
- 일시적 수정자는 고려되지 않습니다.
- 공개 생성자가 있는 공개 클래스에서만 작동합니다.
예를 들어 다음 선언을 살펴보겠습니다.
public class NPair {
public NPair() { }
int number1 = 0;
int number2 = 0;
public void setNumber1(int value) { number1 = value;}
public int getNumber1() { return number1; }
public void setNumber2(int value) { number2 = value; }
public int getNumber2() {return number2;}
}
이 코드를 실행하면:
NPair fe = new NPair();
fe.setNumber1(12);
fe.setNumber2(13);
FileOutputStream fos1 = new FileOutputStream("d:\\ser.xml");
java.beans.XMLEncoder xe1 = new java.beans.XMLEncoder(fos1);
xe1.writeObject(fe);
xe1.close();
다음 파일이 생성됩니다.
<?xml version="1.0" encoding="UTF-8"?>
<java version="1.7.0_02" class="java.beans.XMLDecoder">
<object class="NPair">
<void property="number1">
<int>12</int>
</void>
<void property="number2">
<int>13</int>
</void>
</object>
</java>
XMLBeans XML에 대한 스키마가 있으면 훌륭하게 작동합니다.스키마에 대한 Java 객체를 생성하고 사용하기 쉬운 구문 분석 방법을 생성합니다.
객체의 자동 XML 직렬화에 대해 이야기하고 있다면 다음을 확인하세요. 비버:
Castor는 Java[tm]용 오픈 소스 데이터 바인딩 프레임워크입니다.이는 Java 개체, XML 문서 및 관계형 테이블 간의 최단 경로입니다.Castor는 Java-XML 바인딩, Java-SQL 지속성 등을 제공합니다.
잊지 마세요 JiBX.
당신이 원한다면 구조화된 솔루션 (ORM과 같은) JAXB2가 좋은 솔루션입니다.
DOT NET과 같은 직렬화를 원한다면 다음을 사용할 수 있습니다. JavaBeans 구성 요소의 장기간 지속성
선택은 직렬화 사용에 따라 달라집니다.
public static String genXmlTag(String tagName, String innerXml, String properties )
{
return String.format("<%s %s>%s</%s>", tagName, properties, innerXml, tagName);
}
public static String genXmlTag(String tagName, String innerXml )
{
return genXmlTag(tagName, innerXml, "");
}
public static <T> String serializeXML(List<T> list)
{
String result = "";
if (list.size() > 0)
{
T tmp = list.get(0);
String clsName = tmp.getClass().getName();
String[] splitCls = clsName.split("\\.");
clsName = splitCls[splitCls.length - 1];
Field[] fields = tmp.getClass().getFields();
for (T t : list)
{
String row = "";
try {
for (Field f : fields)
{
Object value = f.get(t);
row += genXmlTag(f.getName(), value == null ? "" : value.toString());
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
row = genXmlTag(clsName, row);
result += row;
}
}
result = genXmlTag("root", result);
return result;
}