字符串格式的XML到Java中的org.w3c.dom.Document

时间:2014-09-23 15:48:16

标签: java dom saml

我正在尝试将字符串格式的samlResponse转换为org.w3c.dom.Document以验证它。但即使我使用了几种不同的方式,它也会产生无效 一种方法如下: 这里甚至inputStream都是null BasicParserPool bpp = new BasicParserPool(); bpp.setNamespaceAware(true); Document doc= bpp.parse(new ByteArrayInputStream(samlResponse.getBytes())); Element responseElement = doc.getDocumentElement();

字符串samlResponse如下所示(只是一个片段):

String samlResponse = "<saml2p:Response xmlns:saml2p=\"urn:oasis:names:tc:SAML:2.0:protocol\"  xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" Version=\"2.0\">   <saml2:Issuer etc etc

我想出错的任何想法?

2 个答案:

答案 0 :(得分:2)

BasicParserPool是一个OpenSAML类,我没有使用OpenSAML,所以我不能说它为什么不起作用。

我可以给你一个对我有用的简单替代方案。

我使用javax.xml.parsers.DocumentBuilderFactory和javax.xml.parsers.DocumentBuilder将Strings转换为org.w3c.dom.Document:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
Document result = dbf.newDocumentBuilder().parse(new ByteArrayInputStream(xml.getBytes()));

其中“xml”是要转换的String。我遗漏了一些异常情况。

API位于:DocumentBuilder API

希望这有帮助。

答案 1 :(得分:1)

希望以下代码有助于

import java.io.IOException;
import java.io.StringReader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

/**
 *
 * @author karthikeyan.s1
 */
public class Parser {

    public Document getDomElement(String xml) {
        Document doc = null;
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        dbf.setCoalescing(true);
        dbf.setNamespaceAware(true);
        try {

            DocumentBuilder db = dbf.newDocumentBuilder();
            InputSource is = new InputSource();
            is.setCharacterStream(new StringReader(xml));
            doc = db.parse(is);
        } catch (ParserConfigurationException e) {
            // Log.e("Error: ", e.getMessage());
            return null;
        } catch (SAXException e) {
            // Log.e("Error: ", e.getMessage());
            return null;
        } catch (IOException e) {
            //  Log.e("Error: ", e.getMessage());
            return null;
        }

        return doc;
    }
}