You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2012/11/28 18:17:38 UTC

svn commit: r1414828 - in /cxf/branches/2.6.x-fixes: ./ rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/servlet/ rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/ systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/ systests...

Author: sergeyb
Date: Wed Nov 28 17:17:36 2012
New Revision: 1414828

URL: http://svn.apache.org/viewvc?rev=1414828&view=rev
Log:
Merged revisions 1414825 via svnmerge from 
https://svn.apache.org/repos/asf/cxf/trunk

........
  r1414825 | sergeyb | 2012-11-28 17:13:36 +0000 (Wed, 28 Nov 2012) | 1 line
  
  [CXF-4660] Making it posible to set primitive and list properties of providers at the servlet configuration level
........

Modified:
    cxf/branches/2.6.x-fixes/   (props changed)
    cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/servlet/CXFNonSpringJaxrsServlet.java
    cxf/branches/2.6.x-fixes/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java
    cxf/branches/2.6.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookApplication.java
    cxf/branches/2.6.x-fixes/systests/jaxrs/src/test/resources/jaxrs_non_spring/WEB-INF/web.xml

Propchange: cxf/branches/2.6.x-fixes/
------------------------------------------------------------------------------
    svn:mergeinfo = /cxf/trunk:1414825

Propchange: cxf/branches/2.6.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/servlet/CXFNonSpringJaxrsServlet.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/servlet/CXFNonSpringJaxrsServlet.java?rev=1414828&r1=1414827&r2=1414828&view=diff
==============================================================================
--- cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/servlet/CXFNonSpringJaxrsServlet.java (original)
+++ cxf/branches/2.6.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/servlet/CXFNonSpringJaxrsServlet.java Wed Nov 28 17:17:36 2012
@@ -24,6 +24,7 @@ import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.logging.Logger;
@@ -121,7 +122,7 @@ public class CXFNonSpringJaxrsServlet ex
         setAllInterceptors(bean, servletConfig, splitChar);
         setInvoker(bean, servletConfig);
         
-        Map<Class<?>, Map<String, String>> resourceClasses = 
+        Map<Class<?>, Map<String, List<String>>> resourceClasses = 
             getServiceClasses(servletConfig, modelRef != null, splitChar);
         Map<Class<?>, ResourceProvider> resourceProviders = 
             getResourceProviders(servletConfig, resourceClasses);
