FAQ
Author: markt
Date: Wed Oct 29 23:02:44 2014
New Revision: 1635328

URL: http://svn.apache.org/r1635328
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=57148
When coercing an object to a given type and a PropertyEditor has been registered for the type correctly coerce the empty string to null if the PropertyEditor throws an exception.
Patch by kkolinko
Unit tests by markt

Added:
     tomcat/trunk/test/org/apache/el/lang/TesterBean.java (with props)
     tomcat/trunk/test/org/apache/el/lang/TesterType.java (with props)
     tomcat/trunk/test/org/apache/el/lang/TesterTypeEditorBase.java (with props)
     tomcat/trunk/test/org/apache/el/lang/TesterTypeEditorError.java (with props)
     tomcat/trunk/test/org/apache/el/lang/TesterTypeEditorNoError.java (with props)
Modified:
     tomcat/trunk/java/org/apache/el/lang/ELSupport.java
     tomcat/trunk/test/org/apache/el/lang/TestELSupport.java
     tomcat/trunk/webapps/docs/changelog.xml

Modified: tomcat/trunk/java/org/apache/el/lang/ELSupport.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/el/lang/ELSupport.java?rev=1635328&r1=1635327&r2=1635328&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/el/lang/ELSupport.java (original)
+++ tomcat/trunk/java/org/apache/el/lang/ELSupport.java Wed Oct 29 23:02:44 2014
@@ -465,12 +465,24 @@ public class ELSupport {
          if (obj == null)
              return null;
          if (obj instanceof String) {
- if ("".equals(obj))
- return null;
              PropertyEditor editor = PropertyEditorManager.findEditor(type);
- if (editor != null) {
- editor.setAsText((String) obj);
- return editor.getValue();
+ if (editor == null) {
+ if ("".equals(obj)) {
+ return null;
+ }
+ throw new ELException(MessageFactory.get("error.convert", obj,
+ obj.getClass(), type));
+ } else {
+ try {
+ editor.setAsText((String) obj);
+ return editor.getValue();
+ } catch (RuntimeException e) {
+ if ("".equals(obj)) {
+ return null;
+ }
+ throw new ELException(MessageFactory.get("error.convert",
+ obj, obj.getClass(), type), e);
+ }
              }
          }


Modified: tomcat/trunk/test/org/apache/el/lang/TestELSupport.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/el/lang/TestELSupport.java?rev=1635328&r1=1635327&r2=1635328&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/el/lang/TestELSupport.java (original)
+++ tomcat/trunk/test/org/apache/el/lang/TestELSupport.java Wed Oct 29 23:02:44 2014
@@ -16,6 +16,7 @@
   */
  package org.apache.el.lang;

+import java.beans.PropertyEditorManager;
  import java.math.BigDecimal;
  import java.math.BigInteger;

@@ -207,6 +208,39 @@ public class TestELSupport {
      }

      @Test
+ public void testCoerceToType13() {
+ Object result = ELManager.getExpressionFactory().coerceToType(
+ "", TesterType.class);
+ Assert.assertNull(result);
+ }
+
+ @Test
+ public void testCoerceToType14() {
+ PropertyEditorManager.registerEditor(TesterType.class, TesterTypeEditorNoError.class);
+ Object result = ELManager.getExpressionFactory().coerceToType(
+ "Foo", TesterType.class);
+ Assert.assertTrue(result instanceof TesterType);
+ Assert.assertEquals("Foo", ((TesterType) result).getValue());
+ }
+
+ @Test(expected=ELException.class)
+ public void testCoerceToType15() {
+ PropertyEditorManager.registerEditor(TesterType.class, TesterTypeEditorError.class);
+ Object result = ELManager.getExpressionFactory().coerceToType(
+ "Foo", TesterType.class);
+ Assert.assertTrue(result instanceof TesterType);
+ Assert.assertEquals("Foo", ((TesterType) result).getValue());
+ }
+
+ @Test
+ public void testCoerceToType16() {
+ PropertyEditorManager.registerEditor(TesterType.class, TesterTypeEditorError.class);
+ Object result = ELManager.getExpressionFactory().coerceToType(
+ "", TesterType.class);
+ Assert.assertNull(result);
+ }
+
+ @Test
      public void testCoerceToNumber01() {
          Object result = ELSupport.coerceToNumber(
                  (Object) null, Integer.class);

Added: tomcat/trunk/test/org/apache/el/lang/TesterBean.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/el/lang/TesterBean.java?rev=1635328&view=auto
==============================================================================
--- tomcat/trunk/test/org/apache/el/lang/TesterBean.java (added)
+++ tomcat/trunk/test/org/apache/el/lang/TesterBean.java Wed Oct 29 23:02:44 2014
@@ -0,0 +1,21 @@
+/*
+ * 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.el.lang;
+
+public class TesterBean {
+
+}

Propchange: tomcat/trunk/test/org/apache/el/lang/TesterBean.java
------------------------------------------------------------------------------
     svn:eol-style = native

Added: tomcat/trunk/test/org/apache/el/lang/TesterType.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/el/lang/TesterType.java?rev=1635328&view=auto
==============================================================================
--- tomcat/trunk/test/org/apache/el/lang/TesterType.java (added)
+++ tomcat/trunk/test/org/apache/el/lang/TesterType.java Wed Oct 29 23:02:44 2014
@@ -0,0 +1,30 @@
+/*
+ * 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.el.lang;
+
+public class TesterType {
+
+ private final String value;
+
+ public TesterType(String value) {
+ this.value = value;
+ }
+
+ public String getValue() {
+ return value;
+ }
+}

Propchange: tomcat/trunk/test/org/apache/el/lang/TesterType.java
------------------------------------------------------------------------------
     svn:eol-style = native

Added: tomcat/trunk/test/org/apache/el/lang/TesterTypeEditorBase.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/el/lang/TesterTypeEditorBase.java?rev=1635328&view=auto
==============================================================================
--- tomcat/trunk/test/org/apache/el/lang/TesterTypeEditorBase.java (added)
+++ tomcat/trunk/test/org/apache/el/lang/TesterTypeEditorBase.java Wed Oct 29 23:02:44 2014
@@ -0,0 +1,79 @@
+/*
+ * 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.el.lang;
+
+import java.awt.Component;
+import java.awt.Graphics;
+import java.awt.Rectangle;
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyEditor;
+
+public abstract class TesterTypeEditorBase implements PropertyEditor {
+
+ protected TesterType type = null;
+
+ @Override
+ public void setValue(Object value) {
+ }
+
+ @Override
+ public Object getValue() {
+ return type;
+ }
+
+ @Override
+ public boolean isPaintable() {
+ return false;
+ }
+
+ @Override
+ public void paintValue(Graphics gfx, Rectangle box) {
+ }
+
+ @Override
+ public String getJavaInitializationString() {
+ return null;
+ }
+
+ @Override
+ public String getAsText() {
+ return null;
+ }
+
+ @Override
+ public String[] getTags() {
+ return null;
+ }
+
+ @Override
+ public Component getCustomEditor() {
+ return null;
+ }
+
+ @Override
+ public boolean supportsCustomEditor() {
+ return false;
+ }
+
+ @Override
+ public void addPropertyChangeListener(PropertyChangeListener listener) {
+ }
+
+ @Override
+ public void removePropertyChangeListener(PropertyChangeListener listener) {
+ }
+}

Propchange: tomcat/trunk/test/org/apache/el/lang/TesterTypeEditorBase.java
------------------------------------------------------------------------------
     svn:eol-style = native

Added: tomcat/trunk/test/org/apache/el/lang/TesterTypeEditorError.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/el/lang/TesterTypeEditorError.java?rev=1635328&view=auto
==============================================================================
--- tomcat/trunk/test/org/apache/el/lang/TesterTypeEditorError.java (added)
+++ tomcat/trunk/test/org/apache/el/lang/TesterTypeEditorError.java Wed Oct 29 23:02:44 2014
@@ -0,0 +1,25 @@
+/*
+ * 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.el.lang;
+
+public class TesterTypeEditorError extends TesterTypeEditorBase {
+
+ @Override
+ public void setAsText(String text) throws IllegalArgumentException {
+ throw new IllegalArgumentException();
+ }
+}

Propchange: tomcat/trunk/test/org/apache/el/lang/TesterTypeEditorError.java
------------------------------------------------------------------------------
     svn:eol-style = native

Added: tomcat/trunk/test/org/apache/el/lang/TesterTypeEditorNoError.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/el/lang/TesterTypeEditorNoError.java?rev=1635328&view=auto
==============================================================================
--- tomcat/trunk/test/org/apache/el/lang/TesterTypeEditorNoError.java (added)
+++ tomcat/trunk/test/org/apache/el/lang/TesterTypeEditorNoError.java Wed Oct 29 23:02:44 2014
@@ -0,0 +1,25 @@
+/*
+ * 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.el.lang;
+
+public class TesterTypeEditorNoError extends TesterTypeEditorBase {
+
+ @Override
+ public void setAsText(String text) throws IllegalArgumentException {
+ type = new TesterType(text);
+ }
+}

Propchange: tomcat/trunk/test/org/apache/el/lang/TesterTypeEditorNoError.java
------------------------------------------------------------------------------
     svn:eol-style = native

Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1635328&r1=1635327&r2=1635328&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Wed Oct 29 23:02:44 2014
@@ -282,6 +282,12 @@
          Do not throw an exception on missing JSP file servlet initialization.
          (remm)
        </fix>
+ <fix>
+ <bug>57148</bug>: When coercing an object to a given type and a
+ <code>PropertyEditor</code> has been registered for the type correctly
+ coerce the empty string to <code>null</code> if the
+ <code>PropertyEditor</code> throws an exception. (kkolinko/markt)
+ </fix>
      </changelog>
    </subsection>
    <subsection name="Cluster">



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org

Search Discussions

Related Discussions

Discussion Navigation
viewthread | post
posts ‹ prev | 1 of 1 | next ›
Discussion Overview
groupdev @
categoriestomcat
postedOct 29, '14 at 11:03p
activeOct 29, '14 at 11:03p
posts1
users1
websitetomcat.apache.org
irc#tomcat

1 user in discussion

Markt: 1 post

People

Translate

site design / logo © 2017 Grokbase