1

Ich möchte Datum (ActionScript 3) in java.util.Date durch ein XML konvertieren.Wie konvertiert man Date (ActionScript 3) in java.util.Date über ein XML?

Schreiben Sie zuerst eine benutzerdefinierte ActionScript-Klasse wie diese.

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

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

} 

Zweitens, seine Instanz erstellen und jede Gruppe von Werten, so wandelt es Actionscript-Klasse in eine xml für die Verwendung von XMLEncoder seine Schemadatei mit.

Dies ist das Ergebnis-XML und sendet dieses XML an einen Server zur Verwendung eines HTTPService.

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

Schließlich In Server-Seite von Java, möchte ich so diese xml Java-Klasse konvertieren für die Verwendung von JAXB Unmarshaller.

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

} 

Aber als Ergebnis „Userdate“ Eigenschaft wird nur null sein ...

Warum „Userdate“ Eigenschaft ist null? Und, bitte sagen Sie mir Lösungen, wenn überhaupt.

Antwort

1

Die Textdarstellung Ihres Flash Date und java.util.Date sind wahrscheinlich nicht kompatibel. Da beide Datumsobjekte intern auf der Anzahl der Millisekunden seit dem 1. Januar 1970 basieren, würde ich die Verwendung von date.time in AS3 empfehlen, um den ganzzahligen Wert des Datums abzurufen und an Java zu senden. Verwenden Sie dann date.setTime(), um das korrekte Datum festzulegen.

+0

Geringfügige Korrektur: es ist Date.getTime() in AS3. – DoomGoober

+0

Nein. http://help.adobe.com/de_DE/FlashPlatform/reference/actionscript/3/Date.html#time – weltraumpirat

+0

Mein schlechtes. Wirklich entweder funktioniert: help.adobe.com/de_US/FlashPlatform/reference/actionscript/3/Date.html#getTime() (Obwohl Stack-Überlauf nicht richtig mit der URL umgehen kann.) – DoomGoober

0

Sie möchten vielleicht nur BlazeDS verwenden, um die Konvertierung zwischen AMF (serialized AS3) und serialisiertem POJO zu bewältigen.

Ich habe nicht viel Erfahrung mit JAXB zu unmarshall, aber fand dies auf den Interwebs.

Das richtige Format für ein XML-Schema-Datetime-Typ ist: yyyy-mm-ddThh: mm: ss

Wenn Sie Ihr Datum der folgenden ändern sich immer noch der Fehler sehen? 2006-02-01T08: 00: 00

Sie eine DateFormatter verwenden können, wenn Ihr in Flex sonst Sie einen Getter auf der AS3 Seite machen könnte die entsprechend formatierte Datum zurückzubringen. Die Antwort von weltraumprirat scheint gleichermaßen gültig zu sein.

1

Sie eine XMLAdapter verwenden können, um dies zu erreichen:

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

} 

Dann geben Sie diese XMLAdapter auf der Userdate Eigenschaft auf Ihrer Benutzerklasse:

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

} 

Weitere Informationen zu XMLAdapter sehen:

UPDATE

Basierend auf Ihre Kommentare, wenn Sie wollen Sie dies als eine Paketebene Anmerkung angeben müssen eine Klasse Paket-info in der gleichnamigen enthalten Paket als Ihre Modellklassen. Diese Klasse wird wie folgt aussehen:

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

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

Wenn Sie eine Alternative wollen bedeutet JAXB Metadaten geben Sie die XML-Darstellung Erweiterung in Eclipse JAXB (moxy) verwenden könnte, ich bin der technische Projektleiter:

Alternativ können Sie sicherstellen, dass das Datum, die JAXB geben wird in folgendem Format ist (xsd: datetime):

[-]CCYY-MM-DDThh:mm:ss[Z|(+|-)hh:mm] 
+0

Danke Blaise! Aber ich möchte dies ohne Anmerkungen in Java-Klassen erreichen. Und ich weiß @ XmlJavaTypeAdapters annotaion kann in package-info.java Datei setzen, aber ich weiß nicht, wie man package-info.java Datei verwendet ... – Take

+0

@Take - Ich habe meine Antwort mit Anweisungen zur Verwendung von Paket-Informationen aktualisiert . –

+0

@Blaise, kann @ XmlJavaTypeAdapter ohne eine @ XmlRootElement-Modell/XML-Definition arbeiten? Wir haben eine Java-Schnittstelle, die einen Web Service definiert. Ein WSDL-Vertrag wird über CXF/ant generiert (3rd-Party kodiert einen Server von diesem). Die Schnittstelle enthält eine @ XmlJavaTypeAdapter-Methode, die einen MAP zurückgibt, der von einem Adapter basierend auf der WSMAP * -Lösung unter @ http://goo.gl/wlG6F entpackt wurde. Ich habe sowohl direkte Annotation als auch Paket-Info.java ausprobiert, aber ich bekomme einen "org.apache.cxf.interceptor.Fault: Unmarshalling Error: Unerwartetes Element (uri:" ", local:" return ") und meine 'WSMapAdapter' wird nicht aufgerufen. Ideen? –