You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@santuario.apache.org by gi...@apache.org on 2012/07/23 11:19:37 UTC

svn commit: r1364552 - in /santuario/xml-security-java/trunk: ./ src/main/java/org/apache/xml/security/stax/impl/resourceResolvers/ src/test/java/org/apache/xml/security/test/stax/signature/ src/test/java/org/apache/xml/security/test/stax/utils/

Author: giger
Date: Mon Jul 23 09:19:37 2012
New Revision: 1364552

URL: http://svn.apache.org/viewvc?rev=1364552&view=rev
Log:
Possible solution for testing SANTUARIO-319

Added:
    santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/utils/HttpRequestRedirectorProxy.java   (with props)
Modified:
    santuario/xml-security-java/trunk/pom.xml
    santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/impl/resourceResolvers/ResolverHttp.java
    santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/signature/AbstractSignatureCreationTest.java
    santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/signature/AbstractSignatureVerificationTest.java
    santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/signature/SignatureCreationReferenceURIResolverTest.java
    santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/signature/SignatureVerificationReferenceURIResolverTest.java

Modified: santuario/xml-security-java/trunk/pom.xml
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/pom.xml?rev=1364552&r1=1364551&r2=1364552&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/pom.xml (original)
+++ santuario/xml-security-java/trunk/pom.xml Mon Jul 23 09:19:37 2012
@@ -251,7 +251,7 @@
                     </execution>
                 </executions>
             </plugin>
-            
+
         </plugins>
 
         <pluginManagement>
@@ -304,7 +304,7 @@
                         </systemPropertyVariables>
                     </configuration>
                 </plugin>
-  
+
             </plugins>
         </pluginManagement>
 
@@ -378,6 +378,7 @@
         <commons.codec.version>1.6</commons.codec.version>
         <commons.compress.version>1.4.1</commons.compress.version>
         <woodstox.core.asl.version>4.1.3</woodstox.core.asl.version>
+        <jetty.version>8.1.4.v20120524</jetty.version>
     </properties>
     
     <dependencies>
