1

ActionScript 3 で、xml から ActionScript クラスにデコードする方法を教えてください。

XmlEncoder を使用して、ActionScript クラスから xml にエンコードできました。

その時に使ったxmlスキーマがこれです。

[スキーマ1.xsd]

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:complexType name="user">
    <xs:sequence>
      <xs:element name="id" type="xs:string" minOccurs="0"/>
      <xs:element name="password" type="xs:string" minOccurs="0"/>
      <xs:element name="userDate" type="xs:dateTime" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

このスキーマは Ant(schemagen) タスクによって POJO(User.java) を使用してアノテーションなしで作成されます。

しかし、このスキーマと XmlDecoder を使用して xml から ActionScript クラスにデコードすることはできませんでした。(正確には、Object 型から User 型へのキャストはできません。)

@XmlRootElement や @XmlType のようなアノテーションをJavaクラスに入れたくありません。

ただし、ActionScript のクライアント側でマーシャリングおよびアンマーシャリングを行うには、スキーマ ファイルが必要です。

解決策や具体例を教えてください...

4

1 に答える 1

0

次のクラス:

import java.util.Date;

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

    public Date getUserDate() {
        return userDate;
    }

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

}

次の XML の非整列化に使用できます。

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <id>123</id>
   <password>foo</password>
   <userDate>2011-01-07T09:15:00</userDate>
</root>

User クラスで注釈を必要とせずに、次のコードを使用します。

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.Unmarshaller;
import javax.xml.transform.stream.StreamSource;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(User.class);

        StreamSource source = new StreamSource("input.xml");
        Unmarshaller unmarshaller = jc.createUnmarshaller();
        JAXBElement<User> root = unmarshaller.unmarshal(source, User.class);

        User user = root.getValue();
        System.out.println(user.getId());
        System.out.println(user.getPassword());
        System.out.println(user.getUserDate());
    }
}
于 2011-01-07T14:23:15.427 に答える