2012-01-17 18 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に、その対応するリストと日付で地図マーシャルにある。しかし、今日、私はマーシャルに(日付、リスト)のエントリの地図をしたい特定のケースに直面していました。マップは降順でソートされます。

これはMap for Adapter(MapAdapter、@Blaise 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は、java.util.Dateの標準XMLスキーマタイプ(date、time、dateTime)のマーシャリング/アンマーシャリングをサポートしています。 @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

関連する問題