클러스터 노드간에 jgroups
트래픽을 최소화하기 위해 객체를 생략하는 자바 직렬화 (readObject
및 writeObject
통해)를 사용자 정의했지만 xstream
에 의해 생성/소비 된 xml
에서 해당 속성을 생략하고 싶지 않습니다. xstream
에 의해 사용되는 자바 직렬화를 제어 할 수있는 방법이 있나요? 이러한 속성을 생략하지 않으시겠습니까?xstream에서 객체의 readObject/writeObject 구현을 사용하지 않으려면 어떻게해야합니까?
답변
편집는 : 죄송합니다, 나는 당신이 필드를 생략하고 싶지 할 질문을 오해. 데이터 모델이 Serializable
을 구현하고 readObject
및 writeObject
방법이있는 경우
, 이러한 방법은 SerializationMethodInvoker#callReadObject
및 SerializationMethodInvoker#callWriteObject
하여보다 정확한 XStream을에 의해 자동으로 호출 또는됩니다. 이러한 호출을 피하기 위해 어떤 구성 플래그도 표시되지 않았습니다.
또한 과도 필드는 자동으로 생략됩니다. AbstractReflectionConverter#shouldUnmarshalField
참조 :
protected boolean shouldUnmarshalField(final Field field) {
return !(Modifier.isTransient(field.getModifiers()) && !shouldUnmarshalTransientFields());
}
및
protected boolean shouldUnmarshalTransientFields() {
return false;
}
을 그래서 피할 수없는 구성 플래그가없는 shouldUnmarshalTransientFields
반환 할 때마다 false
그;
XSream을 사용하여 필드를 생략하는 방법은 여러 가지가 있습니다. 그것을 위해 자바의 구문을 사용 XStream#omitField(Class definedIn, String fieldName)
@XStreamOmitField
-
주석 통해
transient Type field
는
문제의 클래스, 양식, Serializable
을 구현 않습니다와 readObject
있다 및 writeObject
.
매우 기본적인 변환기 클래스를 등록하고 내가 toXML
을 호출했을 때 writeObject가 호출되지 않았다는 것을 발견했습니다. 나는 겉으로보기에 내가 찾고있는 것입니다. 이제는 xtream 생성 xml에서 생략되지 않는 jgroups 직렬화 스트림 (writeObject
통해)의 특정 속성을 생략 할 수 있습니다.
여기 내 변환기 클래스의 ...
package foo.form;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.converters.javabean.JavaBeanConverter;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import com.thoughtworks.xstream.mapper.Mapper;
public class FormConverter extends JavaBeanConverter {
public FormConverter(Mapper mapper) {
super(mapper);
}
@Override
public boolean canConvert(Class clazz) {
return Form.class == clazz;
}
@Override
public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) {
super.marshal(source, writer, context);
}
@Override
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {
return super.unmarshal(reader, context);
}
}
- 1. @SupressWarnings을 사용하지 않으려면 어떻게해야합니까?
- 2. ! important를 사용하지 않으려면 어떻게해야합니까?
- 3. xStream에서 인터페이스 구현을 지정하는 방법은 무엇입니까?
- 4. ember metamorph를 사용하지 않으려면 어떻게해야합니까?
- 5. 기본 생성자를 사용하지 않으려면 어떻게해야합니까?
- 6. 자바 키워드를 사용하지 않으려면 어떻게해야합니까?
- 7. 텍스트 설명을 사용하지 않으려면 어떻게해야합니까?
- 8. 이 기능을 사용하지 않으려면 어떻게해야합니까?
- 9. 일련의 프롬프트에 goto를 사용하지 않으려면 어떻게해야합니까?
- 10. 색인 특정 URL을 사용하지 않으려면 어떻게해야합니까?
- 11. osgi에서 jar 파일을 사용하지 않으려면 어떻게해야합니까?
- 12. 콘솔 모드에서 컬러 테마를 사용하지 않으려면 어떻게해야합니까?
- 13. doxygen에서 타이프라이터 텍스트의 하이픈을 사용하지 않으려면 어떻게해야합니까?
- 14. 안드로이드의 인물 모드에서 splitview를 사용하지 않으려면 어떻게해야합니까?
- 15. MFC 응용 프로그램에서 단추를 사용하지 않으려면 어떻게해야합니까?
- 16. 컨트롤러에서 try ... catch를 사용하지 않으려면 어떻게해야합니까?
- 17. jScrollPane의 세로 스크롤을 사용하지 않으려면 어떻게해야합니까?
- 18. Mercurial에서 개발 라인을 사용하지 않으려면 어떻게해야합니까?
- 19. 루프에이 재귀 함수를 사용하지 않으려면 어떻게해야합니까?
- 20. 모듈에서 인스턴스 변수를 사용하지 않으려면 어떻게해야합니까?
- 21. htaccess에서 Skip Flag를 사용하지 않으려면 어떻게해야합니까?
- 22. OpenID를 사용 하시겠습니까? 사용하지 않으려면 어떻게해야합니까?
- 23. csv 내보내기에서 특수 문자를 사용하지 않으려면 어떻게해야합니까?
- 24. ENUM/SET 유형을 사용하거나 사용하지 않으려면 어떻게해야합니까?
- 25. 여기에 while 루프를 사용하지 않으려면 어떻게해야합니까?
- 26. WPF 도구 팁을 사용하지 않으려면 어떻게해야합니까?
- 27. ckeditor에서 htmlentities() 함수를 사용하지 않으려면 어떻게해야합니까?
- 28. UIPageViewController에서 왼쪽/오른쪽 스크롤을 사용하지 않으려면 어떻게해야합니까?
- 29. 기본 객체에 eval()을 사용하지 않으려면 어떻게해야합니까?
- 30. shouldRasterize를 사용하거나 사용하지 않으려면