0

simpleframeworkを使用してxmlファイルをJavaオブジェクトに変換しています。XML の内部ノードが変更されるため、ジェネリックを使用しています。しかし、単純なフレームワークは変換中にエラーをスローします。ここに私のサンプルコードがあります:

@Root(name = "searchresult", strict = false)
public class ResponseVO<T>
{
    @ElementList(entry = "document", inline = true)
    public List<T> elementVOList = new ArrayList<T>();

    public List<T>  getElementsVOList()
    {
        return elementVOList;
    }

    public void setElementsVOList(List<T>list)
    {
        elementVOList = list;
    }
}

ResponseVO は、以下のように他のさまざまな VO のコンテナです。

@Root(name = "document", strict = false)
public class Projects_Display_VO
{

    @Element(name = "projectname")
    private String projectName;


    @Attribute(name = "id")
    private int tmpid;

    public int getTmpid()
    {
        return tmpid;
    }

    public void setTmpid(int tmpid)
    {
        this.tmpid = tmpid;
    }
    /**
     * ProjectId
     */

    @Element(name = "projectid")
    private String projectID;


    public String getProjectName()
    {
        return projectName;
    }

    public void setProjectName(String projectName)
    {
        this.projectName = projectName;
    }

    public int getProjectID()
    {
        return Integer.parseInt(projectID);
    }

    public void setProjectID(String projectID)
    {
        this.projectID = projectID;
    }
}

XML ファイルは次のとおりです。

<searchresult>
  <query>id:(PROJ2 PROJ6)</query>
  <document id="0">
    <projectid>2</projectid>
    <projectname>Redundant Demo Project</projectname>
    <doctype>Projects</doctype>
    <summary>||Demo Project</summary>
    <title>Redundant Demo Project</title>
  </document>
  <document id="1">
    <projectid>6</projectid>
    <projectname>Redundant Demo Project2</projectname>
    <doctype>Projects</doctype>
    <summary>||Main terminal links.</summary>
    <title>Terminal 5 Project</title>
  </document>  
</searchresult>

変換のコードは次のとおりです。

ResponseVO<Projects_Display_VO> resp = (ResponseVO<Projects_Display_VO>)  SerializationUtil.deserialize(ResponseVO.class, reader);

ここでは、simpleframework のシリアライザーを使用しています。しかし、それは次のエラーをスローします

Exception::Attribute 'id' does not have a match in class java.lang.Object at line 5
org.simpleframework.xml.core.AttributeException: Attribute 'id' does not have a match in   class java.lang.Object at line 5
at org.simpleframework.xml.core.Composite.readAttribute(Composite.java:555)
at org.simpleframework.xml.core.Composite.readAttributes(Composite.java:474)
at org.simpleframework.xml.core.Composite.readSection(Composite.java:387)

ここで何が問題なのかわかりません.Aジェネリックなしで問題なく動作します。前もって感謝します

4

1 に答える 1

0

これは消去が原因で、T は実行時に使用できません。Java では許可されていません。

于 2013-04-24T08:37:18.070 に答える