2012-01-17 4 views
1

JAXB에서 저지가 어떻게 작동하는지 이해하기 시작합니다.저지 마샬지도 <Date,List>

@XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
public class MyClass{ 
    @XmlJavaTypeAdapter(MapAdapter.class) 
    private Map<Date,List<MyObject>> = new TreeMap<Date,List<MyObject>>(new DateCompareDesc()); 
} 

여기서의 목표는 항목을 MyObject의 해당 목록과 날짜지도 마샬이다 : 그러나 오늘 나는 마샬에 (날짜, 목록) 항목의지도를 원하는 특정 사건에 직면했다. 맵은 내림차순으로 정렬됩니다.

이 경우지도 용 어댑터 (MapAdapter, @Blise Doughan의 튜토리얼 http://blog.bdoughan.com/2010/07/xmladapter-jaxbs-secret-weapon.html)를 구현했습니다. 문제는 Date 키에 있습니다. 오류 : java.util.Date를 마샬링 할 수 없습니다. 뉴저지 내 TreeMap의 핵심으로 날짜를 marhsall 수 있도록 내가 @XmlJavaTypeAdapter (DateAdapter.class)를 추가 할 수 있습니다

public class DateAdapter extends XmlAdapter<String, Date> { 

@Override 
public Date unmarshal(String v) throws Exception { 
    //not implemented 
} 

@Override 
public String marshal(Date v) throws Exception { 
    return v.toString(); 
} 

} 

: 그래서 나는이 새로운 날짜 어댑터를 시도?

감사합니다.

답변

1

JAXB는 표준 XML 스키마 유형 인 날짜, 시간, 날짜 시간에 대한 java.util.Date의 마샬링/언 마샬링을 지원합니다. @XmlSchemaType 주석과 함께 사용되는 유형을 제어 할 수 있습니다. 날짜 정보가 표준 XML 스키마 유형 중 하나로 표시되어 있지 않은 경우

, 당신이 사용할 수있는 내가 비슷한 질문에 다음과 같은 대답을 사용하는 것과 유사한 XmlAdapter :

당신은을 사용해야하는 경우어프로치에서, @XmlJavaTypeAdapter 어노테이션은 Map의 항목을 나타내는 수정 된 객체의 Date 필드에 배치됩니다. 아래는 내 블로그를 기반으로 한 모습입니다 : http://blog.bdoughan.com/2010/07/xmladapter-jaxbs-secret-weapon.html.

import javax.xml.bind.annotation.XmlValue; 
import javax.xml.bind.annotation.XmlAttribute; 
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; 

public class MyMapEntryType { 

    @XmlAttribute 
    @XmlJavaTypeAdapter(DateAdapter.class) 
    public Date key; 

    public List<MyObject> value; 

} 
+0

안녕 Blaise, 답장을 보내 주셔서 감사합니다. 제 경우에는 제가지도 있습니다. 날짜와 목록은 적절한 주석을 추가 할 수있는 다른 클래스에서 가져 오지 않습니다. 그래서 그지도에 날짜와 목록을 Adapth에 주석으로 추가하는 것은 불가능합니까? – Lahniep

+0

@Lahniep -지도의 기본 표현을 사용하고 있습니까? 또한 날짜 정보는 어떻게 포맷됩니까? –

+0

예 .. TreeMap이고 날짜가 SimpleDateFormat ("yyyy-MM-dd HH : mm : ss")로 형식이 지정됩니다. – Lahniep