1

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 を使用するために、ActionScript クラスを xml に変換します。

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

<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 である理由 また、解決策があれば教えてください。

4

3 に答える 3

1

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

于 2011-01-14T01:37:45.010 に答える
1

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);
    }

}

次に、User クラスの userDate プロパティでこの 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 の詳細については、次を参照してください。

アップデート

コメントに基づいて、これをパッケージ レベルの注釈として指定する場合は、モデル クラスと同じパッケージにpackage-infoというクラスを含める必要があります。このクラスは次のようになります。

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

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

JAXB メタデータを指定する代替手段が必要な場合は、EclipseLink JAXB (MOXy) の XML 表現拡張機能を使用できます。私はテクニカル リードです。

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

[-]CCYY-MM-DDThh:mm:ss[Z|(+|-)hh:mm]
于 2011-01-14T18:22:24.480 に答える
0

BlazeDS を使用して、AMF (シリアル化された AS3) とシリアル化された POJO の間の変換ジョブを処理することを検討したいだけかもしれません。

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

XML スキーマの dateTime 型の正しい形式は、yyyy-mm-ddThh:mm:ss です。

日付を次のように変更しても、まだエラーが表示されますか? 2006-02-01T08:00:00

Flex の場合は DateFormatter を使用できます。それ以外の場合は、AS3 側でゲッターを作成して、適切にフォーマットされた日付を返すことができます。weltraumpirat の答えも同様に有効なようです。

于 2011-01-14T01:44:18.240 に答える