Author: sergeyb
Date: Thu Jan 6 14:37:16 2011
New Revision: 1055895
URL: http://svn.apache.org/viewvc?rev=1055895&view=rev
Log:
[JAX-RS] Making sure ParameterHandlers are checked in case of String
constructors throwing exceptions
Added:
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/Customer2.java
(with props)
Modified:
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java
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/CustomerParameterHandler.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/client/WebClient.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java?rev=1055895&r1=1055894&r2=1055895&view=diff
==============================================================================
---
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java
(original)
+++
cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/client/WebClient.java
Thu Jan 6 14:37:16 2011
@@ -180,8 +180,7 @@ public class WebClient extends AbstractC
/**
* Creates WebClient, baseURI will be set to Client currentURI
* @param client existing client
- * @param inheritHeaders if existing Client headers can be inherited by
new proxy
- * and subresource proxies if any
+ * @param inheritHeaders if existing Client headers can be inherited by
new client
*/
public static WebClient fromClient(Client client, boolean inheritHeaders) {
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=1055895&r1=1055894&r2=1055895&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
Thu Jan 6 14:37:16 2011
@@ -318,7 +318,11 @@ public final class InjectionUtils {
// try valueOf
} catch (WebApplicationException ex) {
throw ex;
- } catch (Exception ex) {
+ } catch (Exception ex) {
+ Object result = createFromParameterHandler(value, pClass, message);
+ if (result != null) {
+ return result;
+ }
LOG.severe(new
org.apache.cxf.common.i18n.Message("CLASS_CONSTRUCTOR_FAILURE",
BUNDLE,
pClass.getName()).toString());
@@ -337,22 +341,31 @@ public final class InjectionUtils {
}
}
- if (result == null && message != null) {
+ if (result == null) {
+ result = createFromParameterHandler(value, pClass, message);
+ }
+
+ if (result == null) {
+ reportServerError("WRONG_PARAMETER_TYPE", pClass.getName());
+ }
+
+ return result;
+ }
+
+ private static Object createFromParameterHandler(String value,
+ Class<?> pClass,
+ Message message) {
+ Object result = null;
+ if (message != null) {
ParameterHandler<?> pm = ProviderFactory.getInstance(message)
.createParameterHandler(pClass);
if (pm != null) {
result = pm.fromString(value);
}
}
-
- if (result != null) {
- return result;
- }
-
- reportServerError("WRONG_PARAMETER_TYPE", pClass.getName());
- return null;
+ return result;
}
-
+
public static void reportServerError(String messageName, String parameter)
{
org.apache.cxf.common.i18n.Message errorMessage =
new org.apache.cxf.common.i18n.Message(messageName,
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=1055895&r1=1055894&r2=1055895&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
Thu Jan 6 14:37:16 2011
@@ -307,7 +307,9 @@ public class Customer extends AbstractCu
// complete
}
- public void testCustomerParam(@QueryParam("p1") Customer c,
@QueryParam("p2") Customer[] c2) {
+ public void testCustomerParam(@QueryParam("p1") Customer c,
+ @QueryParam("p2") Customer[] c2,
+ @QueryParam("p3") Customer2 c3) {
// complete
}
Added:
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/Customer2.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/Customer2.java?rev=1055895&view=auto
==============================================================================
---
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/Customer2.java
(added)
+++
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/Customer2.java
Thu Jan 6 14:37:16 2011
@@ -0,0 +1,35 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cxf.jaxrs;
+
+public class Customer2 extends Customer {
+
+ public Customer2() {
+
+ }
+
+ public Customer2(String name) {
+ if (Character.isLowerCase(((CharSequence)name).charAt(0))) {
+ throw new IllegalArgumentException();
+ }
+ //CHECKSTYLE:OFF
+ setName(name);
+ //CHECKSTYLE:ON
+ }
+}
Propchange:
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/Customer2.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/Customer2.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified:
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/CustomerParameterHandler.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/CustomerParameterHandler.java?rev=1055895&r1=1055894&r2=1055895&view=diff
==============================================================================
---
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/CustomerParameterHandler.java
(original)
+++
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/CustomerParameterHandler.java
Thu Jan 6 14:37:16 2011
@@ -24,7 +24,10 @@ import org.apache.cxf.jaxrs.ext.Paramete
public class CustomerParameterHandler implements ParameterHandler<Customer> {
public Customer fromString(String s) {
- Customer c = new Customer();
+ if ("noName".equals(s)) {
+ throw new IllegalArgumentException();
+ }
+ Customer c = Character.isLowerCase(((CharSequence)s).charAt(0)) ? new
Customer2() : new Customer();
c.setName(s);
return c;
}
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=1055895&r1=1055894&r2=1055895&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
Thu Jan 6 14:37:16 2011
@@ -47,6 +47,7 @@ import javax.xml.bind.JAXBContext;
import org.apache.cxf.endpoint.Endpoint;
import org.apache.cxf.jaxrs.Customer;
+import org.apache.cxf.jaxrs.Customer2;
import org.apache.cxf.jaxrs.CustomerGender;
import org.apache.cxf.jaxrs.CustomerParameterHandler;
import org.apache.cxf.jaxrs.JAXBContextProvider;
@@ -644,20 +645,49 @@ public class JAXRSUtilsTest extends Asse
Message messageImpl = createMessage();
ProviderFactory.getInstance(messageImpl).registerUserProvider(
new CustomerParameterHandler());
- Class[] argType = {Customer.class, Customer[].class};
+ Class[] argType = {Customer.class, Customer[].class, Customer2.class};
Method m = Customer.class.getMethod("testCustomerParam", argType);
- messageImpl.put(Message.QUERY_STRING, "p1=Fred&p2=Barry");
+ messageImpl.put(Message.QUERY_STRING,
"p1=Fred&p2=Barry&p3=Jack&p4=John");
List<Object> params = JAXRSUtils.processParameters(new
OperationResourceInfo(m, null),
null,
messageImpl);
- assertEquals(2, params.size());
+ assertEquals(3, params.size());
Customer c = (Customer)params.get(0);
assertEquals("Fred", c.getName());
Customer c2 = ((Customer[])params.get(1))[0];
assertEquals("Barry", c2.getName());
+ Customer2 c3 = (Customer2)params.get(2);
+ assertEquals("Jack", c3.getName());
+
+ try {
+ messageImpl.put(Message.QUERY_STRING, "p3=noName");
+ JAXRSUtils.processParameters(new OperationResourceInfo(m, null),
null, messageImpl);
+ fail("Customer2 constructor does not accept names starting with
lower-case chars");
+ } catch (Exception ex) {
+ // expected
+ }
+
+ }
+
+ @Test
+ public void testConstructorFirstAndParameterHandler() throws Exception {
+ Message messageImpl = createMessage();
+ ProviderFactory.getInstance(messageImpl).registerUserProvider(
+ new CustomerParameterHandler());
+ Class[] argType = {Customer.class, Customer[].class, Customer2.class};
+ Method m = Customer.class.getMethod("testCustomerParam", argType);
+
+ messageImpl.put(Message.QUERY_STRING, "p3=jack");
+ List<Object> params = JAXRSUtils.processParameters(new
OperationResourceInfo(m, null),
+ null,
+ messageImpl);
+ assertEquals(3, params.size());
+ Customer2 c3 = (Customer2)params.get(2);
+ assertEquals("jack", c3.getName());
}
+
@Test
public void testArrayParamNoProvider() throws Exception {
Message messageImpl = createMessage();