2013-09-05 3 views
0

아래 클래스에서 메서드 출력을 serialize하려면 싶습니다.java 및 simplexml 프레임 워크, 메서드 출력을 serialize하는 방법

@Root 
public class Camera { 
public enum Mode { 
    CONTINIOUS, TRIGGERED, DEACTIVATED; 
} 

@Element 
private Mode currMode; 
@Element 
private int interval; 
@Element 
private int beforeEvent; 
@Element 
private int afterEvent; 
@Element 
private String savePath; 

    public Camera(Mode currMode, int interval, int beforeEvent, int afterEvent, 
     String savePath) { 
    super(); 
    this.currMode = currMode; 
    this.interval = interval; 
    this.beforeEvent = beforeEvent; 
    this.afterEvent = afterEvent; 
    this.savePath = savePath; 
} 


@ElementList(entry = "mode", name = "availableModes") 
public ArrayList<Mode> getAvailableModes() { 
    return new ArrayList<Mode>(Arrays.asList(Mode.values())); 
} 

}

방법은 목록으로 열거의 모든 가능성을 반환합니다. 기본 생성자가 설정되어 있지 않으면 직렬화가 성공적으로 완료됩니다.

<camera> 
    <savePath>/images</savePath> 
    <currMode>CONTINIOUS</currMode> 
    <beforeEvent>5000</beforeEvent> 
    <interval>3000</interval> 
    <afterEvent>10000</afterEvent> 
    <availableModes> 
     <mode>CONTINIOUS</mode> 
     <mode>TRIGGERED</mode> 
     <mode>DEACTIVATED</mode> 
    </availableModes> 
</camera> 

그러나 기본 생성자는 deserialization에 필요합니다. 기본 생성자를 설정하면 직렬화 및 비 직렬화 프로세스 중에 다음 오류가 발생합니다.

Default constructor can not accept read only @org.simpleframework.xml.ElementList(data=false, empty=true, entry=mode, inline=false, name=availableModes, required=false, type=void) on method 'availableModes' in class Camera 

비 직렬화 중에는 anotated 메서드를 무시해야합니다. 직렬화 프로세스 중에 고려 될 요소를 정의 할 수 있습니까?이 요소는 직렬화 해제 프로세스 중에 무시됩니다.

답변

1

목록을 설정하는 방법이 있는지 확인해야합니다. 목록에 대한 설정자를 추가하거나 생성자 삽입을 사용할 수 있습니다. 이 요소에 "availableMode"

를가 발견 된 값을 넣어야 곳 XML 직렬화 처리가 필요한 속도로
public Camera(
      @Element(name="currMode") Mode currMode, 
      @Element(name="interval") int interval, 
      @Element(name="beforeEvent") int beforeEvent, 
      @Element(name="afterEvent") int afterEvent, 
      @Element(name="savePath") String savePath, 
      @ElementList(name="availableModes") List<Mode> availableModes) 
     { 
     this.currMode = currMode; 
     this.interval = interval; 
     this.beforeEvent = beforeEvent; 
     this.afterEvent = afterEvent; 
     this.savePath = savePath; 
     } 

는 알고