Java Can';t在statxombuilder()类中调用受保护的方法

Java Can';t在statxombuilder()类中调用受保护的方法,java,dom,w3c,axiom,Java,Dom,W3c,Axiom,我想使用Axiom中的StatxonBuilder类创建w3c文档。有一种方法可以用来完成这项任务 OMElement documentElement = new StAXOMBuilder("resources/test.xml").getDocumentElement(); XMLStreamReader llomReader = documentElement.getXMLStreamReader(); OMFactory doomFactory = DOOMAbstra

我想使用Axiom中的StatxonBuilder类创建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(); 
createDocument方法作为受保护的方法在中可用。但是,当调用时,它会给出错误“类型statxonbuilder的方法createDocument()未定义”


如何解决此问题?

要能够调用类的
受保护的
方法,您的类应该是
statxombuilder的子类或位于同一个包中。

要能够调用类的
受保护的
方法,您的类应该是statxombuilder的子类或在同一个包中。

使用Axiom创建DOM
文档
实例的正确方法如下。首先,使用
OMAbstractFactory#getMetaFactory(String)
为支持DOM的Axiom实现获取
OMMetaFactory
。您可以通过向该方法传递
OMAbstractFactory.FEATURE\u DOM
来实现这一点。然后,您有两种可能性:

  • OMMetaFactory
    强制转换为
    doMetafactory
    ,并使用该接口定义的JAXP/DOM兼容方法
  • 使用Axiom API创建
    OMDocument
    并将其转换为
    文档
    。特别是,如果要解析现有文档,请使用
    OMXMLBuilderFactory
    中的方法之一,该方法接受
    OMMetaFactory
    OMFactory
    参数,以便Axiom将使用前面检索到的DOM兼容实现

  • 请注意,
    DOOMAbstractFactory
    已被弃用,
    StAXOMBuilder
    被视为一个内部实现类(正如包名
    org.apache.axiom.om.impl.builder
    所暗示的那样),不应直接使用。首先,使用
    OMAbstractFactory#getMetaFactory(String)
    为支持DOM的Axiom实现获取
    OMMetaFactory
    。您可以通过向该方法传递
    OMAbstractFactory.FEATURE\u DOM
    来实现这一点。然后,您有两种可能性:

  • OMMetaFactory
    强制转换为
    doMetafactory
    ,并使用该接口定义的JAXP/DOM兼容方法
  • 使用Axiom API创建
    OMDocument
    并将其转换为
    文档
    。特别是,如果要解析现有文档,请使用
    OMXMLBuilderFactory
    中的方法之一,该方法接受
    OMMetaFactory
    OMFactory
    参数,以便Axiom将使用前面检索到的DOM兼容实现

  • 请注意,
    DOOMAbstractFactory
    已被弃用,
    StAXOMBuilder
    被视为一个内部实现类(正如包名
    org.apache.axiom.om.impl.builder
    所暗示的那样),不应直接使用。多亏了安德烈亚斯

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

    下面的方法对我有效。多亏了安德烈亚斯

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

    我已经导入了这个类import org.apache.axiom.om.impl.builder.StatxonBuilder;你是在建议扩大这门课吗?因为导入时它不起作用,所以它与类不在同一个包中。扩展“StaxonBuilder”类的唯一方法。我已经扩展了,但它表明“StaxonBuilder类型的方法createDocument()不可见”,它可能不受保护,但是私有的。这是statxombuilder.java,createDocument()是私有的。另一位智者说。这就是困惑。因此,没有任何方法可以使用Axiom创建w3c文档;你是在建议扩大这门课吗?因为导入时它不起作用,所以它与类不在同一个包中。扩展“StaxonBuilder”类的唯一方法。我已经扩展了,但它表明“StaxonBuilder类型的方法createDocument()不可见”,它可能不受保护,但是私有的。这是statxombuilder.java,createDocument()是私有的。另一位智者说。这就是困惑。因此,没有任何方法可以使用Axiom创建w3c文档。请确保您没有将createDocument()键入为createDocument()。似乎甚至说createDocument是受保护的,而不是私有的,这也暗示了其他方面。在类StAXOMBuilder的实现中,createDocument方法被声明为private请确保您没有将createDocument()键入为createDocument(),甚至说createDocument是受保护的而非private也表明了另一种观点。在类StaxonBuilder的实现中,createDocument方法被声明为私有