Проверка подписи XADES выдает java.lang.ArrayIndexOutOfBoundsException: 0

Мне нужно проверить подпись XADES в подписанном XML-файле. Я использую xades4j v. 1.4.0, но при проверке метода вызова выбрасывается java.lang.ArrayIndexOutOfBoundsException: 0. С одним файлом работает, с другим нет.

Я пробовал в режиме отладки и выдавал исключение в классе метода checkForm -XAdESFormChecker.

Мой код:

                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                dbf.setNamespaceAware(true);
                DocumentBuilder db = dbf.newDocumentBuilder();
                Document doc = db.parse(inputStream);
                DOMHelper.useIdAsXmlId(doc.getDocumentElement());                    
                NodeList nList = doc.getElementsByTagName("ds:Signature");
                Element elem = null;                      
                for (int temp = 0; temp < nList.getLength(); temp++) {
                    Node nNode = nList.item(temp);
                    if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                        elem = (Element) nNode;
                        elem.setIdAttributeNS(null, "Id", true);
                    }
                }
                data = item.getData();               
                CertificateValidationProvider certValidator = new CertificateValidationProviderImpl();
                XadesVerificationProfile p = new XadesVerificationProfile(certValidator);
                XadesVerifier v = p.newVerifier();
                SignatureSpecificVerificationOptions opts = new SignatureSpecificVerificationOptions().useDataForAnonymousReference(data);   
                XAdESVerificationResult result = v.verify(elem, opts);

Подпись: Xml-подпись

Вы можете помочь мне? В чем ошибка?


РЕДАКТИРОВАТЬ - ТРАССИЯ СТЕКА

*java.lang.ArrayIndexOutOfBoundsException: 0 в xades4j.verification.XAdESFormChecker$XAdESFormDesc.getPrevious(XAdESFormChecker.java:109) в xades4j.verification.XAdESFormChecker.checkForm(XAdESFormChecker.java:55) в xades4j.verification.XadesVerifierXmplades.VerifyImpl .java:213) в it.yyy.kkkFramework.albo.InserimentoRichiestaController.listenerUploadDoc(InserimentoRichiestaController.java:1811) в sun.reflect.NativeMethodAccessorImpl.invoke0(собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39 ) в sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) в java.lang.reflect.Method.invoke(Method.java:597) в com.sun.el.parser.AstValue.invoke(AstValue.java: 187) в com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297) в com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) в org.richfaces.event.MethodExpressionE ventListener.processEvent(MethodExpressionEventListener.java:125) в org.richfaces.view.facelets.FileUploadHandler$FileUploadListenerImpl.processFileUpload(FileUploadHandler.java:55) ...


person JUNIOR_GIRL    schedule 02.09.2019    source источник
comment
Вы должны добавить трассировку стека, чтобы другим было легче помогать.   -  person Bernd Böllert    schedule 02.09.2019
comment
@BerndBöllert Я вставляю трассировку стека, заранее спасибо за ваш ответ.   -  person JUNIOR_GIRL    schedule 02.09.2019
comment
@lgoncalves не могли бы вы мне помочь?   -  person JUNIOR_GIRL    schedule 02.09.2019


Ответы (1)


xades4j основан на ETSI TS 101 903 (XAdES 1.4.1). Однако ваша подпись содержит свойство SigningCertificateV2, определенное в более поздних спецификациях XAdES, но еще не поддерживаемое xades4j. Это вызывает ошибку, так как свойство SigningCertificate отсутствует.

Библиотека не должна выдавать исключение "массив за пределами границ" (это будет исправлено, так как это ошибка), но она не сможет проверить подпись. Если бы не ошибка, вы бы увидели гораздо более очевидное исключение в этой строке: https://github.com/luisgoncalves/xades4j/blob/master/src/main/java/xades4j/verification/XAdESFormChecker.java#L64

person lgoncalves    schedule 02.09.2019
comment
Спасибо, а как мне тогда проверить в java эту подпись? - person JUNIOR_GIRL; 03.09.2019
comment
Пока только с использованием другой библиотеки. Я верю, что есть и другие; возможно, некоторые поддерживают обновленные стандарты - person lgoncalves; 03.09.2019