2011-09-07 50 views
3

ジョブオブジェクトをマーシャリングするのに問題はありませんが、私がmarhsalにJobの配列をしようとすると、不正なXMLが取得されます。私は何かのようなラッピング要素を作成する必要があるようです。私はどのように私はこの1つの助けを愛するか分からない。JAXBで配列を整列する

のMyClass:

@XmlRootElement(name = "job") 
class Job{ 
    private String username; 
    private Calendar previousFireTime; 
} 

使用法:

Job[] jobs = service.getJobs(...); 
    StringWriter sw = new StringWriter(); 
    for (int i=0 ; i<jobs.length ; i++) 
     RESTUtils.getMarshaller(Job.class).marshal(jobs[i], sw); 

結果:JAXBはのpluralisでXMLファイルを生成しない場合であっても

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<job> 
    <nextFireTime>2011-09-06T18:45:00-07:00</nextFireTime> 
    <username>me</username> 
</job> 
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<job> 
    <nextFireTime>2011-09-06T18:48:00-07:00</nextFireTime> 
    <username>me</username> 
</job> 

答えて

3

無効なXMLファイルであります<?xml version = "1.0" encoding = "UTF-8" standalone = "yes"?>まだいくつかのジョブ要素があります1つのルート要素のみが許可されているため、有効ではありません。

2つの解決策があります。

  1. 解決策:ジョブ配列を保持するJAXB beanジョブ(新しいルート要素)を作成し、ボーナスとしてXMLを簡単にアンマーシャリングすることができます。
  2. <?xml ...> <ジョブ>ループの前にStringWriterに、ループの後に</jobs>を追加し、残りの<?xml行を除外します。
関連する問題