首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >包含异常org.xml.sax.SAXParseException的捆绑包: prolog中不允许包含内容

包含异常org.xml.sax.SAXParseException的捆绑包: prolog中不允许包含内容
EN

Stack Overflow用户
提问于 2013-01-09 06:30:44
回答 1查看 1.7K关注 0票数 0

我已经在FuseESB中部署了一个包,它将记录传入的soap请求。我使用Java DSL作为

代码语言:javascript
复制
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信息。该方法如下:

代码语言:javascript
复制
 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,它等同于真正的soap请求,那么Fuse会毫无例外地安装bundle。

在接受SOAP请求之前,Fuse如何抛出异常?有人能告诉我解决方案吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-09 06:39:58

异常说明prolog中有内容。这意味着您的DSL可能会在xml文档之前写入一些字节。验证流的顶部是否没有任何内容。

还可以查看:Content is not allowed in Prolog SAXParserException

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14225182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档