본문 바로가기

XML & WebServices

[XStream] XStream 사용예

crescent에서 색인 설정 파일을 xml로 정의하고 있습니다.

collections.xml인데요... 본래 이걸 그냥 dom4j를 사용해서 읽어서 Map과 기타 필요한 오브젝트를 생성하는

형태로 만들어서 사용하고 있었습니다.


그러다보니.. webpage에서 이 collections.xml설정을 변경하는 기능을 추가하려보니..

저런 형태로는 다루기가 어려울 것 같아서 XML과 POJO의 변환에 관련된 라이브러리를 찾아보다가

XStream을 알게되어 처음 사용해보았습니다.


꽤 오래전부터 많이 사용되던 것 같은데..

왜 몰랐을까요 -_-;


http://xstream.codehaus.org


예제도 잘 나와있습니다.


이걸 사용해서 collections.xml을 변환해본 예제입니다. xml 자체가 그리 복잡하지 않아서..

특별히 어려운 내용은 없습니다.


XStream 사용하시는 분들께서 예제로 보시면 좋을 것 같아서 올려봅니다.


현재 사용되고 있는 xml인데요.. XStream을 사용하기 위해서 각 엘리먼트들을 전부 클래스로 만들었습니다.

여기서는 최상위 Root를 나타내는 CrescentCollections 와 그 하위인 CrescentCollection

그리고 CrescentCollection 하위로 들어가는 CrescentCollectionField, CrescentDefaultSearchField, CrescentSortField가 만들어졌습니다.


indexingDirectory와 analyzer 부분은 CrescentCollection의 field로 들어갑니다.



CrescentCollections.java

XStream의 annotation을 사용하였고요..

@XStreamAlias로 지정된 name 값이 엘리먼트명이 되고..

@XStreamOmitField로 지정된 field는 XML의 변환에서 제외됩니다.


@XStreamImplicit(itemFieldName="collection")
	private List crescentCollections = null;

이 부분은.. <collections></collections>가 하위에 <collection></collection>을 2개 가지고 있는데 그것을 나타내기 위한 설정입니다. 추후 실제 XML로 변환하는 코드에서 추가로 말씀을 드리겠습니다.


getter, setter 메서드는 코드에서는 생략했습니다.

CrescentCollection.java

<collection></collection>이 가지고 있는 항목들을 표한하기 위한 설정들이 들어가있습니다.

@XStreamAsAttribute 이 설정을 가지고 있는 field는 xml에서 속성으로 표현됩니다.

<collection name="sample"> 과 같은 형태로요...




CrescentCollectionField.java

<field></field>는 전부 속성으로 되어있기 때문에 특별한 설정은 없고.. 다만 위 xml예에서는 각 속성이 <field></field>로 조금씩 다른데.. 위와 같이 사용하기 위해서는 필드가 전부 동일해야 하겠죠... 




CrescentDefaultSearchField.java


<defaultSearchField/>나 <sortField/>는 거의 비슷하기 때문에 하나만...

이제 이 XML을 POJO로 변환하는 코드입니다.




Test

위와같이 해주시면 되는데...

processAnnotation은 최상위 클래스만 걸어주시면 됩니다.