2014-09-23 4 views
0

Я пытаюсь преобразовать 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();XML в строковом формате в org.w3c.dom.Document в Java

где строка 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

, что, в частности, является "пустой"? – jtahlborn

+0

также не конвертируйте строки xml в байты, чтобы разобрать, поскольку вы можете разбить кодировку символов. вместо этого используйте StringReader. – jtahlborn

ответ

2

BasicParserPool - это класс OpenSAML, и я не использовал OpenSAML, поэтому не могу сказать, почему он не работает.

Я могу дать вам простую альтернативу, которая работает для меня.

конвертировать строки в org.w3c.dom.Document используя javax.xml.parsers.DocumentBuilderFactory и javax.xml.parsers.DocumentBuilder:

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

где "XML" является строкой для преобразования. Есть некоторые исключения, которые я забыл.

В API здесь: DocumentBuilder API

Надеется, что это помогает.

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