2014-10-10 2 views
0

Я попытался вставить Base64 строку в объект в EnvelopedXmlObject:Xades4j и Base64 в EnvelopedXmlObject

DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
    dbFactory.setNamespaceAware(true);   
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
    Document document = dBuilder.newDocument(); 
    String generatedDocument = ...; 

    BASE64Encoder encoder = new BASE64Encoder(); 
    String generatedDocumentEncoded = encoder.encode(generatedDocument .getBytes("UTF-8")); 
    Node node1 = document.createTextNode(generatedDocumentEncoded); 
    DataObjectDesc dataObjectDesc = new EnvelopedXmlObject (node1, "plain/text", "http://www.w3.org/2000/09/xmldsig#base64"); 
    .... 

Когда я запускаю этот код в file.xml каждой строке Object закончился с "& # 13;" которые вызывают ошибку с расшифровкой текста

Когда я добавляю эти строки: Узел node1 = document.createTextNode (сгенерированный документ-документ);

saveFile("c:\\temp\\temp.xml", generatedDocumentEncoded); 
String stringFromFile = read("c:\\temp\\temp.xml"); 
node1.setTextContent(stringFromFile); 

то генерируемый файл хорошо - где моя ошибка? :)

ответ

0

Я думаю, что кодировщик Base64, который вы используете, будет выдавать выходной канал (помещать возврат каретки в строку). Можно заменить в строке вывода эти символы, как показано ниже:

generatedDocumentEncoded = generatedDocumentEncoded.replaceAll("(\r\n|\n)", ""); 
Node node1 = document.createTextNode(generatedDocumentEncoded); 

или заставить Ваш BASE64Encoder генерировать не фрагментированное выход. Я использую для этого Base64 класс от Apache:

byte[] bytes = generatedDocument.getBytes("UTF-8"); 
String generatedDocumentEncoded = new String(Base64.encodeBase64(bytes, false), "UTF8"); 
Смежные вопросы