1

我正在使用 Apache Digester 解析如下所示的 XML,并且我编写了下面的代码来解析它。解析似乎没问题(我在 KSO 属性的 setter 方法上添加了调试点),但是 KSO 代码的对象没有添加到我的 Header bean 中。我需要做什么才能将 Kso bean 添加到 Header bean 中?

示例 XML -

 <lineups country="USA">
 <header headerId="IN67397">
  <name>Great Western</name>
  <kso ksoId="17758">GW Media</kso>
 </header>
 </lineups>

以下是我在消化器中创建的内容:

Digester digester = new Digester();
digester.setValidating(false);
digester.push(new Headers()); // There will be multiple
digester.addObjectCreate("gn/lineups/header",
        "com.sample.model.header.Header");
digester.addSetProperties("gn/lineups/header"); // Id
digester.addSetProperties("gn/lineups/header/name");
digester.addCallMethod("gn/lineups/header/name", "setName", 0);

// KSO Code
digester.addObjectCreate("gn/lineups/headend/kso",
        "com.sample.model.header.Kso");
digester.addSetProperties("gn/lineups/headend/kso"); //sets the ksoId
digester.addCallMethod("gn/lineups/headend/kso", "setName", 0);



public class Header
{

    private String headerId;

    private String name;

    private Kso kso;

        // getter setters are in place

}

Kso类 -

public class Kso

{


private String ksoId;

    private String name;

    // getter setters are in place
}
4

1 回答 1

0

几个改变使它对我有用:

  • 不知道是什么new Headers()——我在里面塞了一个清单。
  • 看起来像是 kso 规则中的错字 - 我headendheader.
  • 要点是您需要setNextRule将新创建的对象添加到其父对象。

留下:

Digester digester = new Digester();
digester.setValidating(false);
digester.push(new ArrayList<Header>()); // There will be multiple
digester.addObjectCreate("gn/lineups/header", Header.class);
digester.addSetProperties("gn/lineups/header"); // Id
digester.addSetProperties("gn/lineups/header/name");
digester.addCallMethod("gn/lineups/header/name", "setName", 0);
digester.addSetNext("gn/lineups/header", "add");

digester.addObjectCreate("gn/lineups/header/kso", Kso.class);
digester.addSetProperties("gn/lineups/header/kso"); //sets the ksoId
digester.addCallMethod("gn/lineups/header/kso", "setName", 0);
digester.addSetNext("gn/lineups/header/kso", "setKso");

高温高压

于 2020-04-13T01:01:29.740 回答