2008-11-04 4 views
3

Java 객체와 XML 스키마 (XSD)가있는 경우 해당 객체를 가져 와서 스키마와 일치하는 XML 파일로 변환하는 가장 좋은 방법은 무엇입니까? 객체와 스키마는 서로에 대해 알지 못한다 (Java 클래스가 스키마에서 생성되지 않았다는 점에서).Java 객체와 XML 스키마

예를 들어, 클래스에서 xsd 파일의 'countTotal'이라는 요소에 해당하는 정수 필드 'totalCountValue'가있을 수 있습니다. "객체에 int totalCountValue가 포함되어 있고 'countTotal'이라는 요소를 만들어 XML에 넣는 매핑을 만드는 방법이 있습니까? 마찬가지로 개체에서 무시해야 할 필드가 있거나 개체의 여러 XML 요소와 일치해야하는 목록이있을 수 있습니다.

XStream을 살펴 보았지만 어떤 방식으로도이를 수행하지 못했습니다. 이 작업을 단순화 할 수있는 다른 XML 라이브러리가 있습니까?

+0

이 작업에 더 많은 serializer가 있습니다. JiBX 자세한 내용은 여기를 참조하십시오. http://karussell.wordpress.com/2009/09/03/xml-serializers-for-java/ – Karussell

답변

6

저는 이것이 주석을 사용하여 JAXB를 통해 달성 될 수 있다고 생각합니다. 필자는 XJC를 사용하여 JAXB에서 (스키마에 정의 된대로) Object를 생성하는 것이 기존 스키마와 일치하도록 기존 Java 객체를 매핑하는 것보다 훨씬 쉽다는 것을 알게되었습니다. YMMV.

4

XStream을 사용하여 XML 직렬화를 수행하고 있습니다. 이 시리얼 라이저로 "뻔한"것이 무엇 이니? 일단 당신이 그것의 걸림 새를 얻으면 그것은 매우 간단합니다. 공유하십시오 당신은 어떤 시리얼 라이저 더 간단하거나 이것보다 "쿨"을 발견하면

class MyClass { 
    private int totalCountValue; 

    public MyClass() { 
    } 
} 

:이 샘플 클래스

... 
XStream xstream = new XStream(new DomDriver()); 

xstream.alias("myclass", MyClass.class); 
xstream.aliasField("countTotal", MyClass.class, "totalCountValue"); 

String xml = xstream.toXML(this); 
... 

: 예에서

당신이 뭔가를 할 수 제공 우리와 함께. 또한

내가이 일을 할 JiBx라는 자바 라이브러리를 사용하는 XStream과 미니 튜토리얼 here

+0

슬프게도 xstream이 포함 된 스키마에 대해 유효성을 검사 할 수 없습니다. – Karussell

+0

Xstream 주석은 XSD를 준수하도록 유지되어야합니다. 스키마 중복 정의. – rshepherd

2

확인 ... 변화를 찾고 있어요. XML 스키마 요소를 Java 객체에 매핑하는 방법을 설명하는 매핑 파일 (XML로 작성)을 작성해야합니다. 프로세스 자동화에 도움이되는 몇 가지 생성 도구가 있습니다. 게다가 정말 빠릅니다.

1

Betwixt이라는 Apache Commons의 라이브러리를 사용할 수 있습니다. 왕복 여행이 필요한 경우 Bean을 XML로 매핑 한 다음 다시 가져올 수 있습니다.

2

나는 내 요구에 가장 적합한 라이브러리를 찾아보기 위해 대부분의 라이브러리를 사용해 보았습니다. 또한 여기에 언급되지 않았지만 Woodstox이라는 StAX 구현 인 동료가 제안한 라이브러리를 사용해 보았습니다.

틀림없이 필자의 테스트는이 모든 라이브러리에 대해 완료되지 않았지만 질문에 언급 된 목적을 위해 필자는 Woodstox가 최고인 것으로 나타났습니다. marshalling (테스트에서 XStream을 약 30 ~ 40 % 정도 상회)이 가장 빠릅니다. 또한 사용 및 제어하기가 쉽습니다.

이 접근법의 단점은 작성자가 정의한 XML이 유효성 검사기를 통해 실행되어 스키마에서 올바른지 확인해야한다는 것입니다.

0

JAXB 또는 Castor라고 말합니다.Castor가 사용하기 쉽고 안정적이라는 것을 알았지 만 JAXB가 표준입니다.