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/10/16 17:22:54 UTC

svn commit: r1398845 - in /santuario/xml-security-java/trunk/src: main/java/org/apache/xml/security/stax/ext/ main/java/org/apache/xml/security/stax/ext/stax/ main/java/org/apache/xml/security/stax/impl/ main/java/org/apache/xml/security/stax/impl/stax...

Author: giger
Date: Tue Oct 16 15:22:53 2012
New Revision: 1398845

URL: http://svn.apache.org/viewvc?rev=1398845&view=rev
Log:
stax-parser compatibility fixes

Modified:
    santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/ext/InboundXMLSec.java
    santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/ext/stax/XMLSecEventFactory.java
    santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/impl/XMLSecurityStreamWriter.java
    santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/impl/stax/XMLSecNamespaceImpl.java
    santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/transformer/TransformIdentityTest.java

Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/ext/InboundXMLSec.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/ext/InboundXMLSec.java?rev=1398845&r1=1398844&r2=1398845&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/ext/InboundXMLSec.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/ext/InboundXMLSec.java Tue Oct 16 15:22:53 2012
@@ -30,6 +30,7 @@ import org.apache.xml.security.stax.impl
 import org.apache.xml.security.stax.securityEvent.SecurityEvent;
 import org.apache.xml.security.stax.securityEvent.SecurityEventListener;
 
+import javax.xml.stream.Location;
 import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
