我正在尝试将字符串格式的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
我想出错的任何想法?
答案 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;
}
}