Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 如何通过xml将日期(ActionScript 3)转换为java.util.Date?_Actionscript 3_Xml Serialization_Jaxb_Marshalling_Unmarshalling - Fatal编程技术网

Actionscript 3 如何通过xml将日期(ActionScript 3)转换为java.util.Date?

Actionscript 3 如何通过xml将日期(ActionScript 3)转换为java.util.Date?,actionscript-3,xml-serialization,jaxb,marshalling,unmarshalling,Actionscript 3,Xml Serialization,Jaxb,Marshalling,Unmarshalling,我想通过xml将Date(ActionScript 3)转换为java.util.Date 首先,像这样编写一个用户定义的ActionScript类 public class User { public function User() { userDate = new Date(); } public var id:String = null; public var password:String = null; public v

我想通过xml将Date(ActionScript 3)转换为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;

}
其次,创建它的实例并设置每个值,这样它就可以将ActionScript类转换为xml,以便使用具有其模式文件的XMLEncoder

这是结果xml,并将此xml发送到服务器以使用HTTPService

<User>
  <id>system</id>
  <password>manager</password>
  <userDate>Fri Jan 14 09:02:17 GMT+0900 2011</userDate>
</User>
但是,结果是,“UserDate”属性只能为null

为什么“UserDate”属性为空?
如果有解决方案,请告诉我。

您的Flash
Date
java.util.Date
的文本表示可能不兼容。由于这两个日期对象在内部都基于1970年1月1日以来的毫秒数,因此我建议在AS3中使用
date.time
获取日期的整数值,将其发送到Java,然后使用
date.setTime()
设置正确的日期。

您可能只想研究使用BlazeDS处理AMF(序列化AS3)和序列化POJO之间的转换作业

我没有太多使用JAXB解组的经验,但在互联网站上发现了这一点

XML架构日期时间类型的正确格式为: yyyy-mm ddThh:mm:ss

如果您将日期更改为以下日期,您是否仍然看到错误? 2006-02-01T08:00:00


如果您在Flex中使用的是DateFormatter,那么您可以使用它,否则您可以在AS3端创建一个getter来返回适当格式的日期。weltraumpirat的回答似乎同样有效。

您可以使用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);
    }

}
有关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):


谢谢布莱斯!但是我想在Java类中不使用任何注释来完成这一点。我知道@XmlJavaTypeAdapters注释可以放在package-info.java文件中,但我不知道如何使用package-info.java文件…@Take-我已经用关于使用package-info的说明更新了我的答案。@Blaise,@XmlJavaTypeAdapter在没有@XmlRootElement模型/xml定义的情况下可以工作吗?我们有一个定义Web服务的Java接口。通过CXF/ant生成WSDL“契约”(第三方在此为服务器编码)。该接口包含一个@XmlJavaTypeAdapter方法,该方法返回一个映射,该映射由适配器根据找到的WSMAP*解决方案解组@。我尝试了直接注释和package-info.java,但得到了一个“org.apache.cxf.interceptor.Fault:解组错误:意外元素(uri:,local:“return”)”,并且没有调用我的“WSMapAdapter”。想法?没有。我的错。实际上这两种方法都有效:help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Date.html#getTime()(尽管堆栈溢出无法正确处理URL)
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;
    }

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

import java.util.Date;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
[-]CCYY-MM-DDThh:mm:ss[Z|(+|-)hh:mm]