SWS-521 - UnsupportedOperationException During Validation After Upgrade From 1.5.6 to 1.5.7
This commit is contained in:
@@ -325,4 +325,22 @@ public class PayloadValidatingInterceptorTest extends XMLTestCase {
|
||||
|
||||
}
|
||||
|
||||
public void testMultipleNamespacesAxiom() throws Exception {
|
||||
AxiomSoapMessageFactory messageFactory = new AxiomSoapMessageFactory();
|
||||
messageFactory.setPayloadCaching(true);
|
||||
messageFactory.afterPropertiesSet();
|
||||
|
||||
PayloadValidatingInterceptor interceptor = new PayloadValidatingInterceptor();
|
||||
interceptor.setSchema(new ClassPathResource("multipleNamespaces.xsd", getClass()));
|
||||
interceptor.afterPropertiesSet();
|
||||
|
||||
Resource resource = new ClassPathResource("multipleNamespaces.xml", getClass());
|
||||
TransportInputStream tis = new MockTransportInputStream(resource.getInputStream());
|
||||
WebServiceMessage message = messageFactory.createWebServiceMessage(tis);
|
||||
MessageContext context = new DefaultMessageContext(message, messageFactory);
|
||||
boolean result = interceptor.handleRequest(context, null);
|
||||
assertTrue("Invalid response from interceptor", result);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
|
||||
<soapenv:Body>
|
||||
<r:GetAllRuleSetsRequest xmlns="http://springframework.org/spring-ws"
|
||||
xmlns:r="http://springframework.org/spring-ws"/>
|
||||
</soapenv:Body>
|
||||
</soapenv:Envelope>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<schema xmlns="http://www.w3.org/2001/XMLSchema"
|
||||
targetNamespace="http://springframework.org/spring-ws"
|
||||
xmlns:tns="http://springframework.org/spring-ws" elementFormDefault="qualified">
|
||||
|
||||
<element name="GetAllRuleSetsRequest" />
|
||||
|
||||
</schema>
|
||||
@@ -22,6 +22,8 @@ import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.HashSet;
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.namespace.NamespaceContext;
|
||||
|
||||
@@ -42,8 +44,6 @@ public class SimpleNamespaceContext implements NamespaceContext {
|
||||
/** Maps a <code>String</code> namespaceUri to a <code>List</code> of prefixes */
|
||||
private Map namespaceUriToPrefixes = new HashMap();
|
||||
|
||||
private String defaultNamespaceUri = "";
|
||||
|
||||
public String getNamespaceURI(String prefix) {
|
||||
Assert.notNull(prefix, "prefix is null");
|
||||
if (XMLConstants.XML_NS_PREFIX.equals(prefix)) {
|
||||
@@ -52,13 +52,10 @@ public class SimpleNamespaceContext implements NamespaceContext {
|
||||
else if (XMLConstants.XMLNS_ATTRIBUTE.equals(prefix)) {
|
||||
return XMLConstants.XMLNS_ATTRIBUTE_NS_URI;
|
||||
}
|
||||
else if (XMLConstants.DEFAULT_NS_PREFIX.equals(prefix)) {
|
||||
return defaultNamespaceUri;
|
||||
}
|
||||
else if (prefixToNamespaceUri.containsKey(prefix)) {
|
||||
return (String) prefixToNamespaceUri.get(prefix);
|
||||
}
|
||||
return "";
|
||||
return XMLConstants.NULL_NS_URI;
|
||||
}
|
||||
|
||||
public String getPrefix(String namespaceUri) {
|
||||
@@ -100,9 +97,7 @@ public class SimpleNamespaceContext implements NamespaceContext {
|
||||
public void bindNamespaceUri(String prefix, String namespaceUri) {
|
||||
Assert.notNull(prefix, "No prefix given");
|
||||
Assert.notNull(namespaceUri, "No namespaceUri given");
|
||||
if (XMLConstants.DEFAULT_NS_PREFIX.equals(prefix)) {
|
||||
defaultNamespaceUri = namespaceUri;
|
||||
} else if (XMLConstants.XML_NS_PREFIX.equals(prefix)) {
|
||||
if (XMLConstants.XML_NS_PREFIX.equals(prefix)) {
|
||||
Assert.isTrue(XMLConstants.XML_NS_URI.equals(namespaceUri), "Prefix \"" + prefix +
|
||||
"\" bound to namespace \"" + namespaceUri + "\" (should be \"" + XMLConstants.XML_NS_URI + "\")");
|
||||
} else if (XMLConstants.XMLNS_ATTRIBUTE.equals(prefix)) {
|
||||
@@ -118,7 +113,6 @@ public class SimpleNamespaceContext implements NamespaceContext {
|
||||
|
||||
/** Removes all declared prefixes. */
|
||||
public void clear() {
|
||||
defaultNamespaceUri = "";
|
||||
prefixToNamespaceUri.clear();
|
||||
namespaceUriToPrefixes.clear();
|
||||
}
|
||||
@@ -129,14 +123,13 @@ public class SimpleNamespaceContext implements NamespaceContext {
|
||||
* @return the declared prefixes
|
||||
*/
|
||||
public Iterator getBoundPrefixes() {
|
||||
return prefixToNamespaceUri.keySet().iterator();
|
||||
Set prefixes = new HashSet(prefixToNamespaceUri.keySet());
|
||||
prefixes.remove(XMLConstants.DEFAULT_NS_PREFIX);
|
||||
return prefixes.iterator();
|
||||
}
|
||||
|
||||
private List getPrefixesInternal(String namespaceUri) {
|
||||
if (defaultNamespaceUri.equals(namespaceUri)) {
|
||||
return Collections.singletonList(XMLConstants.DEFAULT_NS_PREFIX);
|
||||
}
|
||||
else if (XMLConstants.XML_NS_URI.equals(namespaceUri)) {
|
||||
if (XMLConstants.XML_NS_URI.equals(namespaceUri)) {
|
||||
return Collections.singletonList(XMLConstants.XML_NS_PREFIX);
|
||||
}
|
||||
else if (XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals(namespaceUri)) {
|
||||
@@ -158,22 +151,12 @@ public class SimpleNamespaceContext implements NamespaceContext {
|
||||
* @param prefix the prefix to be removed
|
||||
*/
|
||||
public void removeBinding(String prefix) {
|
||||
if (XMLConstants.DEFAULT_NS_PREFIX.equals(prefix)) {
|
||||
defaultNamespaceUri = "";
|
||||
}
|
||||
else {
|
||||
String namespaceUri = (String) prefixToNamespaceUri.get(prefix);
|
||||
List prefixes = getPrefixesInternal(namespaceUri);
|
||||
prefixes.remove(prefix);
|
||||
}
|
||||
String namespaceUri = (String) prefixToNamespaceUri.get(prefix);
|
||||
List prefixes = getPrefixesInternal(namespaceUri);
|
||||
prefixes.remove(prefix);
|
||||
}
|
||||
|
||||
public boolean hasBinding(String prefix) {
|
||||
if (XMLConstants.DEFAULT_NS_PREFIX.equals(prefix)) {
|
||||
return !defaultNamespaceUri.equals("");
|
||||
}
|
||||
else {
|
||||
return prefixToNamespaceUri.containsKey(prefix);
|
||||
}
|
||||
return prefixToNamespaceUri.containsKey(prefix);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,7 +48,8 @@ public class SimpleNamespaceContextTest extends TestCase {
|
||||
}
|
||||
|
||||
public void testGetPrefix() {
|
||||
assertEquals("Invalid prefix for default namespace", XMLConstants.DEFAULT_NS_PREFIX, context.getPrefix(""));
|
||||
context.bindDefaultNamespaceUri("defaultNamespaceURI");
|
||||
assertEquals("Invalid prefix for default namespace", XMLConstants.DEFAULT_NS_PREFIX, context.getPrefix("defaultNamespaceURI"));
|
||||
assertEquals("Invalid prefix for bound namespace", "prefix", context.getPrefix("namespaceURI"));
|
||||
assertNull("Invalid prefix for unbound namespace", context.getPrefix("unbound"));
|
||||
assertEquals("Invalid prefix for namespace", XMLConstants.XML_NS_PREFIX, context
|
||||
@@ -58,7 +59,8 @@ public class SimpleNamespaceContextTest extends TestCase {
|
||||
}
|
||||
|
||||
public void testGetPrefixes() {
|
||||
assertPrefixes("", XMLConstants.DEFAULT_NS_PREFIX);
|
||||
context.bindDefaultNamespaceUri("defaultNamespaceURI");
|
||||
assertPrefixes("defaultNamespaceURI", XMLConstants.DEFAULT_NS_PREFIX);
|
||||
assertPrefixes("namespaceURI", "prefix");
|
||||
assertFalse("Invalid prefix for unbound namespace", context.getPrefixes("unbound").hasNext());
|
||||
assertPrefixes(XMLConstants.XML_NS_URI, XMLConstants.XML_NS_PREFIX);
|
||||
@@ -137,4 +139,21 @@ public class SimpleNamespaceContextTest extends TestCase {
|
||||
context.bindNamespaceUri(prefix, namespaceUri);
|
||||
assertTrue("Context has no binding", context.hasBinding(prefix));
|
||||
}
|
||||
|
||||
public void testDefaultNamespaceMultiplePrefixes() {
|
||||
String defaultNamespace = "http://springframework.org/spring-ws";
|
||||
context.bindDefaultNamespaceUri(defaultNamespace);
|
||||
context.bindNamespaceUri("prefix", defaultNamespace);
|
||||
assertEquals("Invalid prefix", XMLConstants.DEFAULT_NS_PREFIX, context.getPrefix(defaultNamespace));
|
||||
Iterator iterator = context.getPrefixes(defaultNamespace);
|
||||
assertNotNull("getPrefixes returns null", iterator);
|
||||
assertTrue("iterator is empty", iterator.hasNext());
|
||||
String result = (String) iterator.next();
|
||||
assertTrue("Invalid prefix", result.equals(XMLConstants.DEFAULT_NS_PREFIX) || result.equals("prefix"));
|
||||
assertTrue("iterator is empty", iterator.hasNext());
|
||||
result = (String) iterator.next();
|
||||
assertTrue("Invalid prefix", result.equals(XMLConstants.DEFAULT_NS_PREFIX) || result.equals("prefix"));
|
||||
assertFalse("iterator contains more than two values", iterator.hasNext());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user