@@ -209,7 +210,7 @@ public class CXFNonSpringJaxrsServlet ex
         String[] values = value.split(splitChar);
         List<Interceptor<? extends Message>> list = new ArrayList<Interceptor<? extends Message>>();
         for (String interceptorVal : values) {
-            Map<String, String> props = new HashMap<String, String>();
+            Map<String, List<String>> props = new HashMap<String, List<String>>();
             String theValue = getClassNameAndProperties(interceptorVal, props);
             if (theValue.length() != 0) {
                 try {
@@ -242,7 +243,7 @@ public class CXFNonSpringJaxrsServlet ex
         if (value == null) {
             return;
         }
-        Map<String, String> props = new HashMap<String, String>();
+        Map<String, List<String>> props = new HashMap<String, List<String>>();
         String theValue = getClassNameAndProperties(value, props);
         if (theValue.length() != 0) {
             try {
@@ -261,7 +262,7 @@ public class CXFNonSpringJaxrsServlet ex
         
     }
     
-    protected Map<Class<?>, Map<String, String>> getServiceClasses(ServletConfig servletConfig,
+    protected Map<Class<?>, Map<String, List<String>>> getServiceClasses(ServletConfig servletConfig,
                                             boolean modelAvailable,
                                             String splitChar) throws ServletException {
         String serviceBeans = servletConfig.getInitParameter(SERVICE_CLASSES_PARAM);
@@ -272,9 +273,10 @@ public class CXFNonSpringJaxrsServlet ex
             throw new ServletException("At least one resource class should be specified");
         }
         String[] classNames = serviceBeans.split(splitChar);
-        Map<Class<?>, Map<String, String>> map = new HashMap<Class<?>, Map<String, String>>();
+        Map<Class<?>, Map<String, List<String>>> map = 
+            new HashMap<Class<?>, Map<String, List<String>>>();
         for (String cName : classNames) {
-            Map<String, String> props = new HashMap<String, String>();
+            Map<String, List<String>> props = new HashMap<String, List<String>>();
             String theName = getClassNameAndProperties(cName, props);
             if (theName.length() != 0) {
                 Class<?> cls = loadClass(theName);
@@ -295,7 +297,7 @@ public class CXFNonSpringJaxrsServlet ex
         String[] classNames = providersList.split(splitChar);
         List<Object> providers = new ArrayList<Object>();
         for (String cName : classNames) {
-            Map<String, String> props = new HashMap<String, String>();
+            Map<String, List<String>> props = new HashMap<String, List<String>>();
             String theName = getClassNameAndProperties(cName, props);
             if (theName.length() != 0) {
                 Class<?> cls = loadClass(theName);
@@ -305,18 +307,51 @@ public class CXFNonSpringJaxrsServlet ex
         return providers;
     }
     
-    private String getClassNameAndProperties(String cName, Map<String, String> props) {
+    private String getClassNameAndProperties(String cName, Map<String, List<String>> props) {
         String theName = cName.trim();
         int ind = theName.indexOf("(");
         if (ind != -1 && theName.endsWith(")")) {
-            props.putAll(parseMapSequence(theName.substring(ind + 1, theName.length() - 1)));
+            props.putAll(parseMapListSequence(theName.substring(ind + 1, theName.length() - 1)));
             theName = theName.substring(0, ind).trim();
         }
         return theName;
     }
     
+    protected static Map<String, List<String>> parseMapListSequence(String sequence) {
+        if (sequence != null) {
+            sequence = sequence.trim();
+            Map<String, List<String>> map = new HashMap<String, List<String>>();
+            String[] pairs = sequence.split(" ");
+            for (String pair : pairs) {
+                String thePair = pair.trim();
+                if (thePair.length() == 0) {
+                    continue;
+                }
+                String[] values = thePair.split("=");
+                String key;
+                String value;
+                if (values.length == 2) {
+                    key = values[0].trim();
+                    value = values[1].trim();
+                } else {
+                    key = thePair;
+                    value = "";
+                }
+                List<String> list = map.get(key);
+                if (list == null) {
+                    list = new LinkedList<String>();
+                    map.put(key, list);
+                }
+                list.add(value);
+            }
+            return map;
+        } else {
+            return Collections.emptyMap();
+        }
+    }
+    
     protected Map<Class<?>, ResourceProvider> getResourceProviders(ServletConfig servletConfig,
-            Map<Class<?>, Map<String, String>> resourceClasses) throws ServletException {
+            Map<Class<?>, Map<String, List<String>>> resourceClasses) throws ServletException {
         String scope = servletConfig.getInitParameter(SERVICE_SCOPE_PARAM);
         if (scope != null && !SERVICE_SCOPE_SINGLETON.equals(scope)
             && !SERVICE_SCOPE_REQUEST.equals(scope)) {
@@ -324,7 +359,7 @@ public class CXFNonSpringJaxrsServlet ex
         }
         boolean isPrototype = SERVICE_SCOPE_REQUEST.equals(scope);
         Map<Class<?>, ResourceProvider> map = new HashMap<Class<?>, ResourceProvider>();
-        for (Map.Entry<Class<?>, Map<String, String>> entry : resourceClasses.entrySet()) {
+        for (Map.Entry<Class<?>, Map<String, List<String>>> entry : resourceClasses.entrySet()) {
             Class<?> c = entry.getKey();
             map.put(c, isPrototype ? new PerRequestResourceProvider(c)
                                    : new SingletonResourceProvider(
@@ -335,7 +370,7 @@ public class CXFNonSpringJaxrsServlet ex
     }    
     
     
-    protected Object createSingletonInstance(Class<?> cls, Map<String, String> props, ServletConfig sc) 
+    protected Object createSingletonInstance(Class<?> cls, Map<String, List<String>> props, ServletConfig sc) 
         throws ServletException {
         Constructor<?> c = ResourceUtils.findResourceConstructor(cls, false);
         if (c == null) {
@@ -370,7 +405,7 @@ public class CXFNonSpringJaxrsServlet ex
         }
     }
     
-    private void injectProperties(Object instance, Map<String, String> props) {
+    private void injectProperties(Object instance, Map<String, List<String>> props) {
         if (props == null || props.isEmpty()) {
             return;
         }
@@ -379,16 +414,16 @@ public class CXFNonSpringJaxrsServlet ex
         for (Method m : methods) {
             methodsMap.put(m.getName(), m);
         }
-        for (Map.Entry<String, String> entry : props.entrySet()) {
+        for (Map.Entry<String, List<String>> entry : props.entrySet()) {
             Method m = methodsMap.get("set" + Character.toUpperCase(entry.getKey().charAt(0))
                            + entry.getKey().substring(1));
             if (m != null) {
                 Class<?> type = m.getParameterTypes()[0];
-                Object value = entry.getValue();
+                Object value;
                 if (InjectionUtils.isPrimitive(type)) {
-                    value = PrimitiveUtils.read(entry.getValue(), type);
-                } else if (List.class.isAssignableFrom(type)) {
-                    value = Collections.singletonList(value);
+                    value = PrimitiveUtils.read(entry.getValue().get(0), type);
+                } else {
+                    value = entry.getValue();
                 } 
                 InjectionUtils.injectThroughMethod(instance, m, value);
             }
@@ -402,7 +437,7 @@ public class CXFNonSpringJaxrsServlet ex
     protected void createServerFromApplication(String cName, ServletConfig servletConfig,
                                                String splitChar) 
         throws ServletException {
-        Map<String, String> props = new HashMap<String, String>();
+        Map<String, List<String>> props = new HashMap<String, List<String>>();
         cName = getClassNameAndProperties(cName, props);
         Class<?> appClass = loadClass(cName, "Application");
         Application app = (Application)createSingletonInstance(appClass, props, servletConfig);

Modified: cxf/branches/2.6.x-fixes/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java?rev=1414828&r1=1414827&r2=1414828&view=diff
==============================================================================
--- cxf/branches/2.6.x-fixes/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java (original)
+++ cxf/branches/2.6.x-fixes/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java Wed Nov 28 17:17:36 2012
@@ -123,11 +123,15 @@ public abstract class AbstractHTTPServle
             Map<String, String> map = new HashMap<String, String>();
             String[] pairs = sequence.split(" ");
             for (String pair : pairs) {
-                String[] value = pair.split("=");
+                String thePair = pair.trim();
+                if (thePair.length() == 0) {
+                    continue;
+                }
+                String[] value = thePair.split("=");
                 if (value.length == 2) {
                     map.put(value[0].trim(), value[1].trim());
                 } else {
-                    map.put(pair.trim(), "");
+                    map.put(thePair, "");
                 }
             }
             return map;

Modified: cxf/branches/2.6.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookApplication.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookApplication.java?rev=1414828&r1=1414827&r2=1414828&view=diff
==============================================================================
--- cxf/branches/2.6.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookApplication.java (original)
+++ cxf/branches/2.6.x-fixes/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookApplication.java Wed Nov 28 17:17:36 2012
@@ -19,6 +19,7 @@
 package org.apache.cxf.systest.jaxrs;
 
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 
 import javax.servlet.ServletContext;
@@ -68,7 +69,11 @@ public class BookApplication extends App
         defaultName = name;
     }
     
-    public void setDefaultId(long id) {
-        defaultId = id;
+    public void setDefaultId(List<String> ids) {
+        StringBuilder sb = new StringBuilder();
+        for (String id : ids) {
+            sb.append(id);
+        }
+        defaultId = Long.valueOf(sb.toString());
     }
 }

Modified: cxf/branches/2.6.x-fixes/systests/jaxrs/src/test/resources/jaxrs_non_spring/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/cxf/branches/2.6.x-fixes/systests/jaxrs/src/test/resources/jaxrs_non_spring/WEB-INF/web.xml?rev=1414828&r1=1414827&r2=1414828&view=diff
==============================================================================
--- cxf/branches/2.6.x-fixes/systests/jaxrs/src/test/resources/jaxrs_non_spring/WEB-INF/web.xml (original)
+++ cxf/branches/2.6.x-fixes/systests/jaxrs/src/test/resources/jaxrs_non_spring/WEB-INF/web.xml Wed Nov 28 17:17:36 2012
@@ -43,7 +43,12 @@
 		<init-param>
 		      <param-name>jaxrs.providers</param-name>
 		      <param-value>
-		           org.apache.cxf.jaxrs.provider.json.JSONProvider(dropRootElement=false attributesToElements=true),
+		           org.apache.cxf.jaxrs.provider.json.JSONProvider(
+		             dropRootElement=false 
+		             attributesToElements=true
+		             arrayKeys=a
+		             arrayKeys=b
+		           ),
 		           org.apache.cxf.jaxrs.provider.JAXBElementProvider
 		      </param-value>    
 		</init-param>