Actionscript 3 如何通过xml将日期(ActionScript 3)转换为java.util.Date?
我想通过xml将Date(ActionScript 3)转换为java.util.Date 首先,像这样编写一个用户定义的ActionScript类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
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的更多信息,请参阅:
@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表示扩展,我是技术负责人:
谢谢布莱斯!但是我想在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]