SWS-517 - Soap response validation errors after update to 1.5.7

This commit is contained in:
Arjen Poutsma
2009-08-14 10:52:35 +00:00
parent b34aac3107
commit 004ebb1162
4 changed files with 356 additions and 112 deletions

View File

@@ -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);
}
}
}

View File

@@ -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()

View File

@@ -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));
}
}