@@ -424,6 +425,24 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-server</artifactId>
+            <version>${jetty.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-servlet</artifactId>
+            <version>${jetty.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.eclipse.jetty</groupId>
+            <artifactId>jetty-servlets</artifactId>
+            <version>${jetty.version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>xalan</groupId>
             <artifactId>xalan</artifactId>
             <version>${xalan.version}</version>

Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/impl/resourceResolvers/ResolverHttp.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/impl/resourceResolvers/ResolverHttp.java?rev=1364552&r1=1364551&r2=1364552&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/impl/resourceResolvers/ResolverHttp.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/impl/resourceResolvers/ResolverHttp.java Mon Jul 23 09:19:37 2012
@@ -25,10 +25,7 @@ import org.apache.xml.security.stax.ext.
 
 import java.io.IOException;
 import java.io.InputStream;
-import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URISyntaxException;
+import java.net.*;
 import java.util.regex.Pattern;
 
 /**
@@ -39,6 +36,8 @@ import java.util.regex.Pattern;
  */
 public class ResolverHttp implements ResourceResolver, ResourceResolverLookup {
 
+    private static Proxy proxy;
+
     private String uri;
     private Pattern pattern = Pattern.compile("^http[s]?://.*");
 
@@ -49,6 +48,10 @@ public class ResolverHttp implements Res
         this.uri = uri;
     }
 
+    public static void setProxy(Proxy proxy) {
+        ResolverHttp.proxy = proxy;
+    }
+
     @Override
     public ResourceResolverLookup canResolve(String uri) {
         if (uri != null && pattern.matcher(uri).matches()) {
@@ -79,7 +82,13 @@ public class ResolverHttp implements Res
             if (tmp.getFragment() != null) {
                 tmp = new URI(tmp.getScheme(), tmp.getSchemeSpecificPart(), null);
             }
-            HttpURLConnection urlConnection = (HttpURLConnection) tmp.toURL().openConnection();
+            URL url = tmp.toURL();
+            HttpURLConnection urlConnection;
+            if (proxy != null) {
+                urlConnection = (HttpURLConnection)url.openConnection(proxy);
+            } else {
+                urlConnection = (HttpURLConnection)url.openConnection();
+            }
             InputStream inputStream = urlConnection.getInputStream();
             if (urlConnection.getResponseCode() != 200) {
                 throw new XMLSecurityException(XMLSecurityException.ErrorCode.FAILED_CHECK);

Modified: santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/signature/AbstractSignatureCreationTest.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/signature/AbstractSignatureCreationTest.java?rev=1364552&r1=1364551&r2=1364552&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/signature/AbstractSignatureCreationTest.java (original)
+++ santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/signature/AbstractSignatureCreationTest.java Mon Jul 23 09:19:37 2012
@@ -23,6 +23,8 @@ import org.apache.xml.security.signature
 import org.apache.xml.security.stax.ext.SecurePart;
 import org.apache.xml.security.test.dom.DSNamespaceContext;
 import org.apache.xml.security.test.stax.utils.XMLSecEventAllocator;
+import org.apache.xml.security.utils.resolver.ResourceResolver;
+import org.apache.xml.security.utils.resolver.ResourceResolverSpi;
 import org.junit.Assert;
 import org.junit.Before;
 import org.w3c.dom.Document;
@@ -77,6 +79,18 @@ public class AbstractSignatureCreationTe
             X509Certificate cert,
             List<SecurePart> secureParts
     ) throws Exception {
+        verifyUsingDOM(document, cert, secureParts, null);
+    }
+
+    /**
+     * Verify the document using DOM
+     */
+    protected void verifyUsingDOM(
+            Document document,
+            X509Certificate cert,
+            List<SecurePart> secureParts,
+            ResourceResolverSpi resourceResolverSpi
+    ) throws Exception {
         XPathFactory xpf = XPathFactory.newInstance();
         XPath xpath = xpf.newXPath();
         xpath.setNamespaceContext(new DSNamespaceContext());
@@ -98,6 +112,9 @@ public class AbstractSignatureCreationTe
         }
 
         XMLSignature signature = new XMLSignature(sigElement, "");
+        if (resourceResolverSpi != null) {
+            signature.addResourceResolver(resourceResolverSpi);
+        }
         KeyInfo ki = signature.getKeyInfo();
         Assert.assertNotNull(ki);
 

Modified: santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/signature/AbstractSignatureVerificationTest.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/signature/AbstractSignatureVerificationTest.java?rev=1364552&r1=1364551&r2=1364552&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/signature/AbstractSignatureVerificationTest.java (original)
+++ santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/signature/AbstractSignatureVerificationTest.java Mon Jul 23 09:19:37 2012
@@ -30,6 +30,7 @@ import org.apache.xml.security.stax.secu
 import org.apache.xml.security.test.dom.DSNamespaceContext;
 import org.apache.xml.security.test.stax.utils.XMLSecEventAllocator;
 import org.apache.xml.security.transforms.Transforms;
+import org.apache.xml.security.utils.resolver.ResourceResolverSpi;
 import org.junit.Assert;
 import org.junit.Before;
 import org.w3c.dom.Document;
@@ -116,6 +117,22 @@ public class AbstractSignatureVerificati
             Document document,
             List<String> localNames,
             Key signingKey,
+            List<ReferenceInfo> additionalReferences,
+            ResourceResolverSpi resourceResolverSpi
+    ) throws Exception {
+        String c14nMethod = "http://www.w3.org/2001/10/xml-exc-c14n#";
+        return signUsingDOM(algorithm, document, localNames, signingKey, c14nMethod,
+                additionalReferences, resourceResolverSpi);
+    }
+
+    /**
+     * Sign the document using DOM
+     */
+    protected XMLSignature signUsingDOM(
+            String algorithm,
+            Document document,
+            List<String> localNames,
+            Key signingKey,
             List<ReferenceInfo> additionalReferences
     ) throws Exception {
         String c14nMethod = "http://www.w3.org/2001/10/xml-exc-c14n#";
@@ -133,7 +150,24 @@ public class AbstractSignatureVerificati
             String c14nMethod
     ) throws Exception {
         String digestMethod = "http://www.w3.org/2000/09/xmldsig#sha1";
-        return signUsingDOM(algorithm, document, localNames, signingKey, c14nMethod, digestMethod, null, c14nMethod);
+        return signUsingDOM(algorithm, document, localNames, signingKey, c14nMethod, digestMethod, null, c14nMethod, null);
+    }
+
+    /**
+     * Sign the document using DOM
+     */
+    protected XMLSignature signUsingDOM(
+            String algorithm,
+            Document document,
+            List<String> localNames,
+            Key signingKey,
+            String c14nMethod,
+            List<ReferenceInfo> additionalReferences,
+            ResourceResolverSpi resourceResolverSpi
+    ) throws Exception {
+        String digestMethod = "http://www.w3.org/2000/09/xmldsig#sha1";
+        return signUsingDOM(algorithm, document, localNames, signingKey,
+                c14nMethod, digestMethod, additionalReferences, c14nMethod, resourceResolverSpi);
     }
 
     /**
@@ -148,7 +182,8 @@ public class AbstractSignatureVerificati
             List<ReferenceInfo> additionalReferences
     ) throws Exception {
         String digestMethod = "http://www.w3.org/2000/09/xmldsig#sha1";
-        return signUsingDOM(algorithm, document, localNames, signingKey, c14nMethod, digestMethod, additionalReferences, c14nMethod);
+        return signUsingDOM(algorithm, document, localNames, signingKey,
+                c14nMethod, digestMethod, additionalReferences, c14nMethod, null);
     }
 
     /**
@@ -162,7 +197,7 @@ public class AbstractSignatureVerificati
             String c14nMethod,
             String digestMethod
     ) throws Exception {
-        return signUsingDOM(algorithm, document, localNames, signingKey, c14nMethod, digestMethod, null, c14nMethod);
+        return signUsingDOM(algorithm, document, localNames, signingKey, c14nMethod, digestMethod, null, c14nMethod, null);
     }
 
     /**
@@ -176,9 +211,13 @@ public class AbstractSignatureVerificati
             String c14nMethod,
             String digestMethod,
             List<ReferenceInfo> additionalReferences,
-            String referenceC14NMethod
+            String referenceC14NMethod,
+            ResourceResolverSpi resourceResolverSpi
     ) throws Exception {
         XMLSignature sig = new XMLSignature(document, "", algorithm, c14nMethod);
+        if (resourceResolverSpi != null) {
+            sig.addResourceResolver(resourceResolverSpi);
+        }
         Element root = document.getDocumentElement();
         root.appendChild(sig.getElement());
 

Modified: santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/signature/SignatureCreationReferenceURIResolverTest.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/signature/SignatureCreationReferenceURIResolverTest.java?rev=1364552&r1=1364551&r2=1364552&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/signature/SignatureCreationReferenceURIResolverTest.java (original)
+++ santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/signature/SignatureCreationReferenceURIResolverTest.java Mon Jul 23 09:19:37 2012
@@ -19,7 +19,10 @@
 package org.apache.xml.security.test.stax.signature;
 
 import org.apache.xml.security.stax.ext.*;
+import org.apache.xml.security.stax.impl.resourceResolvers.ResolverHttp;
+import org.apache.xml.security.test.stax.utils.HttpRequestRedirectorProxy;
 import org.apache.xml.security.test.stax.utils.XmlReaderToWriter;
+import org.apache.xml.security.utils.resolver.implementations.ResolverDirectHTTP;
 import org.junit.Assert;
 import org.junit.Ignore;
 import org.junit.Test;
@@ -33,6 +36,9 @@ import javax.xml.stream.XMLStreamWriter;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.InputStream;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.net.Proxy;
 import java.security.Key;
 import java.security.KeyStore;
 import java.security.cert.X509Certificate;
@@ -135,50 +141,61 @@ public class SignatureCreationReferenceU
     }
 
     @Test
-    @Ignore
     public void testSignatureCreationWithExternalHttpReference() throws Exception {
 
-        // Set up the Configuration
-        XMLSecurityProperties properties = new XMLSecurityProperties();
-        XMLSecurityConstants.Action[] actions =
-                new XMLSecurityConstants.Action[]{XMLSecurityConstants.SIGNATURE};
-        properties.setOutAction(actions);
-
-        // Set the key up
-        KeyStore keyStore = KeyStore.getInstance("jks");
-        keyStore.load(
-                this.getClass().getClassLoader().getResource("transmitter.jks").openStream(),
-                "default".toCharArray()
-        );
-        Key key = keyStore.getKey("transmitter", "default".toCharArray());
-        properties.setSignatureKey(key);
-        X509Certificate cert = (X509Certificate) keyStore.getCertificate("transmitter");
-        properties.setSignatureCerts(new X509Certificate[]{cert});
-
-        SecurePart securePart =
-                new SecurePart(new QName("urn:example:po", "PaymentInfo"), SecurePart.Modifier.Element);
-        properties.addSignaturePart(securePart);
-
-        securePart = new SecurePart("http://www.apache.org/images/feather-small.gif", null, XMLSecurityConstants.NS_XMLDSIG_SHA1);
-        properties.addSignaturePart(securePart);
+        Proxy proxy = HttpRequestRedirectorProxy.startHttpEngine();
 
-        OutboundXMLSec outboundXMLSec = XMLSec.getOutboundXMLSec(properties);
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        XMLStreamWriter xmlStreamWriter = outboundXMLSec.processOutMessage(baos, "UTF-8");
+        try {
+            ResolverHttp.setProxy(proxy);
 
-        InputStream sourceDocument =
-                this.getClass().getClassLoader().getResourceAsStream(
-                        "ie/baltimore/merlin-examples/merlin-xmlenc-five/plaintext.xml");
-        XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(sourceDocument);
-
-        XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
-        xmlStreamWriter.close();
-
-        Document document =
-                documentBuilderFactory.newDocumentBuilder().parse(new ByteArrayInputStream(baos.toByteArray()));
-
-        // Verify using DOM
-        verifyUsingDOM(document, cert, properties.getSignatureSecureParts());
+            // Set up the Configuration
+            XMLSecurityProperties properties = new XMLSecurityProperties();
+            XMLSecurityConstants.Action[] actions =
+                    new XMLSecurityConstants.Action[]{XMLSecurityConstants.SIGNATURE};
+            properties.setOutAction(actions);
+
+            // Set the key up
+            KeyStore keyStore = KeyStore.getInstance("jks");
+            keyStore.load(
+                    this.getClass().getClassLoader().getResource("transmitter.jks").openStream(),
+                    "default".toCharArray()
+            );
+            Key key = keyStore.getKey("transmitter", "default".toCharArray());
+            properties.setSignatureKey(key);
+            X509Certificate cert = (X509Certificate) keyStore.getCertificate("transmitter");
+            properties.setSignatureCerts(new X509Certificate[]{cert});
+
+            SecurePart securePart =
+                    new SecurePart(new QName("urn:example:po", "PaymentInfo"), SecurePart.Modifier.Element);
+            properties.addSignaturePart(securePart);
+
+            securePart = new SecurePart("http://www.w3.org/Signature/2002/04/xml-stylesheet.b64", null, XMLSecurityConstants.NS_XMLDSIG_SHA1);
+            properties.addSignaturePart(securePart);
+
+            OutboundXMLSec outboundXMLSec = XMLSec.getOutboundXMLSec(properties);
+            ByteArrayOutputStream baos = new ByteArrayOutputStream();
+            XMLStreamWriter xmlStreamWriter = outboundXMLSec.processOutMessage(baos, "UTF-8");
+
+            InputStream sourceDocument =
+                    this.getClass().getClassLoader().getResourceAsStream(
+                            "ie/baltimore/merlin-examples/merlin-xmlenc-five/plaintext.xml");
+            XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(sourceDocument);
+
+            XmlReaderToWriter.writeAll(xmlStreamReader, xmlStreamWriter);
+            xmlStreamWriter.close();
+
+            Document document =
+                    documentBuilderFactory.newDocumentBuilder().parse(new ByteArrayInputStream(baos.toByteArray()));
+
+            ResolverDirectHTTP resolverDirectHTTP = new ResolverDirectHTTP();
+            resolverDirectHTTP.engineSetProperty("http.proxy.host", ((InetSocketAddress)proxy.address()).getAddress().getHostAddress());
+            resolverDirectHTTP.engineSetProperty("http.proxy.port", "" + ((InetSocketAddress)proxy.address()).getPort());
+
+            // Verify using DOM
+            verifyUsingDOM(document, cert, properties.getSignatureSecureParts(), resolverDirectHTTP);
+        } finally {
+            HttpRequestRedirectorProxy.stopHttpEngine();
+        }
     }
 
     @Test

Modified: santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/signature/SignatureVerificationReferenceURIResolverTest.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/signature/SignatureVerificationReferenceURIResolverTest.java?rev=1364552&r1=1364551&r2=1364552&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/signature/SignatureVerificationReferenceURIResolverTest.java (original)
+++ santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/signature/SignatureVerificationReferenceURIResolverTest.java Mon Jul 23 09:19:37 2012
@@ -27,7 +27,9 @@ import org.apache.xml.security.stax.ext.
 import org.apache.xml.security.stax.impl.resourceResolvers.ResolverHttp;
 import org.apache.xml.security.stax.impl.resourceResolvers.ResolverXPointer;
 import org.apache.xml.security.test.dom.DSNamespaceContext;
+import org.apache.xml.security.test.stax.utils.HttpRequestRedirectorProxy;
 import org.apache.xml.security.test.stax.utils.StAX2DOM;
+import org.apache.xml.security.utils.resolver.implementations.ResolverDirectHTTP;
 import org.junit.Assert;
 import org.junit.Ignore;
 import org.junit.Test;
@@ -44,6 +46,8 @@ import javax.xml.xpath.XPathFactory;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.InputStream;
+import java.net.InetSocketAddress;
+import java.net.Proxy;
 import java.security.Key;
 import java.security.KeyStore;
 import java.security.cert.X509Certificate;
@@ -176,73 +180,76 @@ public class SignatureVerificationRefere
     }
 
     @Test
-    @Ignore
     public void testSignatureVerificationWithExternalHttpReference() throws Exception {
-        // Read in plaintext document
-        InputStream sourceDocument =
-                this.getClass().getClassLoader().getResourceAsStream(
-                        "ie/baltimore/merlin-examples/merlin-xmlenc-five/plaintext.xml");
-        DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder();
-        Document document = builder.parse(sourceDocument);
-
-        // Set up the Key
-        KeyStore keyStore = KeyStore.getInstance("jks");
-        keyStore.load(
-                this.getClass().getClassLoader().getResource("transmitter.jks").openStream(),
-                "default".toCharArray()
-        );
-        Key key = keyStore.getKey("transmitter", "default".toCharArray());
-        X509Certificate cert = (X509Certificate) keyStore.getCertificate("transmitter");
-
-        // Sign using DOM
-        List<String> localNames = new ArrayList<String>();
-        localNames.add("PaymentInfo");
-
-        ReferenceInfo referenceInfo = new ReferenceInfo(
-                "http://www.apache.org/images/feather-small.gif",
-                null,
-                "http://www.w3.org/2000/09/xmldsig#sha1",
-                true
-        );
-
-        List<ReferenceInfo> referenceInfos = new ArrayList<ReferenceInfo>();
-        referenceInfos.add(referenceInfo);
 
-        XMLSignature sig = signUsingDOM(
-                "http://www.w3.org/2000/09/xmldsig#rsa-sha1",
-                document,
-                localNames,
-                key,
-                referenceInfos
-        );
+        Proxy proxy = HttpRequestRedirectorProxy.startHttpEngine();
 
-        // Add KeyInfo
-        sig.addKeyInfo(cert);
+        try {
+            ResolverHttp.setProxy(proxy);
 
-        // Convert Document to a Stream Reader
-        javax.xml.transform.Transformer transformer = transformerFactory.newTransformer();
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        transformer.transform(new DOMSource(document), new StreamResult(baos));
-        final XMLStreamReader xmlStreamReader =
-                xmlInputFactory.createXMLStreamReader(new ByteArrayInputStream(baos.toByteArray()));
-
-        // Verify signature
-        XMLSecurityProperties properties = new XMLSecurityProperties();
-        properties.setSignatureVerificationKey(cert.getPublicKey());
-        InboundXMLSec inboundXMLSec = XMLSec.getInboundWSSec(properties);
-        XMLStreamReader securityStreamReader = inboundXMLSec.processInMessage(xmlStreamReader);
-
-        StAX2DOM.readDoc(documentBuilderFactory.newDocumentBuilder(), securityStreamReader);
-    }
-
-    @Test
-    public void testBasicSignatureVerificationWithExternalHttpReference() throws Exception {
-        //for simplification and to prevent online lookups, we just test if the ResolverHttp class is returned.
-        //another option would be to start an embedded jetty instance...
-
-        ResourceResolver resourceResolver = ResourceResolverMapper.getResourceResolver("http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/ws-securitypolicy.xsd");
-        Assert.assertNotNull(resourceResolver);
-        Assert.assertTrue(resourceResolver instanceof ResolverHttp);
+            ResolverDirectHTTP resolverDirectHTTP = new ResolverDirectHTTP();
+            resolverDirectHTTP.engineSetProperty("http.proxy.host", ((InetSocketAddress)proxy.address()).getAddress().getHostAddress());
+            resolverDirectHTTP.engineSetProperty("http.proxy.port", "" + ((InetSocketAddress)proxy.address()).getPort());
+
+            // Read in plaintext document
+            InputStream sourceDocument =
+                    this.getClass().getClassLoader().getResourceAsStream(
+                            "ie/baltimore/merlin-examples/merlin-xmlenc-five/plaintext.xml");
+            DocumentBuilder builder = documentBuilderFactory.newDocumentBuilder();
+            Document document = builder.parse(sourceDocument);
+
+            // Set up the Key
+            KeyStore keyStore = KeyStore.getInstance("jks");
+            keyStore.load(
+                    this.getClass().getClassLoader().getResource("transmitter.jks").openStream(),
+                    "default".toCharArray()
+            );
+            Key key = keyStore.getKey("transmitter", "default".toCharArray());
+            X509Certificate cert = (X509Certificate) keyStore.getCertificate("transmitter");
+
+            // Sign using DOM
+            List<String> localNames = new ArrayList<String>();
+            localNames.add("PaymentInfo");
+
+            ReferenceInfo referenceInfo = new ReferenceInfo(
+                    "http://www.w3.org/Signature/2002/04/xml-stylesheet.b64",
+                    null,
+                    "http://www.w3.org/2000/09/xmldsig#sha1",
+                    true
+            );
+
+            List<ReferenceInfo> referenceInfos = new ArrayList<ReferenceInfo>();
+            referenceInfos.add(referenceInfo);
+
+            XMLSignature sig = signUsingDOM(
+                    "http://www.w3.org/2000/09/xmldsig#rsa-sha1",
+                    document,
+                    localNames,
+                    key,
+                    referenceInfos,
+                    resolverDirectHTTP
+            );
+
+            // Add KeyInfo
+            sig.addKeyInfo(cert);
+
+            // Convert Document to a Stream Reader
+            javax.xml.transform.Transformer transformer = transformerFactory.newTransformer();
+            ByteArrayOutputStream baos = new ByteArrayOutputStream();
+            transformer.transform(new DOMSource(document), new StreamResult(baos));
+            final XMLStreamReader xmlStreamReader =
+                    xmlInputFactory.createXMLStreamReader(new ByteArrayInputStream(baos.toByteArray()));
+
+            // Verify signature
+            XMLSecurityProperties properties = new XMLSecurityProperties();
+            properties.setSignatureVerificationKey(cert.getPublicKey());
+            InboundXMLSec inboundXMLSec = XMLSec.getInboundWSSec(properties);
+            XMLStreamReader securityStreamReader = inboundXMLSec.processInMessage(xmlStreamReader);
+
+            StAX2DOM.readDoc(documentBuilderFactory.newDocumentBuilder(), securityStreamReader);
+        } finally {
+            HttpRequestRedirectorProxy.stopHttpEngine();
+        }
     }
 
     @Test

Added: santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/utils/HttpRequestRedirectorProxy.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/utils/HttpRequestRedirectorProxy.java?rev=1364552&view=auto
==============================================================================
--- santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/utils/HttpRequestRedirectorProxy.java (added)
+++ santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/utils/HttpRequestRedirectorProxy.java Mon Jul 23 09:19:37 2012
@@ -0,0 +1,115 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.xml.security.test.stax.utils;
+
+import org.apache.commons.compress.utils.IOUtils;
+import org.eclipse.jetty.http.MimeTypes;
+import org.eclipse.jetty.io.Buffer;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.servlet.ServletContextHandler;
+import org.eclipse.jetty.servlet.ServletHolder;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.net.Proxy;
+import java.net.ServerSocket;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author $Author$
+ * @version $Revision$ $Date$
+ */
+public class HttpRequestRedirectorProxy {
+
+    private static final int startPort = 31280;
+    private static Server httpServer;
+
+    public static Proxy startHttpEngine() throws Exception {
+
+        int port = startPort;
+
+        while (true) {
+            try {
+                ServerSocket ss = new ServerSocket(port);
+                ss.setReuseAddress(true);
+                //ok no exception so the port must be free
+                ss.close();
+                break;
+            } catch (IOException e) {
+                port++;
+            }
+        }
+
+        httpServer = new Server(port);
+        /*ResourceHandler resourceHandler = new ResourceHandler();
+        resourceHandler.setDirectoriesListed(true);
+        resourceHandler.setResourceBase(".");
+        httpServer.setHandler(resourceHandler);*/
+
+        ServletContextHandler context = new ServletContextHandler(ServletContextHandler.NO_SESSIONS);
+        context.setContextPath("/");
+        httpServer.setHandler(context);
+        context.addServlet(new ServletHolder(new TestingHttpProxyServlet()), "/*");
+        httpServer.start();
+
+        return new Proxy(Proxy.Type.HTTP, new InetSocketAddress(InetAddress.getByName("127.0.0.1"), port));
+    }
+
+    public static void stopHttpEngine() throws Exception {
+        httpServer.stop();
+    }
+
+    static class TestingHttpProxyServlet extends HttpServlet {
+
+        private static MimeTypes mimeTypes = new MimeTypes();
+        private static List<String> paths = new ArrayList<String>();
+
+        static {
+            paths.add("ie/baltimore/merlin-examples/merlin-xmldsig-twenty-three");
+        }
+
+        @Override
+        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+            String requestLine = req.getRequestURL().toString();
+            String file = requestLine.substring(requestLine.lastIndexOf('/'));
+            for (int i = 0; i < paths.size(); i++) {
+                String s = paths.get(i);
+                InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(s + "/" + file);
+                if (inputStream != null) {
+
+                    Buffer mime = mimeTypes.getMimeByExtension(req.getPathInfo());
+                    if (mime != null) {
+                        resp.setContentType(mime.toString());
+                    }
+                    IOUtils.copy(inputStream, resp.getOutputStream());
+                    inputStream.close();
+                    return;
+                }
+            }
+            resp.sendError(HttpServletResponse.SC_NOT_FOUND);
+        }
+    }
+}

Propchange: santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/utils/HttpRequestRedirectorProxy.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/utils/HttpRequestRedirectorProxy.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision