2014-11-18 4 views
0

При попытке проверить подписанный файл docx с использованием apache POI OOXML с помощью этого фрагмента кода.не может быть передан в org.openxmlformats.schemas.xpackage.x2006.digitalSignature.CTRelationshipReference?

 OPCPackage pkg = OPCPackage.open(inputStream); 
     SignatureConfig sic = new SignatureConfig(); 
     sic.setOpcPackage(pkg); 
     SignatureInfo si = new SignatureInfo(); 
     si.setSignatureConfig(sic); 
     boolean isValid = si.verifySignature(); 

Вот мое исключение stacktrace: рассказываю, что существует исключение класса cast !!

java.lang.ClassCastException: org.apache.xmlbeans.impl.values.XmlAnyTypeImpl cannot be cast to org.openxmlformats.schemas.xpackage.x2006.digitalSignature.CTRelationshipReference 
    at org.apache.poi.poifs.crypt.dsig.services.RelationshipTransformService.init(RelationshipTransformService.java:150) 
    at org.apache.jcp.xml.dsig.internal.dom.DOMTransform.<init>(DOMTransform.java:92) 
    at org.apache.jcp.xml.dsig.internal.dom.DOMReference.<init>(DOMReference.java:205) 
    at org.apache.jcp.xml.dsig.internal.dom.DOMManifest.<init>(DOMManifest.java:102) 
    at org.apache.jcp.xml.dsig.internal.dom.DOMXMLObject.<init>(DOMXMLObject.java:112) 
    at org.apache.jcp.xml.dsig.internal.dom.DOMXMLSignature.<init>(DOMXMLSignature.java:163) 
    at org.apache.jcp.xml.dsig.internal.dom.DOMXMLSignatureFactory.unmarshal(DOMXMLSignatureFactory.java:206) 
    at org.apache.jcp.xml.dsig.internal.dom.DOMXMLSignatureFactory.unmarshalXMLSignature(DOMXMLSignatureFactory.java:161) 
    at org.apache.poi.poifs.crypt.dsig.SignatureInfo$SignaturePart.validate(SignatureInfo.java:237) 
    at org.apache.poi.poifs.crypt.dsig.SignatureInfo.verifySignature(SignatureInfo.java:296) 
    at com.hamed.docx_signer.DocxSigner.verify(DocxSigner.java:74) 

Вот мой POM:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.me</groupId> 
    <artifactId>docx-signer</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>docx-signer</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>3.8.1</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.poi</groupId> 
      <artifactId>poi-ooxml</artifactId> 
      <version>3.11-beta3</version> 
     </dependency> 
     <dependency> 
      <groupId>org.bouncycastle</groupId> 
      <artifactId>bcprov-jdk15on</artifactId> 
      <version>1.51</version> 
     </dependency> 
     <dependency> 
      <groupId>org.bouncycastle</groupId> 
      <artifactId>bcpkix-jdk15on</artifactId> 
      <version>1.51</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.7.7</version> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.santuario</groupId> 
      <artifactId>xmlsec</artifactId> 
      <version>2.0.2</version> 
     </dependency> 
    </dependencies> 
</project> 

Вот мой журнал:

