XML 인코더/디코더는 @XMLTransient
주석을 선호합니다.
transient
키워드는 바이트 시퀀스로 끝나는 Java 객체 직렬화 프로세스 용입니다. XML "직렬화"는 형식이 지정된 텍스트 문서로 끝납니다. 필드를 serialize하지 않으려면 (transient
으로 표시) 필드를 선택하고 출력이 매우 다르므로 제외하려는 다른 필드를 직접 선택하여 처리하고 싶을 수 있습니다. 예를 들어 자바 직렬화의 경우 쉽고 간단하기 때문에 byte[]
을 직렬화하도록 선택할 수 있습니다. XML의 경우 더 좋고/더 의미있는 텍스트 표현이있는 경우 해당 바이트 배열을 만드는 데 사용 된 객체를 직렬화하려고 할 수 있습니다.
@XMLTransient
은 JAXB
에 사용됩니다. (source)
BeanInfo info = Introspector.getBeanInfo(JTextField.class);
PropertyDescriptor[] propertyDescriptors =
info.getPropertyDescriptors();
for (int i = 0; i < propertyDescriptors.length; ++i) {
PropertyDescriptor pd = propertyDescriptors[i];
if (pd.getName().equals("text")) {
pd.setValue("transient", Boolean.TRUE);
}
}
그것은 우아한 해결책이 아니다 : XMLEncoder
이 필드를 (일시적으로 표시) 제외 할 경우, 당신은 그들의 PropertyDescriptor
에 TRUE
에 "transient"
속성을 설정해야합니다. 대안은 XMLEncoder
대신 JAXB
을 사용하는 것입니다.
그래, 왜? 우리는 이미 저주의 키워드를 가지고 있습니다! – sproketboy
Java 직렬화 및 XML 인코딩에 동일한 클래스를 사용하고자 할 수 있습니다. 1 개의 키워드 또는 제외 된 필드를 표시하는 방법 만있는 경우 2 가지 목적을 위해 차이를 만들 수 없습니다. – icza
XMLEncoder에서는 작동하지 않습니다. – sproketboy