2013-09-22 4 views
1

Я хочу создать документ w3c с использованием класса StAXOMBuilder в Axiom. И есть метод, который можно использовать для достижения этой задачи.Невозможно вызвать защищенный метод в классе 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 защищен не private 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 объявляется приватным –

ответ

1

Правильный способ создания экземпляра DOM Document с аксиомой заключается в следующем. Сначала используйте OMAbstractFactory#getMetaFactory(String), чтобы получить OMMetaFactory для реализации Axiom, которая поддерживает DOM. Вы делаете это, передавая этому методу OMAbstractFactory.FEATURE_DOM. то у вас есть два варианта:

  1. В ролях OMMetaFactory к DOMMetaFactory и использовать JAXP/DOM совместимые методы, определенные этим интерфейсом.
  2. Используйте API-интерфейс Axiom для создания OMDocument и введите его в Document. В частности, если вы хотите проанализировать существующий документ, используйте один из методов в OMXMLBuilderFactory, который принимает аргумент OMMetaFactory или OMFactory, так что Axiom будет использовать реализованную ранее реализацию DOM-совместимости.

DOOMAbstractFactory Обратите внимание, что осуждается и что StAXOMBuilder считается внутренним классом реализации (как имя пакета org.apache.axiom.om.impl.builder подразумевает), что не следует использовать напрямую.

1

Чтобы иметь возможность использовать метод класса protected, ваш класс должен либо подкласса StAXOMBuilder, либо быть в одном пакете.

+0

Я импортировал этот класс import org.apache.axiom.om.impl.builder.StAXOMBuilder; Вы предлагаете расширить этот класс? Becuase это не работает слишком –

+0

Вы импортируете его, это не в том же пакете с вашим классом. Единственный способ расширить класс «StAXOMBuilder». –

+0

Я продлил, но он еще не сказал, что «Метод createDocument() из типа StAXOMBuilder не отображается» –

2

Следующий метод работал для меня. Спасибо Андреасу.

 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(); 
Смежные вопросы