XStream의 JavaBeanConverter를 사용하려고 시도하고 문제가 발생했습니다. 대부분 나는 뭔가 간단하거나, XStream의 변환기 처리를 충분히 이해하지 못하고 있습니다. XStream JavaBeanConverter가 속성을 serialize하지 않습니다.
@XStreamAlias("test")
public class TestObject
{
private String foo;
public String getFoo()
{
//return foo; -- Adjusted for EDIT#2
return foo.toLowerCase();
}
public void setFoo(String foo)
{
this.foo = foo;
}
}
public void test() throws Exception
{
XStream x = new XStream(new XppDriver());
x.autodetectAnnotations(true);
x.processAnnotations(TestObject.class);
x.registerConverter(new JavaBeanConverter(x.getMapper()));
TestObject o = new TestObject();
//o.setFoo("bar"); -- Adjusted for EDIT#2
o.setFoo("BAR");
String xml = x.toXML(o);
System.out.println(xml);
/*
Expecting...
<test>
<foo>bar</foo>
</test>
But instead getting...
<test>
<foo/>
</test>
*/
}
는 I는
TestObject.getFoo()
방법에 트레이스를 추가하는 시도하고 그것이 XStream에 의해 호출되는 것으로 나타나지만 데이터 출력 스트림에 기록되지 않는다.
JavaBeanConverter의 소스를 살펴본 후 내 구현이 제대로 작동하는 것처럼 보입니다. 따라서 XStream 설정 중에 올바르게 구성되지 않았다고 생각됩니다.
나는 간단한 것을 놓치고 있습니까?
감사합니다. 도움이된다면
또한 편집 한
, 나는
<dependency>
<groupId>org.apache.servicemix.bundles</groupId>
<artifactId>org.apache.servicemix.bundles.xstream</artifactId>
<version>1.3_3</version>
</dependency>
<dependency>
<groupId>org.apache.servicemix.bundles</groupId>
<artifactId>org.apache.servicemix.bundles.xpp3</artifactId>
<version>1.1.4c_3</version>
</dependency>
편집 ...이를 위해 다음과 같은 메이븐 deps를 사용하고 2
나는 내 목표를 더 잘 설명하기 위해 TestObject.getFoo()
방법을 변경했다.
getters/setters를 사용하여 내부 객체의 데이터를 "위생"하려고합니다. 특히 Serializable의 readResolve() 메서드를 구현하지 않아도되도록 직렬 리다이렉트 된 데이터를 정리하려고합니다.
readResolve의 메서드를 구현 한 경우 setter 메서드 (다른 deserialized 들어오는 데이터 집합에 대해)와 readResolve (비 직렬화 된 XML 데이터)에서 모두 정리해야합니다.
그 이유는 XStream의 일반 필드 기반 사례 대신 JavaBeanConverter를 사용하여 getters/setters를 통해 데이터를 강제 적용하는 이유입니다.
이 정보가 조금 더 잘 설명되기를 바랍니다.
감사합니다. 당신이 그것을 잘 작동 라인
x.registerConverter(new JavaBeanConverter(x.getMapper()));
을 주석 경우
좋은 코드 샘플을 보려면 +1 (maven pom snippets) –