diff --git a/core/src/test/resources/org/springframework/ws/soap/server/endpoint/interceptor/axiom.xml b/core/src/test/resources/org/springframework/ws/soap/server/endpoint/interceptor/axiom.xml index 90229524..41f55870 100644 --- a/core/src/test/resources/org/springframework/ws/soap/server/endpoint/interceptor/axiom.xml +++ b/core/src/test/resources/org/springframework/ws/soap/server/endpoint/interceptor/axiom.xml @@ -1,16 +1,34 @@ - + - 15 - Jmeter + 1319 + 000 - + + + + + + + + + + + + + + + + + @@ -21,8 +39,8 @@ - 92 - InScopeKey_4 + 1317 + 000 Certification Levels @@ -31,100 +49,25 @@ - + + + + + + + + + + + - 102 - GenericMetadata_02 - - - - - - - - - - - - - - - - 118 - c0ff2857-ba32-4a51-817a-a2ebc7c1c543 - - - - - - - - - - - - - - - - 5 - 0a854989-4583-4122-b803-29e8b18f3521 - - - - - - - - - - - - - - - - 3 - fa9e3938-b00e-4b7d-bae4-5c59df73ed22 - - - - - - - - - - - - - - - - 2 - OBADEIPNumber - - - - - - - - - - - - - - - - 101 - GenericMetdata_04 + 1300 + 00 Admin Global Key @@ -141,7 +84,7 @@ 1 - OBADECode + obadeCode @@ -157,8 +100,8 @@ - 7 - e2428c7f-1639-46d9-bace-41d0231a15e3 + 182 + BuildVersion @@ -174,8 +117,116 @@ - 9 - 32c2252b-b564-45f3-8257-8d6af7c5b4dc + 1318 + 000 Statuses + + + + + + + + + + + + + + + + + + + + + + 1308 + 00 Non Admin Scoped Key + + + + + + + + + + + + + + + + 1307 + 00 Non Admin Global Key + + + + + + + + + + + + + + + + 1314 + 000 Compiler Targets + + + + + + + + + + + + + + + + 2 + obadeIPNumber + + + + + + + + + + + + + + + + 183 + Sources + + + + + + + + + + + + + + + + 294 + Disc Part Number @@ -192,7 +243,7 @@ 11 - 3582d17e-bcaf-44f8-8fda-f623babc25b2 + Checksum @@ -208,8 +259,125 @@ - 13 - 862ba9d6-be01-4ea6-99da-90102af83e29 + 1320 + 000 Languages + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1322 + 000 Formats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1174 + Lou @@ -225,8 +393,9 @@ - 99 - InScopeKey_11 + 1377 + Long Global Key + cDTBnlbjNWhSNpHuUcjZvBbzIDOKTIQIksQQNyixKoAMHreSVWqHGLuCxPHuIkvbmFvxuWwBzZgrFsDLbgyPhwPsWqApUyqzcspQpBRFuULXphERrKfYJCouNqYODAlziWWGfbvHhzfDdxjcsxZMQVrtJzIxVRDVjTgNCXIaVaZgIANvJIvTyBLDRD @@ -242,8 +411,32 @@ - 17 - Jmeter-Global2 + 1321 + 000 License Models + + + + + + + + + + + + + + + + + + + + + + + 1330 + 00 Admin Dates After Test @@ -260,8 +453,8 @@ - 4547 - 7525.500 + 4697 + 7606.000 diff --git a/xml/src/main/java/org/springframework/xml/namespace/SimpleNamespaceContext.java b/xml/src/main/java/org/springframework/xml/namespace/SimpleNamespaceContext.java index a4a80468..5d381744 100644 --- a/xml/src/main/java/org/springframework/xml/namespace/SimpleNamespaceContext.java +++ b/xml/src/main/java/org/springframework/xml/namespace/SimpleNamespaceContext.java @@ -118,6 +118,7 @@ public class SimpleNamespaceContext implements NamespaceContext { /** Removes all declared prefixes. */ public void clear() { + defaultNamespaceUri = ""; prefixToNamespaceUri.clear(); namespaceUriToPrefixes.clear(); } @@ -161,10 +162,18 @@ public class SimpleNamespaceContext implements NamespaceContext { defaultNamespaceUri = ""; } else { - String namespaceUri = (String) namespaceUriToPrefixes.get(prefix); + String namespaceUri = (String) prefixToNamespaceUri.get(prefix); List prefixes = getPrefixesInternal(namespaceUri); prefixes.remove(prefix); - namespaceUriToPrefixes.remove(prefixes); + } + } + + public boolean hasBinding(String prefix) { + if (XMLConstants.DEFAULT_NS_PREFIX.equals(prefix)) { + return !defaultNamespaceUri.equals(""); + } + else { + return prefixToNamespaceUri.containsKey(prefix); } } } diff --git a/xml/src/main/java/org/springframework/xml/stream/StaxStreamXmlReader.java b/xml/src/main/java/org/springframework/xml/stream/StaxStreamXmlReader.java index 7164f11d..33538204 100644 --- a/xml/src/main/java/org/springframework/xml/stream/StaxStreamXmlReader.java +++ b/xml/src/main/java/org/springframework/xml/stream/StaxStreamXmlReader.java @@ -183,8 +183,7 @@ public class StaxStreamXmlReader extends AbstractStaxXmlReader { if (prefix == null) { prefix = ""; } - getContentHandler().endPrefixMapping(prefix); - namespaceContext.removeBinding(prefix); + endPrefixMapping(prefix); } } else { @@ -193,6 +192,13 @@ public class StaxStreamXmlReader extends AbstractStaxXmlReader { } } + private void endPrefixMapping(String prefix) throws SAXException { + if (namespaceContext.hasBinding(prefix)) { + getContentHandler().endPrefixMapping(prefix); + namespaceContext.removeBinding(prefix); + } + } + private void handleCharacters() throws SAXException { if (getContentHandler() != null && reader.isWhiteSpace()) { getContentHandler() diff --git a/xml/src/test/java/org/springframework/xml/namespace/SimpleNamespaceContextTest.java b/xml/src/test/java/org/springframework/xml/namespace/SimpleNamespaceContextTest.java index 2c72a62c..09d694a0 100644 --- a/xml/src/test/java/org/springframework/xml/namespace/SimpleNamespaceContextTest.java +++ b/xml/src/test/java/org/springframework/xml/namespace/SimpleNamespaceContextTest.java @@ -101,4 +101,40 @@ public class SimpleNamespaceContextTest extends TestCase { context.setBindings(Collections.singletonMap("prefix", "namespace")); assertEquals("Invalid namespace uri", "namespace", context.getNamespaceURI("prefix")); } + + public void testRemoveBinding() { + context.clear(); + String prefix1 = "prefix1"; + String prefix2 = "prefix2"; + String namespaceUri = "namespaceUri"; + context.bindNamespaceUri(prefix1, namespaceUri); + context.bindNamespaceUri(prefix2, namespaceUri); + Iterator iter = context.getPrefixes(namespaceUri); + assertTrue("iterator is empty", iter.hasNext()); + assertEquals(prefix1, iter.next()); + assertTrue("iterator is empty", iter.hasNext()); + assertEquals(prefix2, iter.next()); + assertFalse("iterator not empty", iter.hasNext()); + + context.removeBinding(prefix1); + + iter = context.getPrefixes(namespaceUri); + assertTrue("iterator is empty", iter.hasNext()); + assertEquals(prefix2, iter.next()); + assertFalse("iterator not empty", iter.hasNext()); + + context.removeBinding(prefix2); + + iter = context.getPrefixes(namespaceUri); + assertFalse("iterator not empty", iter.hasNext()); + } + + public void testHasBinding() { + context.clear(); + String prefix = "prefix"; + assertFalse("Context has binding", context.hasBinding(prefix)); + String namespaceUri = "namespaceUri"; + context.bindNamespaceUri(prefix, namespaceUri); + assertTrue("Context has no binding", context.hasBinding(prefix)); + } }