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 {