2013-09-22 62 views
1

我想在Axiom中使用StAXOMBuilder類創建w3c文檔。有一種方法可以用來實現這一任務。無法在StAXOMBuilder()類中調用受保護的方法

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」

如何解決這個問題?

+0

要確保你不會打字createDocument()作爲creatDocument() –

+0

這似乎是,即使http://people.apache.org/~veithen/axiom/apidocs/org/apache/axiom/ om/impl/builder/StAXOMBuilder.html 表示createDocument受保護而不是私有http://svn.wso2.org/repos/wso2/branches/carbon/3.0.0/dependencies/axiom/modules/axiom-api/ src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java 建議其他方式。在StAXOMBuilder類的實現中createDocument方法聲明爲private –

回答

1

使用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已被棄用和StAXOMBuilder被認爲是一個內部實現類(作爲包名org.apache.axiom.om.impl.builder暗示),其不應該被直接使用。

1

爲了能夠調用protected類的方法,您的類應該繼承StAXOMBuilder的子類或者位於相同的包中。

+0

我導入了那個類import org.apache.axiom.om.impl.builder.StAXOMBuilder; 你是否建議擴展該類?因爲它不起作用 –

+0

您正在導入它,它與您的課程不在同一個包中。擴展'StAXOMBuilder'類的唯一方法。 –

+0

我已經擴展,但它卻告訴「StAXOMBuilder類型的createDocument()方法不可見」 –

2

以下方法適用於我。感謝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();