git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1866402 13f79535-47bb-0310-9956-ffa450edef68tags/REL_4_1_1
@@ -40,7 +40,7 @@ | |||
<classpathentry kind="lib" path="lib/commons-math3-3.6.1.jar"/> | |||
<classpathentry kind="lib" path="lib/xmlunit-core-2.5.1.jar"/> | |||
<classpathentry kind="lib" path="lib/objenesis-2.6.jar"/> | |||
<classpathentry kind="lib" path="lib/commons-compress-1.18.jar"/> | |||
<classpathentry kind="lib" path="lib/commons-compress-1.19.jar"/> | |||
<classpathentry kind="lib" path="lib/mockito-core-3.0.0.jar"/> | |||
<classpathentry kind="lib" path="lib/byte-buddy-1.10.1.jar"/> | |||
<classpathentry kind="lib" path="lib/byte-buddy-agent-1.10.1.jar"/> |
@@ -233,7 +233,7 @@ project('ooxml') { | |||
compile 'org.apache.xmlbeans:xmlbeans:3.1.0' | |||
compile 'org.apache.commons:commons-collections4:4.4' | |||
compile 'org.apache.commons:commons-math3:3.6.1' | |||
compile 'org.apache.commons:commons-compress:1.18' | |||
compile 'org.apache.commons:commons-compress:1.19' | |||
compile 'org.apache.santuario:xmlsec:2.1.2' | |||
compile 'org.bouncycastle:bcpkix-jdk15on:1.62' | |||
compile 'com.github.virtuald:curvesapi:1.06' |
@@ -244,9 +244,9 @@ under the License. | |||
<property name="ooxml.xmlbeans.jar" location="${ooxml.lib}/xmlbeans-3.1.0.jar"/> | |||
<property name="ooxml.xmlbeans.url" | |||
value="https://repository.apache.org/content/repositories/releases/org/apache/xmlbeans/xmlbeans/3.1.0/xmlbeans-3.1.0.jar"/> | |||
<property name="ooxml.commons-compress.jar" location="${main.lib}/commons-compress-1.18.jar"/> | |||
<property name="ooxml.commons-compress.jar" location="${main.lib}/commons-compress-1.19.jar"/> | |||
<property name="ooxml.commons-compress.url" | |||
value="${repository.m2}/maven2/org/apache/commons/commons-compress/1.18/commons-compress-1.18.jar"/> | |||
value="${repository.m2}/maven2/org/apache/commons/commons-compress/1.19/commons-compress-1.19.jar"/> | |||
<!-- jars in the ooxml-test-lib directory, see the fetch-ooxml-jars target--> | |||
<property name="ooxml.test.reflections.jar" location="${ooxml.test.lib}/reflections.jar"/> | |||
@@ -652,6 +652,7 @@ under the License. | |||
<include name="commons-codec-1.12*"/> | |||
<include name="commons-compress-1.16*"/> | |||
<include name="commons-compress-1.17*"/> | |||
<include name="commons-compress-1.18*"/> | |||
<include name="commons-collections4-4.1*"/> | |||
<include name="commons-collections4-4.2*"/> | |||
<include name="commons-collections4-4.3*"/> |
@@ -72,7 +72,7 @@ | |||
<dependency> | |||
<groupId>org.apache.commons</groupId> | |||
<artifactId>commons-compress</artifactId> | |||
<version>1.18</version> | |||
<version>1.19</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>com.github.virtuald</groupId> |
@@ -152,7 +152,7 @@ | |||
<dependency> | |||
<groupId>org.apache.commons</groupId> | |||
<artifactId>commons-compress</artifactId> | |||
<version>1.18</version> | |||
<version>1.19</version> | |||
</dependency> | |||
<dependency> | |||
<groupId>com.github.virtuald</groupId> |
@@ -19,6 +19,7 @@ package org.apache.poi.ooxml.util; | |||
import java.io.IOException; | |||
import java.io.InputStream; | |||
import java.io.StringWriter; | |||
import java.lang.reflect.Method; | |||
import java.util.concurrent.TimeUnit; | |||
@@ -27,11 +28,15 @@ import javax.xml.parsers.DocumentBuilder; | |||
import javax.xml.parsers.DocumentBuilderFactory; | |||
import javax.xml.parsers.ParserConfigurationException; | |||
import javax.xml.stream.events.Namespace; | |||
import javax.xml.transform.OutputKeys; | |||
import javax.xml.transform.Transformer; | |||
import javax.xml.transform.TransformerFactory; | |||
import javax.xml.transform.dom.DOMSource; | |||
import javax.xml.transform.stream.StreamResult; | |||
import org.apache.poi.util.POILogFactory; | |||
import org.apache.poi.util.POILogger; | |||
import org.w3c.dom.Document; | |||
import org.w3c.dom.Element; | |||
import org.w3c.dom.*; | |||
import org.xml.sax.ErrorHandler; | |||
import org.xml.sax.InputSource; | |||
import org.xml.sax.SAXException; | |||
@@ -97,6 +102,33 @@ public final class DocumentHelper { | |||
} | |||
} | |||
public static String domToString(Node node) throws Exception { | |||
TransformerFactory tf = TransformerFactory.newInstance(); | |||
Transformer t = tf.newTransformer(); | |||
t.setOutputProperty(OutputKeys.INDENT, "yes"); | |||
StringWriter sw = new StringWriter(); | |||
t.transform(new DOMSource(node), new StreamResult(sw)); | |||
return sw.toString(); | |||
} | |||
public static Attr findIdAttr(Element e, String name) throws Exception { | |||
Attr att = e.getAttributeNode("Id"); | |||
if(att != null && name.equals(att.getValue())) { | |||
return att; | |||
} | |||
NodeList nl = e.getChildNodes(); | |||
for (int i = 0; i < nl.getLength(); i++) { | |||
Node child = nl.item(i); | |||
if (child instanceof Element) { | |||
Attr x = findIdAttr((Element)child, name); | |||
if (x != null) { | |||
return x; | |||
} | |||
} | |||
} | |||
return null; | |||
} | |||
static final DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); | |||
static { | |||
documentBuilderFactory.setNamespaceAware(true); |
@@ -70,8 +70,7 @@ import org.etsi.uri.x01903.v13.SignedSignaturePropertiesType; | |||
import org.etsi.uri.x01903.v13.SignerRoleType; | |||
import org.w3.x2000.x09.xmldsig.DigestMethodType; | |||
import org.w3.x2000.x09.xmldsig.X509IssuerSerialType; | |||
import org.w3c.dom.Document; | |||
import org.w3c.dom.Node; | |||
import org.w3c.dom.*; | |||
/** | |||
* XAdES Signature Facet. Implements XAdES v1.4.1 which is compatible with XAdES | |||
@@ -224,10 +223,32 @@ public class XAdESSignatureFacet extends SignatureFacet { | |||
private XMLObject addXadesObject(Document document, QualifyingPropertiesType qualifyingProperties) { | |||
Node qualDocElSrc = qualifyingProperties.getDomNode(); | |||
Node qualDocEl = document.importNode(qualDocElSrc, true); | |||
markIds(qualDocEl); | |||
List<XMLStructure> xadesObjectContent = Arrays.asList(new DOMStructure(qualDocEl)); | |||
return getSignatureFactory().newXMLObject(xadesObjectContent, null, null, null); | |||
} | |||
private void markIds(Node node) { | |||
if (node instanceof Element) { | |||
markIds((Element)node); | |||
} else if (node instanceof Document) { | |||
markIds(((Document)node).getDocumentElement()); | |||
} | |||
} | |||
private void markIds(Element element) { | |||
if (element != null) { | |||
Attr att = element.getAttributeNode("Id"); | |||
if (att != null) { | |||
element.setIdAttributeNode(att, true); | |||
} | |||
NodeList nl = element.getChildNodes(); | |||
for (int i = 0; i < nl.getLength(); i++) { | |||
markIds(nl.item(i)); | |||
} | |||
} | |||
} | |||
private Reference addXadesReference() throws XMLSignatureException { | |||
List<Transform> transforms = singletonList(newTransform(CanonicalizationMethod.INCLUSIVE)); | |||
return newReference("#"+signatureConfig.getXadesSignatureId(), transforms, XADES_TYPE, null, null); |
@@ -116,7 +116,10 @@ public final class POIDataSamples { | |||
return _instHSMF; | |||
} | |||
public static POIDataSamples getXmlDSignInstance(){ | |||
public static POIDataSamples getXmlDSignInstance() { | |||
if (System.getProperty(TEST_PROPERTY) == null) { | |||
System.setProperty(TEST_PROPERTY, "../../test-data"); | |||
} | |||
if(_instXmlDSign == null) _instXmlDSign = new POIDataSamples("xmldsign"); | |||
return _instXmlDSign; | |||
} |