2014/11/19 01:17:28 DEBUG org.apache.poi.openxml4j.opc.PackageRelationshipCollection - Parsing relationship: /_xmlsignatures/_rels/origin.sigs.rels 
2014/11/19 01:17:28 DEBUG org.apache.poi.openxml4j.opc.PackageRelationshipCollection - Parsing relationship: /word/_rels/document.xml.rels 
2014/11/19 01:17:28 DEBUG org.apache.xml.security.Init - Registering default algorithms 
2014/11/19 01:17:29 DEBUG org.apache.poi.openxml4j.opc.PackageRelationshipCollection - Parsing relationship: /_rels/.rels 
2014/11/19 01:17:29 DEBUG org.apache.poi.poifs.crypt.dsig.SignatureInfo - Digital Signature Origin partName: /_xmlsignatures/origin.sigs - Content Type: application/vnd.openxmlformats-package.digital-signature-origin 
2014/11/19 01:17:29 DEBUG org.apache.poi.poifs.crypt.dsig.SignatureInfo - XML Signature partName: /_xmlsignatures/sig1.xml - Content Type: application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml 
2014/11/19 01:17:29 DEBUG org.apache.poi.poifs.crypt.dsig.services.RelationshipTransformService - constructor 
2014/11/19 01:17:29 DEBUG org.apache.poi.poifs.crypt.dsig.services.RelationshipTransformService - init(parent,context) 
2014/11/19 01:17:29 DEBUG org.apache.poi.poifs.crypt.dsig.services.RelationshipTransformService - parent java type: javax.xml.crypto.dom.DOMStructure 
2014/11/19 01:17:29 ERROR org.apache.poi.poifs.crypt.dsig.SignatureInfo - error in marshalling and validating the signature 
java.lang.ClassCastException: org.apache.xmlbeans.impl.values.XmlAnyTypeImpl cannot be cast to org.openxmlformats.schemas.xpackage.x2006.digitalSignature.CTRelationshipReference 
    at org.apache.poi.poifs.crypt.dsig.services.RelationshipTransformService.init(RelationshipTransformService.java:150) 
    at org.apache.jcp.xml.dsig.internal.dom.DOMTransform.<init>(DOMTransform.java:92) 
    at org.apache.jcp.xml.dsig.internal.dom.DOMReference.<init>(DOMReference.java:205) 
    at org.apache.jcp.xml.dsig.internal.dom.DOMManifest.<init>(DOMManifest.java:102) 
    at org.apache.jcp.xml.dsig.internal.dom.DOMXMLObject.<init>(DOMXMLObject.java:112) 
    at org.apache.jcp.xml.dsig.internal.dom.DOMXMLSignature.<init>(DOMXMLSignature.java:163) 
    at org.apache.jcp.xml.dsig.internal.dom.DOMXMLSignatureFactory.unmarshal(DOMXMLSignatureFactory.java:206) 
    at org.apache.jcp.xml.dsig.internal.dom.DOMXMLSignatureFactory.unmarshalXMLSignature(DOMXMLSignatureFactory.java:161) 
    at org.apache.poi.poifs.crypt.dsig.SignatureInfo$SignaturePart.validate(SignatureInfo.java:237) 
    at org.apache.poi.poifs.crypt.dsig.SignatureInfo.verifySignature(SignatureInfo.java:296) 
    at com.hamed.docx_signer.DocxSigner.verify(DocxSigner.java:74) 
    at com.hamed.docx_signer.DocxSignerTest.testVerify(DocxSignerTest.java:72) 

ли вы помочь ?!

+0

Если вы зависите от 'ooxml-schemas-1.1' и' ooxml-security-1.0' вместо 'poi-ooxml-schemas', это исправить? – Gagravarr

ответ

1

Это, как представляется, проблема релиза 3.11-Beta3 :(

В настоящее время, пожалуйста, добавьте OOXML-security.jar к вашему pom.xml:

<dependency> 
    <groupId>org.apache.poi</groupId> 
    <artifactId>ooxml-security</artifactId> 
    <version>1.0</version> 
</dependency> 

Пока это не поставлено в центральной, вам нужно добавить апачский репозиторий:

<repositories> 
    <repository> 
     <id>apache-repo</id> 
     <name>Apache Repo</name> 
     <url>https://repository.apache.org/service/local/repositories/releases/content/</url> 
    </repository> 
</repositories> 

Update: будет исправлено на 1640846 т.е. следующий пои г elease

+0

Спасибо за ваш ответ, но проверка подписанного файла не удалась 2014/11/22 02:41:37 DEBUG org.apache.jcp.xml.dsig.internal.dom.DOMReference - Ожидаемый дайджест: 1vWU/YTF/7t6ZjnE44gAFTbZvvA = 2014/11/22 02:41:37 DEBUG org.apache.jcp.xml.dsig.internal.dom.DOMReference - фактический дайджест: cWVWRxsODBK3kLvh ++ Lh732GYgc = org.apache.jcp.xml.dsig. internal.dom.DOMXMLSignature - Манифест ref [/ _ rels/.rels? ContentType = application/vnd.openxmlformats-package.relationships + xml] действителен: false –

+0

Чтобы отладить проблемы с подстрокой xml, вы можете сохранить входы дайджеста в файл. См. Первый комментарий https://issues.apache.org/bugzilla/show_bug.cgi?id=56836 – kiwiwings

Смежные вопросы