2012-02-27 2 views
4

yamlbeans를 사용하여 yaml 파일을 Java 객체로 직렬화 해제합니다. 내가 단 하나의 클래스를 가지고있는 한 이것은 잘 작동합니다. 문제는 필드를 중첩 할 때 yaml 설명에 중첩 클래스를 지정해야한다는 것입니다.yamlbeans를 사용하여 중첩 된 클래스를 비 직렬화

단일 클래스 예제 :

자바 :

public class MessageField { 
    public String name; 
    public String type; 
    public int length; 
    public String comment; 
} 

YAML :

name: field1 
type: int 
length: 4 
comment: first field 
--- 
name: field2 
type: string 
length: 16 
comment: second field 
--- 

여러 개의 클래스 (! YAML 파일에 com.mylib.VariableField 필요)

자바 :

YAML :

YamlReader reader = new YamlReader(new FileReader("sample.yml")); 
MessageField mf = reader.read(MessageField.class); 

:

name: field3 
type: short 
length: 2 
comment: 
variableFields: 
    - !com.mylib.VariableField 
    id: 1 
    name: nestedField 1 
    type: string 
    length: -1 
    comment: 
--- 

YAML 문서 페이지 내 최상위 클래스에 무엇 인 클래스를 읽을 때 유형을 지정하여 클래스를 직렬화하는 방법을 설명합니다 이 올바르게 최상위 클래스에 대한 내 필드를 구문 있지만 내 중첩 된 클래스에 대한! com.mylib.VariableField 식별자를 피할 수 있도록 허용하지 않습니다. yaml 파일이 클래스 이름을 알 필요가 없도록 Java 코드를 변경할 수있는 방법이 있는지 알아 내려고합니다.

답변

7

나는 당신을 위해 무엇을 찾고있는 것은 컬렉션베이스 필드의 기본 요소 유형을 설정

reader.getConfig().setPropertyElementType(MessageField.class, "variableFields", VariableField.class); 

믿습니다. 마찬가지로 setPropertyDefaultType 메서드를 사용하여 필드 자체의 기본 유형을 지정할 수 있습니다.

YamlReader에 지정된 기본 필드/요소 유형을 사용하면 더 이상 yaml 파일에 클래스 이름을 포함 할 필요가 없습니다. 포함하는 모든 유형 이름이이 기본값을 대체합니다. 또한 YamlWriter에 기본 유형이 정의되어 있으면 불필요한 클래스 이름이 yaml 파일에 기록되지 않습니다.

+0

고마워, 배트맨. 그것은 완벽하게 작동했습니다. –

+0

배트맨, 당신은 영웅입니다 : D – pokeRex110

관련 문제