@@ -126,7 +127,11 @@ public class InboundXMLSec {
 
         DocumentContextImpl documentContext = new DocumentContextImpl();
         documentContext.setEncoding(xmlStreamReader.getEncoding() != null ? xmlStreamReader.getEncoding() : "UTF-8");
-        documentContext.setBaseURI(xmlStreamReader.getLocation().getSystemId());
+        //woodstox 3.2.9 returns null when used with a DOMSource
+        Location location = xmlStreamReader.getLocation();
+        if (location != null) {
+            documentContext.setBaseURI(location.getSystemId());
+        }
         
         InputProcessorChainImpl inputProcessorChain = new InputProcessorChainImpl(securityContextImpl, documentContext);
         inputProcessorChain.addProcessor(new XMLEventReaderInputProcessor(securityProperties, xmlStreamReader));

Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/ext/stax/XMLSecEventFactory.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/ext/stax/XMLSecEventFactory.java?rev=1398845&r1=1398844&r2=1398845&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/ext/stax/XMLSecEventFactory.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/ext/stax/XMLSecEventFactory.java Tue Oct 16 15:22:53 2012
@@ -74,7 +74,8 @@ public class XMLSecEventFactory {
             case XMLStreamConstants.SPACE:
                 return new XMLSecCharactersImpl(xmlStreamReader.getText(), false, true, xmlStreamReader.isWhiteSpace(), parentXMLSecStartElement);
             case XMLStreamConstants.START_DOCUMENT:
-                return new XMLSecStartDocumentImpl(xmlStreamReader.getLocation().getSystemId(), xmlStreamReader.getEncoding(),
+                String systemId = xmlStreamReader.getLocation() != null ? xmlStreamReader.getLocation().getSystemId() : null;
+                return new XMLSecStartDocumentImpl(systemId, xmlStreamReader.getEncoding(),
                         xmlStreamReader.standaloneSet() ? xmlStreamReader.isStandalone() : null, xmlStreamReader.getVersion());
             case XMLStreamConstants.END_DOCUMENT:
                 return new XMLSecEndDocumentImpl();

Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/impl/XMLSecurityStreamWriter.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/impl/XMLSecurityStreamWriter.java?rev=1398845&r1=1398844&r2=1398845&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/impl/XMLSecurityStreamWriter.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/impl/XMLSecurityStreamWriter.java Tue Oct 16 15:22:53 2012
@@ -51,6 +51,7 @@ public class XMLSecurityStreamWriter imp
     private NamespaceContext namespaceContext;
     private final NamespaceContext defaultNamespaceContext;
     private boolean haveToWriteEndElement = false;
+    private boolean endDocumentWritten = false;
 
     public XMLSecurityStreamWriter(OutputProcessorChain outputProcessorChain) {
         this.outputProcessorChain = outputProcessorChain;
@@ -176,10 +177,12 @@ public class XMLSecurityStreamWriter imp
     public void writeStartElement(String namespaceURI, String localName) throws XMLStreamException {
         outputOpenStartElement();
         String prefix = getNamespaceContext().getPrefix(namespaceURI);
+        QName qName;
         if (prefix == null) {
-            throw new XMLStreamException("Unbound namespace URI '" + namespaceURI + "'");
+            qName = new QName(namespaceURI, localName);
+        } else {
+            qName = new QName(namespaceURI, localName, prefix);
         }
-        QName qName = new QName(namespaceURI, localName, prefix);
         startElementStack.push(qName);
         openStartElement = qName;
     }
@@ -217,15 +220,18 @@ public class XMLSecurityStreamWriter imp
     }
 
     public void writeEndDocument() throws XMLStreamException {
-        outputOpenStartElement();
-        Iterator<QName> startElements = startElementStack.iterator();
-        while (startElements.hasNext()) {
-            // Map<String, XMLSecNamespace> namespaceMap = nsStack.pop();
-            nsStack.pop();
-            //todo namespaces which are going out of scope for endElement?
-            chainProcessEvent(XMLSecEventFactory.createXmlSecEndElement(startElements.next()));
+        if (!endDocumentWritten) {
+            outputOpenStartElement();
+            Iterator<QName> startElements = startElementStack.iterator();
+            while (startElements.hasNext()) {
+                // Map<String, XMLSecNamespace> namespaceMap = nsStack.pop();
+                nsStack.pop();
+                //todo namespaces which are going out of scope for endElement?
+                chainProcessEvent(XMLSecEventFactory.createXmlSecEndElement(startElements.next()));
+            }
+            chainProcessEvent(XMLSecEventFactory.createXMLSecEndDocument());
+            endDocumentWritten = true;
         }
-        chainProcessEvent(XMLSecEventFactory.createXMLSecEndDocument());
     }
 
     public void close() throws XMLStreamException {
@@ -258,7 +264,12 @@ public class XMLSecurityStreamWriter imp
     }
 
     public void writeDefaultNamespace(String namespaceURI) throws XMLStreamException {
+        //workaround for sun's stax parser:
+        if (this.openStartElement != null && this.openStartElement.getPrefix().equals("")) {
+            this.openStartElement = new QName(namespaceURI, openStartElement.getLocalPart(), "");
+        }
         putNamespaceOntoStack("", XMLSecEventFactory.createXMLSecNamespace(null, namespaceURI));
+
     }
 
     public void writeComment(String data) throws XMLStreamException {
@@ -268,7 +279,7 @@ public class XMLSecurityStreamWriter imp
 
     public void writeProcessingInstruction(String target) throws XMLStreamException {
         outputOpenStartElement();
-        chainProcessEvent(XMLSecEventFactory.createXMLSecProcessingInstruction(target, null));
+        chainProcessEvent(XMLSecEventFactory.createXMLSecProcessingInstruction(target, ""));
     }
 
     public void writeProcessingInstruction(String target, String data) throws XMLStreamException {

Modified: santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/impl/stax/XMLSecNamespaceImpl.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/impl/stax/XMLSecNamespaceImpl.java?rev=1398845&r1=1398844&r2=1398845&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/impl/stax/XMLSecNamespaceImpl.java (original)
+++ santuario/xml-security-java/trunk/src/main/java/org/apache/xml/security/stax/impl/stax/XMLSecNamespaceImpl.java Tue Oct 16 15:22:53 2012
@@ -50,6 +50,10 @@ public class XMLSecNamespaceImpl extends
         if (prefix == null) {
             prefix = "";
         }
+        //sun's stax parser returns null for the default namespace
+        if (uri == null) {
+            uri = "";
+        }
         Map<String, XMLSecNamespace> nsMap = xmlSecNamespaceMap.get(prefix);
         if (nsMap != null) {
             XMLSecNamespace xmlSecNamespace = nsMap.get(uri);

Modified: santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/transformer/TransformIdentityTest.java
URL: http://svn.apache.org/viewvc/santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/transformer/TransformIdentityTest.java?rev=1398845&r1=1398844&r2=1398845&view=diff
==============================================================================
--- santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/transformer/TransformIdentityTest.java (original)
+++ santuario/xml-security-java/trunk/src/test/java/org/apache/xml/security/test/stax/transformer/TransformIdentityTest.java Tue Oct 16 15:22:53 2012
@@ -54,6 +54,7 @@ public class TransformIdentityTest exten
         Init.init(this.getClass().getClassLoader().getResource("security-config.xml").toURI());
         this.xmlInputFactory = XMLInputFactory.newInstance();
         this.xmlInputFactory.setEventAllocator(new XMLSecEventAllocator());
+        this.xmlInputFactory.setProperty(XMLInputFactory.IS_COALESCING, Boolean.TRUE);
     }
 
     @Test