1

私は次のXML形式を持っています:

 <repositories>
     <set>
       <id>1</id>
       <name>First</name>
       <spec>data</spec>
     </set>
    <set>
       <id>2</id>
       <name>INFO</name>
       <spec>main</spec>
    </set>
      .
      .
 </repositories>

次のpackage-info.javaを作成します

 @javax.xml.bind.annotation.XmlSchema (
 elementFormDefault=XmlNsForm.QUALIFIED,
 xmlns = {}
 )

package website.model;

import javax.xml.bind.annotation.XmlNsForm;

次のクラスを追加します。

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Repositories {

@XmlElement
private ListofRepositories repositories;

public ListofRepositories getRepositories() {
    return repositories;
}

public void setRepositories(ListofRepositories repositories) {
    this.repositories = repositories;
}

}

セットを包む

@XmlAccessorType(XmlAccessType.FIELD)
public class ListofRepositories {

private List<Sets> set;

public List<Sets> getSet() {
    return set;
}

public void setSet(List<Sets> set) {
    this.set = set;
}

}

そしてデータ:

@XmlAccessorType(XmlAccessType.FIELD)
public class Sets {

private Long id;
private String name;
private String spec;

//get set

}

なぜこれが機能しないのかわかりません。応答は常にnullです。私はJavaとJAXBアノテーションを使用して同様のプロセスを実装しましたが、この種の問題は発生しませんでした。誰かが何が間違っているのか知っていますか、どうすればそれを修正できますか?

4

2 に答える 2

2

上記のxmlの場合、次のクラス構造が必要です。

@XmlRootElement(name="repositories")
@XmlAccessorType(XmlAccessType.FIELD)
public class Repositories {

@XmlElement
private List<Sets> set;

//getter and setter

}

@XmlAccessorType(XmlAccessType.FIELD)
public class Sets {

private Long id;
private String name;
private String spec;

//getter and setter

}

ただし、クラス構造に応じて、次のxmlを取得します。

<Repositories>
  <repositories>
    <set>
      <id></id>
      <name></name>
      <spec></spec>
    </set>
    <set>
      <id></id>
      <name></name>
      <spec></spec>
    </set>
    .
    .
    .
  </repositories>
</Repositories>
于 2012-07-15T18:26:34.700 に答える
1

JAXBを使用すると、xsdファイルからこれらのクラスを生成することもできます-受信したxmlをxsdと照合します(これにより、受け入れられない理由がわかります)

于 2012-07-15T18:16:30.207 に答える