Return-Path: X-Original-To: apmail-cxf-commits-archive@www.apache.org Delivered-To: apmail-cxf-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 9437F9AB2 for ; Tue, 20 Dec 2011 11:27:22 +0000 (UTC) Received: (qmail 30139 invoked by uid 500); 20 Dec 2011 11:27:22 -0000 Delivered-To: apmail-cxf-commits-archive@cxf.apache.org Received: (qmail 30090 invoked by uid 500); 20 Dec 2011 11:27:22 -0000 Mailing-List: contact commits-help@cxf.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cxf.apache.org Delivered-To: mailing list commits@cxf.apache.org Received: (qmail 30083 invoked by uid 99); 20 Dec 2011 11:27:22 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 20 Dec 2011 11:27:22 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 20 Dec 2011 11:27:21 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 6B3982388A29 for ; Tue, 20 Dec 2011 11:27:00 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1221204 - in /cxf/trunk/rt/frontend/jaxrs/src: main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java test/java/org/apache/cxf/jaxrs/Customer.java test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java Date: Tue, 20 Dec 2011 11:27:00 -0000 To: commits@cxf.apache.org From: sergeyb@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20111220112700.6B3982388A29@eris.apache.org> Author: sergeyb Date: Tue Dec 20 11:26:59 2011 New Revision: 1221204 URL: http://svn.apache.org/viewvc?rev=1221204&view=rev Log: [CXF-3984] Better support for Locale parameters Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/Customer.java cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java?rev=1221204&r1=1221203&r2=1221204&view=diff ============================================================================== --- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java (original) +++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java Tue Dec 20 11:26:59 2011 @@ -41,6 +41,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.ResourceBundle; import java.util.Set; @@ -323,7 +324,10 @@ public final class InjectionUtils { adapterHasToBeUsed = true; } - Object result = null; + Object result = instantiateFromParameterHandler(value, pClass, message); + if (result != null) { + return result; + } // check constructors accepting a single String value try { Constructor c = pClass.getConstructor(new Class[]{String.class}); @@ -374,6 +378,19 @@ public final class InjectionUtils { return result; } + private static Object instantiateFromParameterHandler(String value, + Class pClass, + Message message) { + // TODO: Consider always checking custom parameter handlers first. + // Right now, Locale and Date are two special cases so it's very cheap + // just to check if it is Locale or not; + if (Locale.class == pClass) { + return createFromParameterHandler(value, pClass, message); + } else { + return null; + } + } + private static Object createFromParameterHandler(String value, Class pClass, Message message) { Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/Customer.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/Customer.java?rev=1221204&r1=1221203&r2=1221204&view=diff ============================================================================== --- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/Customer.java (original) +++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/Customer.java Tue Dec 20 11:26:59 2011 @@ -21,6 +21,7 @@ package org.apache.cxf.jaxrs; import java.util.HashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.UUID; @@ -187,6 +188,10 @@ public class Customer extends AbstractCu } + public void testLocaleParam(@QueryParam("p1") Locale l) { + + } + public void testXmlAdapter(@QueryParam("a") @XmlJavaTypeAdapter(CustomerBeanAdapter.class) CustomerBean cb) { Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java?rev=1221204&r1=1221203&r2=1221204&view=diff ============================================================================== --- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java (original) +++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java Tue Dec 20 11:26:59 2011 @@ -27,6 +27,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; +import java.util.Locale; import java.util.UUID; import javax.servlet.ServletConfig; @@ -62,6 +63,7 @@ import org.apache.cxf.jaxrs.JAXRSService import org.apache.cxf.jaxrs.JAXRSServiceImpl; import org.apache.cxf.jaxrs.SimpleFactory; import org.apache.cxf.jaxrs.Timezone; +import org.apache.cxf.jaxrs.ext.ParameterHandler; import org.apache.cxf.jaxrs.impl.HttpHeadersImpl; import org.apache.cxf.jaxrs.impl.HttpServletResponseFilter; import org.apache.cxf.jaxrs.impl.MetadataMap; @@ -88,6 +90,7 @@ import org.apache.cxf.message.Message; import org.apache.cxf.message.MessageImpl; import org.apache.cxf.transport.http.AbstractHTTPDestination; import org.easymock.EasyMock; + import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -815,6 +818,24 @@ public class JAXRSUtilsTest extends Asse } @Test + public void testLocaleParameter() throws Exception { + Message messageImpl = createMessage(); + ProviderFactory.getInstance(messageImpl).registerUserProvider( + new LocaleParameterHandler()); + Class[] argType = {Locale.class}; + Method m = Customer.class.getMethod("testLocaleParam", argType); + + messageImpl.put(Message.QUERY_STRING, "p1=en_us"); + List params = JAXRSUtils.processParameters(new OperationResourceInfo(m, null), + null, + messageImpl); + assertEquals(1, params.size()); + Locale l = (Locale)params.get(0); + assertEquals("en", l.getLanguage()); + assertEquals("US", l.getCountry()); + } + + @Test public void testConstructorFirstAndParameterHandler() throws Exception { Message messageImpl = createMessage(); ProviderFactory.getInstance(messageImpl).registerUserProvider( @@ -1754,4 +1775,13 @@ public class JAXRSUtilsTest extends Asse e.put(Endpoint.class, endpoint); return m; } + + private static class LocaleParameterHandler implements ParameterHandler { + + public Locale fromString(String s) { + String[] values = s.split("_"); + return values.length == 2 ? new Locale(values[0], values[1]) : new Locale(s); + } + + } }