无法在StAXOMBuilder()类中调用受保护的方法

时间:2013-09-22 05:45:52

标签: java dom w3c axiom

我想在Axiom中使用StAXOMBuilder类创建w3c Document。并且有一种方法可用于实现该任务。

   OMElement documentElement = new StAXOMBuilder("resources/test.xml").getDocumentElement();
   XMLStreamReader llomReader = documentElement.getXMLStreamReader();
   OMFactory doomFactory = DOOMAbstractFactory.getOMFactory();
   StAXOMBuilder doomBuilder = new StAXOMBuilder(doomFactory, llomReader);

  Document doc = doomBuilder.createDocument(); 

createDocument方法在STAXOMBuilder Class中可用作受保护的方法。但是在调用它时会给出错误“方法createDocument()未定义类型StAXOMBuilder”

如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

以下方法适合我。感谢Andreas。

     OMMetaFactory omMetaFactory = OMAbstractFactory.getMetaFactory(OMAbstractFactory.FEATURE_DOM);
     OMFactory omFac = omMetaFactory.getOMFactory();
     OMXMLParserWrapper wrapper = OMXMLBuilderFactory.createOMBuilder(omFac, new FileInputStream("resources/test.xml")) ;
     Document doc = (Document) wrapper.getDocument();

答案 1 :(得分:1)

为了能够调用类的protected方法,您的类应该是StAXOMBuilder的子类或者在同一个包中。

答案 2 :(得分:1)

使用Axiom创建DOM Document实例的正确方法如下。首先,使用OMAbstractFactory#getMetaFactory(String)为支持DOM的Axiom实现获取OMMetaFactory。您可以通过将OMAbstractFactory.FEATURE_DOM传递给该方法来实现。然后你有两种可能性:

  1. OMMetaFactory转换为DOMMetaFactory并使用该接口定义的JAXP / DOM兼容方法。
  2. 使用Axiom API创建OMDocument并将其投射到Document。特别是,如果要解析现有文档,请使用OMXMLBuilderFactory中带有OMMetaFactoryOMFactory参数的方法之一,以便Axiom使用先前检索到的DOM兼容实现。
  3. 请注意,DOOMAbstractFactory已被弃用,StAXOMBuilder被视为内部实现类(如包名org.apache.axiom.om.impl.builder所暗示的那样),不应直接使用。