【问题标题】:Digester Parsing not adding bean to the main BeanDigester Parsing 未将 bean 添加到主 Bean
【发布时间】:2020-03-27 04:36:46
【问题描述】:

我正在使用 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
}

【问题讨论】:

    标签: java xml-parsing apache-commons-digester


    【解决方案1】:

    一些更改使它对我有用:

    • 不知道 new Headers() 是什么 - 我在里面塞了一个列表。
    • 看起来像是 kso 规则中的拼写错误 - 我将 headend 替换为 header
    • 重点是你需要一个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");
    

    HTH

    【讨论】:

      猜你喜欢
      • 2021-12-27
      • 1970-01-01
      • 2016-02-11
      • 2011-09-09
      • 2016-03-18
      • 2013-04-03
      • 1970-01-01
      • 1970-01-01
      • 2017-07-22
      相关资源
      最近更新 更多