1

Date(ActionScript 3)をxmlでjava.util.Dateに変換したいと考えています。日付(ActionScript 3)をxmlを使用してjava.util.Dateに変換するには?

まず、このようなユーザー定義のActionScriptクラスを作成します。

public class User 
{ 
    public function User() 
    { 
     userDate = new Date(); 
    } 

    public var id:String = null; 
    public var password:String = null; 
    public var userDate:Date = null; 

} 

第二に、そのインスタンスを作成し、そのスキーマ・ファイルを有するXMLEncoderを使用するためのXMLにActionScriptクラスを変換するので、それぞれの値を設定します。

これはxmlの結果であり、このxmlをHTTPServiceを使用するサーバーに送信します。

<User> 
    <id>system</id> 
    <password>manager</password> 
    <userDate>Fri Jan 14 09:02:17 GMT+0900 2011</userDate> 
</User> 

最後に、Javaのサーバー側で、JAXB Unmarshallerを使用するために、このxmlをJavaクラスに変換したいと考えています。

public class User { 

    public User() { 
    } 

    private String id; 
    private String password; 
    private Date userDate; 


    public void setId(String id) { 
     this.id = id; 
    } 
    public void setPassword(String password) { 
     this.password = password; 
    } 
    public void setUserDate(Date userDate) { 
     this.userDate = userDate; 
    } 
    public String getId() { 
     return id; 
    } 
    public String getPassword() { 
     return password; 
    } 
    public Date getUserDate() { 
     return userDate; 
    } 

} 

しかし、 "UserDate" プロパティがnullであるなぜ結果として、 "UserDate" プロパティが唯一の... nullにする

が起こっていますか? そして、解決策があれば教えてください。

答えて

1

フラッシュDatejava.util.Dateのテキスト表現は、おそらく互換性がありません。両方の日付オブジェクトは1970年1月1日以降のミリ秒数に基づいているため、AS3でdate.timeを使用して日付の整数値を取得し、Javaに送信してからdate.setTime()を使用して正しい日付を設定することをおすすめします。

+0

マイナーな修正:AS3ではDate.getTime()です。 – DoomGoober

+0

Nope。 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Date.html#time – weltraumpirat

+0

悪い実際にはどちらかが動作します:help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Date.html#getTime()(スタックオーバーフローがURLを正しく処理できません) – DoomGoober

0

AMF(シリアライズされたAS3)とシリアライズされたPOJOの間の変換作業を処理するために、BlazeDSを使用してみることができます。

アンマーシャルにJAXBを使用した経験はあまりありませんが、これはインターウェブ上で見つけられました。

XMLスキーマのdateTimeタイプの正しい形式は次のとおりです。 YYYY-MM-DD T HH:mm:ssの

あなたはまだエラーを参照してくださいか、次のあなたの日付を変更した場合は? 2006-02-01T08:00:00

Flexでは、DateFormatterを使用できます。それ以外の場合は、適切にフォーマットされた日付を返すためにAS3側でゲッターを作成できます。 weltraumpiratの答えは同じように見える。あなたのUserクラスのuserDateプロパティにこのXmlAdapterの指定次に

package example; 

import java.text.SimpleDateFormat; 
import java.util.Date; 

import javax.xml.bind.annotation.adapters.XmlAdapter; 

public class DateAdapter extends XmlAdapter<String, Date> { 

    private SimpleDateFormat format = new SimpleDateFormat("EEE MMM d HH:mm:ss zZ yyyy"); 

    @Override 
    public Date unmarshal(String v) throws Exception { 
     System.out.println(format.parse(v)); 
     return format.parse(v); 
    } 

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

} 

1

あなたはこれを実現するためにXmlAdapterのを使用することができます

package example; 

import java.util.Date;  
import javax.xml.bind.annotation.XmlRootElement; 
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; 

@XmlRootElement(name="User") 
public class User { 

    private String id; 
    private String password; 
    private Date userDate; 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public String getPassword() { 
     return password; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    @XmlJavaTypeAdapter(DateAdapter.class) 
    public Date getUserDate() { 
     return userDate; 
    } 

    public void setUserDate(Date userDate) { 
     this.userDate = userDate; 
    } 

} 

XmlAdapterのの詳細については以下を参照してください

UPDATE

あなたは、パッケージレベルの注釈としてこれを指定する場合は、あなたの意見をもとに、あなたは同じでパッケージ情報というクラスを含める必要がパッケージをモデルクラスとして使用します。このクラスは、次のようになります。

@XmlJavaTypeAdapter(value=DateAdapter.class, type=Date.class) 
package example; 

import java.util.Date; 
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; 

したい場合は、代替は、あなたがのEclipseLink JAXB(MOXY)でのXML表現の拡張機能を使用することができJAXBのメタデータを指定することを意味し、私はハイテクリードだ:

あるいは、JAXBに渡された日付は、次の形式で(:dateTimeのXSD)であることを確認できました

+0

Blaiseありがとうございました!しかし、私はJavaクラスで注釈を付けずにこれを達成したいと思います。そして、@ XmlJavaTypeAdaptersアノテーションはpackage-info.javaファイルに置くことができますが、package-info.javaファイルの使い方はわかりません。 – Take

+0

@Take - パッケージ情報。 –

+0

@Blaise、@ XmlJavaTypeAdapterは@ XmlRootElementモデル/ xml定義なしで動作できますか?私たちには、Webサービスを定義するJavaインタフェースがあります。 CXF/antを介してWSDL「契約」が生成されます(サードパーティはこれからサーバーをコードします)。このインターフェイスには、MAPを返す@ XmlJavaTypeAdapterメソッドが含まれています。@ http://goo.gl/wlG6FにあるWSMAP *ソリューションに基づいてアダプタによってアンマーシャリングされます。私は直接注釈とpackage-info.javaの両方を試しましたが、 'org.apache.cxf.interceptor.Fault:Unmarshalling Error:予期しない要素(uri: ""、local: "return")とmy 'WSMapAdapter'が呼び出されていません。アイデア? –

関連する問題