2014-06-16 2 views
0

엔티티를 직렬화 및 비 직렬화하기 위해 XStream을 사용하고 있습니다. 엔티티가 지속되는 경우,이 ID를 가지고 객체의 직렬화 된 형식은 ID 만하는 모습 수 있습니다 :XStream을 사용한 대체 엔티티 변환

<Person>4</Person> 

는 "역 직렬화는"단순히 데이터베이스에서 읽기 작업입니다.

이 엔티티를로드하는 DAO를 사용하는 SingleValueConverter를 구현 꽤 잘 작동합니다

public class TestSerializer implements SingleValueConverter { 
    public Object fromString(String str) { 
     return dao.readById(str); 
    } 
    public String toString(Object obj) { 
     return ((Entity) obj).getId(); 
    } 
} 

그러나 직렬화되어야하는 개체가 유지되지 않습니다 경우에

. 따라서 ID가 없기 때문에 "실제"직렬화를 수행해야합니다.

<Person> 
    <name>Jon Doe</name> 
</Person> 

그래서 사용자 정의 가능하다 : XStream을 그것의 자신에 많은 개체를 직렬화하는 방법을 알고 나는 XML 결과의 구조에 대해 상관하지 않기 때문에 나는 이런 식으로 뭔가를 얻을 수 있다면, 그것은 잘 될 것 이 직렬화 및 직렬화를 수행하는 변환기 구현은 무엇입니까?

답변

0

변환기에서는 원하는 방식으로 자유롭게 변환 할 수 있습니다. 따라서 기본적으로 사용자 지정 변환기에서 개체의 직렬화 방법을 결정할 수 있습니다. 그러나 AFAIK에서는 단일 값 변환/일반 변환을 전환 할 수 없습니다. 하지만 예제 XML은 이것을 의미합니다.

XStream의 ReflectionConverter과 같은 다른 변환기에 위임하려면 convertAnother(Object, Converter)-method (this question/answer 참조)로이 작업을 수행 할 수 있습니다. 이를 위해 SingleValueConverter 대신 Converter 인터페이스를 구현하여 (비) 마샬링 컨텍스트에 액세스해야합니다.

귀하의 질문에 대한 답변이 있습니까?

HTH,
- 마틴

+0

이 접근 방식의 문제는 더 직렬화에 사용할 변환기를 정확히 XStream을 얘기해야한다는 것이다. 그러나 잘 정의되고 미세 조정 된 직렬화 프로세스에 영향을 미치기를 원하지 않기 때문에 그렇게하고 싶지 않습니다. 기본적으로 내 사용자 지정 변환기에서 내가 원하는 것은 XStream에 내 사용자 지정 변환기를 사용하지 않고 내 엔터티를 serialize하도록 요청하는 것입니다. – MrD