繁体   English   中英

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

[英]Can't invoke the protected method in StAXOMBuilder() class

我想使用Axiom中的StAXOMBuilder类创建w3c文档。 有一种方法可用于完成该任务。

   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(); 

STAXOMBuilder类中可以使用createDocument方法作为受保护的方法。 但是,当调用它时会出现错误“对于类型为StAXOMBuilder的方法createDocument()未定义”

如何解决这个问题?

以下方法对我有用。 感谢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();

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

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

  1. OMMetaFactoryDOMMetaFactory并使用该接口定义的JAXP / DOM兼容方法。
  2. 使用Axiom API创建OMDocument并将其转换为Document 特别是,如果要解析现有文档,请使用OMXMLBuilderFactory中带有OMMetaFactoryOMFactory参数的方法之一,以便Axiom将使用之前检索的DOM兼容实现。

请注意,不赞成使用DOOMAbstractFactory ,并且StAXOMBuilderStAXOMBuilder视为内部实现类(如包名称org.apache.axiom.om.impl.builder所暗示),不应直接使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM