SWS-517 - Soap response validation errors after update to 1.5.7
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user