You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ro...@apache.org on 2008/07/23 22:23:58 UTC
svn commit: r679188 - in /webservices/axis2/trunk/java/modules:
jaxws/src/org/apache/axis2/jaxws/spi/handler/BaseHandlerResolver.java
metadata/src/org/apache/axis2/jaxws/description/impl/HandlerChainsParser.java
Author: rott
Date: Wed Jul 23 13:23:58 2008
New Revision: 679188
URL: http://svn.apache.org/viewvc?rev=679188&view=rev
Log:
BaseHandlerResolver should use namespaceURI, not prefix, for handler chain service-name-pattern and port-name-pattern matching.
Modified:
webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/spi/handler/BaseHandlerResolver.java
webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/HandlerChainsParser.java
Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/spi/handler/BaseHandlerResolver.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/spi/handler/BaseHandlerResolver.java?rev=679188&r1=679187&r2=679188&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/spi/handler/BaseHandlerResolver.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/spi/handler/BaseHandlerResolver.java Wed Jul 23 13:23:58 2008
@@ -119,13 +119,39 @@
private static boolean doesPatternMatch(QName portInfoQName, QName pattern) {
if (pattern == null)
return true;
+ validatePattern(pattern);
// build up the strings according to the regular expression defined at http://java.sun.com/xml/ns/javaee/javaee_web_services_1_2.xsd
// use the prefix, not the literal namespace
- String portInfoPrefix = portInfoQName.getPrefix();
+ String portInfoPrefix = portInfoQName.getNamespaceURI(); //Prefix();
String portInfoLocalPart = portInfoQName.getLocalPart();
String portInfoString = ((portInfoPrefix == null) || (portInfoPrefix.equals(""))) ? "" : portInfoPrefix + ":";
portInfoString += portInfoLocalPart;
+ String patternStringPrefix = pattern.getNamespaceURI(); //Prefix();
+ String patternInfoLocalPart = pattern.getLocalPart();
+ String patternString = ((patternStringPrefix == null) || (patternStringPrefix.equals(""))) ? "" : patternStringPrefix + ":";
+ patternString += patternInfoLocalPart;
+
+ // now match the portInfoQName to the user pattern
+ // But first, convert the user pattern to a regular expression. Remember, the only non-QName character allowed is "*", which
+ // is a wildcard, with obvious restrictions on what characters can match (for example, a .java filename cannot contain perentheses).
+ // We'll just use part of the above reg ex to form the appropriate restrictions on the user-specified "*" character:
+ Pattern userp = Pattern.compile(patternString.replace("*", "(\\w|\\.|-|_)*"));
+ Matcher userm = userp.matcher(portInfoString);
+ boolean match = userm.matches();
+ if (log.isDebugEnabled()) {
+ if (!match) {
+ log.debug("Pattern match failed: \"" + portInfoString + "\" does not match \"" + patternString + "\"");
+ } else {
+ log.debug("Pattern match succeeded: \"" + portInfoString + "\" matches \"" + patternString + "\"");
+ }
+ }
+ return match;
+
+ }
+
+
+ private static void validatePattern(QName pattern) {
String patternStringPrefix = pattern.getPrefix();
String patternInfoLocalPart = pattern.getLocalPart();
String patternString = ((patternStringPrefix == null) || (patternStringPrefix.equals(""))) ? "" : patternStringPrefix + ":";
@@ -147,24 +173,7 @@
// pattern defined by user in handler chain xml file is illegal -- report it but continue
log.warn("Pattern defined by user is illegal: \"" + patternString + "\" does not match regular expression in schema http://java.sun.com/xml/ns/javaee/javaee_web_services_1_2.xsd. Pattern matching should now be considered \"best-effort.\"");
}
- // now match the portInfoQName to the user pattern
- // But first, convert the user pattern to a regular expression. Remember, the only non-QName character allowed is "*", which
- // is a wildcard, with obvious restrictions on what characters can match (for example, a .java filename cannot contain perentheses).
- // We'll just use part of the above reg ex to form the appropriate restrictions on the user-specified "*" character:
- Pattern userp = Pattern.compile(patternString.replace("*", "(\\w|\\.|-|_)*"));
- Matcher userm = userp.matcher(portInfoString);
- boolean match = userm.matches();
- if (log.isDebugEnabled()) {
- if (!match) {
- log.debug("Pattern match failed: \"" + portInfoString + "\" does not match \"" + patternString + "\"");
- } else {
- log.debug("Pattern match succeeded: \"" + portInfoString + "\" matches \"" + patternString + "\"");
- }
- }
- return match;
-
}
-
/**
* Return the class for this name
Modified: webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/HandlerChainsParser.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/HandlerChainsParser.java?rev=679188&r1=679187&r2=679188&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/HandlerChainsParser.java (original)
+++ webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/description/impl/HandlerChainsParser.java Wed Jul 23 13:23:58 2008
@@ -103,13 +103,17 @@
private QName processPatternElement(Element el) throws Exception {
String namePattern = el.getTextContent().trim();
+
+ // see BaseHandlerResolver.validatePattern for valid strings
+
if ("*".equals(namePattern)) {
return new QName("*");
}
if (!namePattern.contains(":")) {
- throw new WebServiceException("Not a qname pattern");
+ return new QName("", namePattern, "");
}
+
String localPart = namePattern.substring(namePattern.indexOf(':') + 1,
namePattern.length());
String pfx = namePattern.substring(0, namePattern.indexOf(':'));
@@ -117,7 +121,9 @@
if (ns == null) {
ns = pfx;
}
- return new QName(ns, localPart);
+ // populate prefix so BaseHandlerResolver.validatePattern can validate it
+ // QName ctor is QName(namespace, localpart, prefix)
+ return new QName(ns, localPart, pfx);
}
private HandlerType processHandlerElement(Element el) throws Exception {