You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2011/09/12 23:27:50 UTC

svn commit: r1169936 - in /tapestry/tapestry5/trunk/tapestry-hibernate/src: main/java/org/apache/tapestry5/internal/hibernate/HibernateEntityValueEncoder.java test/java/org/apache/tapestry5/internal/hibernate/HibernateEntityValueEncoderTest.java

Author: hlship
Date: Mon Sep 12 21:27:49 2011
New Revision: 1169936

URL: http://svn.apache.org/viewvc?rev=1169936&view=rev
Log:
TAP5-1641: Encode transient instances as null

The ValueEncoder for Hibernate entity types should encode transient instances as null rather than throw an exception

Modified:
    tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry5/internal/hibernate/HibernateEntityValueEncoder.java
    tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/apache/tapestry5/internal/hibernate/HibernateEntityValueEncoderTest.java

Modified: tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry5/internal/hibernate/HibernateEntityValueEncoder.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry5/internal/hibernate/HibernateEntityValueEncoder.java?rev=1169936&r1=1169935&r2=1169936&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry5/internal/hibernate/HibernateEntityValueEncoder.java (original)
+++ tapestry/tapestry5/trunk/tapestry-hibernate/src/main/java/org/apache/tapestry5/internal/hibernate/HibernateEntityValueEncoder.java Mon Sep 12 21:27:49 2011
@@ -1,4 +1,4 @@
-// Copyright 2008, 2010 The Apache Software Foundation
+// Copyright 2008, 2010, 2011 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -14,8 +14,6 @@
 
 package org.apache.tapestry5.internal.hibernate;
 
-import java.io.Serializable;
-
 import org.apache.tapestry5.ValueEncoder;
 import org.apache.tapestry5.ioc.internal.util.InternalUtils;
 import org.apache.tapestry5.ioc.services.PropertyAccess;
@@ -26,6 +24,8 @@ import org.hibernate.mapping.PersistentC
 import org.hibernate.mapping.Property;
 import org.slf4j.Logger;
 
+import java.io.Serializable;
+
 public final class HibernateEntityValueEncoder<E> implements ValueEncoder<E>
 {
     private final Class<E> entityClass;
@@ -41,7 +41,7 @@ public final class HibernateEntityValueE
     private final Logger logger;
 
     public HibernateEntityValueEncoder(Class<E> entityClass, PersistentClass persistentClass, Session session,
-            PropertyAccess propertyAccess, TypeCoercer typeCoercer, Logger logger)
+                                       PropertyAccess propertyAccess, TypeCoercer typeCoercer, Logger logger)
     {
         this.entityClass = entityClass;
         this.session = session;
@@ -63,9 +63,9 @@ public final class HibernateEntityValueE
         Object id = propertyAdapter.get(value);
 
         if (id == null)
-            throw new IllegalStateException(String.format(
-                    "Entity %s has an %s property of null; this probably means that it has not been persisted yet.",
-                    value, idPropertyName));
+        {
+            return null;
+        }
 
         return typeCoercer.coerce(id, String.class);
     }
@@ -82,8 +82,7 @@ public final class HibernateEntityValueE
         {
 
             id = typeCoercer.coerce(clientValue, propertyAdapter.getType());
-        }
-        catch (Exception ex)
+        } catch (Exception ex)
         {
             throw new RuntimeException(String.format(
                     "Exception converting '%s' to instance of %s (id type for entity %s): %s", clientValue,

Modified: tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/apache/tapestry5/internal/hibernate/HibernateEntityValueEncoderTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/apache/tapestry5/internal/hibernate/HibernateEntityValueEncoderTest.java?rev=1169936&r1=1169935&r2=1169936&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/apache/tapestry5/internal/hibernate/HibernateEntityValueEncoderTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-hibernate/src/test/java/org/apache/tapestry5/internal/hibernate/HibernateEntityValueEncoderTest.java Mon Sep 12 21:27:49 2011
@@ -1,4 +1,4 @@
-// Copyright 2008, 2010 The Apache Software Foundation
+// Copyright 2008, 2010, 2011 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -68,17 +68,7 @@ public class HibernateEntityValueEncoder
         HibernateEntityValueEncoder<SampleEntity> encoder = new HibernateEntityValueEncoder<SampleEntity>(
                 SampleEntity.class, persistentClass, session, access, typeCoercer, logger);
 
-        try
-        {
-            encoder.toClient(entity);
-            unreachable();
-        }
-        catch (IllegalStateException ex)
-        {
-            assertMessageContains(ex,
-                    "Entity org.apache.tapestry5.internal.hibernate.SampleEntity",
-                    "has an id property of null");
-        }
+        assertNull(encoder.toClient(entity));
 
         verify();
     }
@@ -129,8 +119,7 @@ public class HibernateEntityValueEncoder
         {
             encoder.toValue("xyz");
             unreachable();
-        }
-        catch (RuntimeException ex)
+        } catch (RuntimeException ex)
         {
             assertMessageContains(
                     ex,