Пакет с исключением org.xml.sax.SAXParseException: содержимое не разрешено в прологе

Я развернул пакет в FuseESB, который будет регистрировать входящий запрос на мыло. Я использовал Java DSL как

from("cxf:bean:comprovaWS?dataFormat=MESSAGE").setHeader("SOAPAction", new ConstantExpression("http://www.about.com")).streamCaching()
            .choice()
            .when(xPathBuilder).log("Request is:"+getParsedXPath(simple("${body}").getText().trim(),"//item[2]/stringValue/text()", false))
            .to("callService")
            .otherwise().log("Error");

Когда я использую здесь метод getParsedXPath, Fuse ESB показывает исключение как org.xml.sax.SAXParseException: Content is not allowed in prolog.

Я использую вышеупомянутый метод для получения информации CDATA. Метод выглядит следующим образом:

 public String getParsedXPath(String xmlStringToParse, String xPathExpression, boolean isNamespaceAware) {

    String parsedXMLPath="";
    try {
        DocumentBuilderFactory xmlFact =
                DocumentBuilderFactory.newInstance();

        DocumentBuilder builder = xmlFact.newDocumentBuilder();
        Document doc = builder.parse(new java.io.ByteArrayInputStream(xmlStringToParse.getBytes()));


        XPath xpath = XPathFactory.newInstance().newXPath();

        xmlFact.setNamespaceAware(isNamespaceAware);

        if(isNamespaceAware){

        xpath.setNamespaceContext(new NamespaceContext() {
    public String getNamespaceURI(String prefix) {
    // we know there's only one namespace uri, just return it!
    return "http://www.about.com";
    }

    // this is not used by XPath
    public String getPrefix(String namespaceURI) {
    System.out.println("getPrefix: " + namespaceURI);
    return null;
    }

    // this is not used by XPath
    public Iterator getPrefixes(String namespaceURI) {
    System.out.println("getPrefixes: " + namespaceURI);
    return null;
    }
});
        }



        NodeList nodes = (NodeList) xpath.evaluate(xPathExpression, doc, XPathConstants.NODESET);
    if (nodes.getLength() == 0) {
    parsedXMLPath="<error>Wrong xPath value: "+xPathExpression+"</error>";
    }
    else {

            parsedXMLPath = nodes.item(0).getNodeValue();
    }

    } catch (Exception e) {
        e.printStackTrace();
    }
    return parsedXMLPath;
}

Если я использую некоторый демонстрационный XML в самом коде, который эквивалентен реальному запросу мыла, Fuse устанавливает пакет без каких-либо исключений.

Как Fuse может генерировать исключение до принятия запроса SOAP? Может ли кто-нибудь сказать мне решение?


person Ashish Nijai    schedule 08.01.2013    source источник


Ответы (1)


Исключение говорит, что в прологе есть содержимое. Это означает, что ваш DSL может записать некоторый байт перед документом xml. Убедитесь, что в верхней части потока ничего нет.

Проверьте также: Контент не разрешен в Prolog SAXParserException

person Luigi R. Viggiano    schedule 08.01.2013
comment
Р. Виджинао, я нашел ошибку в XML. Я обрабатывал файл с кодировкой Base64 как строку в XML, содержащую символы ‹/. Из-за этих символов сбой парсера. Спасибо еще раз... - person Ashish Nijai; 21.01.2013