Невозможно проанализировать содержимое (ожидается XML) после экспорта в .jar - PullRequest
0 голосов
/ 09 мая 2019

В своей программе я загружаю с сервера файл XML в виде строки и подписываю его сертификатом. Все отлично работает, когда я запускаю программу из Eclipse. Но когда я экспортирую его в файл .jar, возникает следующая ошибка. Где мне искать проблему?

eu.europa.esig.dss.DSSException: Unable to parse content (XML expected)
    at eu.europa.esig.dss.DomUtils.buildDOM(DomUtils.java:242)
    at eu.europa.esig.dss.DomUtils.buildDOM(DomUtils.java:209)
    at eu.europa.esig.dss.xades.signature.EnvelopedSignatureBuilder.buildRootDocumentDom(EnvelopedSignatureBuilder.java:75)
    at eu.europa.esig.dss.xades.signature.XAdESSignatureBuilder.build(XAdESSignatureBuilder.java:179)
    at eu.europa.esig.dss.xades.signature.XAdESLevelBaselineB.getDataToSign(XAdESLevelBaselineB.java:72)
    at eu.europa.esig.dss.xades.signature.XAdESService.getDataToSign(XAdESService.java:92)
    at pl.btech.signer.Signer.signFilesWithMSCAPI(Signer.java:116)
    at pl.btech.signer.Signer.signXML(Signer.java:58)
    at pl.btech.signer.GuiController$1.run(GuiController.java:124)
Caused by: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence.
    at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.skipChar(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
    at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
    at eu.europa.esig.dss.DomUtils.buildDOM(DomUtils.java:240)
    ... 8 more

EDIT: Это фрагмент кода, где происходит ошибка. содержимое - это строка XML, которую я получаю от сервера форм.

File srcFile = File.createTempFile("src", ".xml");
FileWriter writer = new FileWriter(srcFile);
writer.write(content);
writer.close();

DSSDocument doc = new FileDocument(srcFile));
ToBeSigned dataToSign = service.getDataToSign(doc, parameters);

1 Ответ

0 голосов
/ 09 мая 2019

FileWriter использует кодировку по умолчанию для платформы.Это зависит от развертывания приложения, поэтому это невозможно.Если XML всегда находится в UTF-8, выполните:

Path srcFile = Files.createTempFile("src", ".xml");
Files.write(srcFile, content.getBytes(StandardCharsets.UTF_8));
// Or:
// Files.write(srcFile, Collections.singletonList(content));

Избегайте FileWriter / FileReader.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...