チェンジセット 225

差分発生行の前後
無視リスト:
コミット日時:
2008/04/15 11:48:16 (14 年前)
コミッタ:
shinomiya
ログメッセージ:

Getter/Setterを両方持つプロパティが無いクラスは変換対象外としてIllegalArgumentException?をスローするように変更。

ファイル:

凡例:

変更無し
追加
削除
更新
コピー
移動
  • trunk/im-jssp/src/main/java/org/intra_mart/jssp/util/JavaScriptUtility.java

    r224 r225  
    101101        } 
    102102 
     103         
    103104         
    104105        /** 
     
    368369                                        PropertyDescriptor propDisc = map.get(propName); 
    369370                                        Method writeMethod = propDisc.getWriteMethod(); 
    370                                          
     371 
    371372                                        Object propValue = scriptable.get(propName, scriptable); 
    372373                                        Class<?>[] parameterTypes = writeMethod.getParameterTypes(); 
     
    410411 
    411412        /** 
    412          * @param beanType 
     413         * @param targetType 
    413414         * @return 
    414415         * @throws IntrospectionException 
     416         * @throws IllegalArgumentException 
    415417         */ 
    416         public static Map<String, PropertyDescriptor> getBeansPropertyMap(Class<?> beanType)  
    417                                                         throws IntrospectionException
    418                  
    419                 if(BEANS_PROP_INFO_MAP.get(beanType) == null){ 
     418        public static Map<String, PropertyDescriptor> getBeansPropertyMap(Class<?> targetType)  
     419                                                        throws IntrospectionException, IllegalArgumentException
     420                 
     421                if(BEANS_PROP_INFO_MAP.get(targetType) == null){ 
    420422                        synchronized(BEANS_PROP_INFO_MONITOR){ 
    421                                 if(BEANS_PROP_INFO_MAP.get(beanType) == null){ 
     423                                if(BEANS_PROP_INFO_MAP.get(targetType) == null){ 
    422424                                         
    423425                                        // Beansのプロパティに関するMapを作成(key = propName, value = PropertyDescriptor) 
    424426                                        Map<String, PropertyDescriptor> map = new WeakHashMap<String, PropertyDescriptor>(); 
    425427                                         
    426                                         BeanInfo info = Introspector.getBeanInfo(beanType); 
     428                                        BeanInfo info = Introspector.getBeanInfo(targetType); 
    427429                                        PropertyDescriptor[] propDiscriptorList = info.getPropertyDescriptors(); 
    428430                                         
     
    437439                                        } 
    438440                                         
    439                                         BEANS_PROP_INFO_MAP.put(beanType, map); 
     441                                        if(map.size() == 0){ 
     442                                                String msg = "TargetType '" + targetType.getName() + "' must have one or more properties with getter & setter."; 
     443                                                throw new IllegalArgumentException(msg); 
     444                                        } 
     445                                         
     446                                        BEANS_PROP_INFO_MAP.put(targetType, map); 
    440447                                } 
    441448                        } 
    442449                } 
    443450                 
    444                 return BEANS_PROP_INFO_MAP.get(beanType); 
     451                return BEANS_PROP_INFO_MAP.get(targetType); 
    445452        } 
    446453 
  • trunk/im-jssp/src/test/java/org/intra_mart/jssp/util/JavaScriptUtilityTest.java

    r224 r225  
    263263        } 
    264264 
     265        // TODO エラー内容正しい?  
    265266        public void testConvertJavaBeans2JsObject_変換対象外なクラス_List() throws Exception { 
    266                 List value = new ArrayList();  
    267                 Object actual = JavaScriptUtility.convertJavaBeans2JsObject(value); 
    268                  
    269                 assertEquals(ValueObject.class, actual.getClass()); 
    270                 ValueObject actualValueObj = (ValueObject)actual; 
    271                  
    272                 assertEquals(0, actualValueObj.getIds().length); 
     267                List value = new ArrayList(); 
     268                try { 
     269                        JavaScriptUtility.convertJavaBeans2JsObject(value); 
     270                } 
     271                catch (IllegalArgumentException e) { 
     272                        assertTrue("IllegalArgumentException", true); 
     273                        assertEquals("TargetType 'java.util.ArrayList' must have one or more properties with getter & setter.", 
     274                                                e.getMessage()); 
     275                        return; 
     276                } 
     277 
     278                fail("IllegalArgumentExceptionが起こっていません。"); 
    273279        } 
    274280         
    275281        public void testConvertJavaBeans2JsObject_変換対象外なクラス_Map() throws Exception { 
    276282                Map value = new HashMap();  
    277                 Object actual = JavaScriptUtility.convertJavaBeans2JsObject(value); 
    278                  
    279                 assertEquals(ValueObject.class, actual.getClass()); 
    280                 ValueObject actualValueObj = (ValueObject)actual; 
    281                  
    282                 assertEquals(0, actualValueObj.getIds().length); 
     283                 
     284                try { 
     285                        JavaScriptUtility.convertJavaBeans2JsObject(value); 
     286                } 
     287                catch (IllegalArgumentException e) { 
     288                        assertTrue("IllegalArgumentException", true); 
     289                        assertEquals("TargetType 'java.util.HashMap' must have one or more properties with getter & setter.", 
     290                                                e.getMessage()); 
     291                        return; 
     292                } 
     293 
     294                fail("IllegalArgumentExceptionが起こっていません。"); 
    283295        } 
    284296 
    285297        public void testConvertJavaBeans2JsObject_変換対象外なクラス_Set() throws Exception { 
    286298                Set value = new HashSet(); 
    287                 Object actual = JavaScriptUtility.convertJavaBeans2JsObject(value); 
    288                  
    289                 assertEquals(ValueObject.class, actual.getClass()); 
    290                 ValueObject actualValueObj = (ValueObject)actual; 
    291                  
    292                 assertEquals(0, actualValueObj.getIds().length); 
     299                try { 
     300                        JavaScriptUtility.convertJavaBeans2JsObject(value); 
     301                } 
     302                catch (IllegalArgumentException e) { 
     303                        assertTrue("IllegalArgumentException", true); 
     304                        assertEquals("TargetType 'java.util.HashSet' must have one or more properties with getter & setter.", 
     305                                                e.getMessage()); 
     306                        return; 
     307                } 
     308 
     309                fail("IllegalArgumentExceptionが起こっていません。"); 
    293310        } 
    294311 
     
    10181035 
    10191036        public void testGetBeansPropertyMap_対象外_List() throws Exception { 
    1020                 Class beanType = List.class; 
    1021                 Map<String, PropertyDescriptor> actual = JavaScriptUtility.getBeansPropertyMap(beanType); 
    1022  
    1023                 assertEquals(0, actual.size()); 
     1037                Class targetType = List.class; 
     1038 
     1039                try { 
     1040                        JavaScriptUtility.getBeansPropertyMap(targetType); 
     1041                } 
     1042                catch (IllegalArgumentException e) { 
     1043                        assertTrue("IllegalArgumentException", true); 
     1044                        assertEquals("TargetType 'java.util.List' must have one or more properties with getter & setter.", 
     1045                                                e.getMessage()); 
     1046                        return; 
     1047                } 
     1048 
     1049                fail("IllegalArgumentExceptionが起こっていません。"); 
    10241050        } 
    10251051         
    10261052        public void testGetBeansPropertyMap_対象外_Map() throws Exception { 
    1027                 Class beanType = Map.class; 
    1028                 Map<String, PropertyDescriptor> actual = JavaScriptUtility.getBeansPropertyMap(beanType); 
    1029  
    1030                 assertEquals(0, actual.size()); 
     1053                Class targetType = Map.class; 
     1054                 
     1055                try { 
     1056                        JavaScriptUtility.getBeansPropertyMap(targetType); 
     1057                } 
     1058                catch (IllegalArgumentException e) { 
     1059                        assertTrue("IllegalArgumentException", true); 
     1060                        assertEquals("TargetType 'java.util.Map' must have one or more properties with getter & setter.", 
     1061                                                e.getMessage()); 
     1062                        return; 
     1063                } 
     1064 
     1065                fail("IllegalArgumentExceptionが起こっていません。"); 
    10311066        } 
    10321067 
    10331068        public void testGetBeansPropertyMap_対象外_Set() throws Exception { 
    1034                 Class beanType = Set.class; 
    1035                 Map<String, PropertyDescriptor> actual = JavaScriptUtility.getBeansPropertyMap(beanType); 
    1036  
    1037                 assertEquals(0, actual.size()); 
     1069                Class targetType = Set.class; 
     1070 
     1071                try { 
     1072                        JavaScriptUtility.getBeansPropertyMap(targetType); 
     1073                } 
     1074                catch (IllegalArgumentException e) { 
     1075                        assertTrue("IllegalArgumentException", true); 
     1076                        assertEquals("TargetType 'java.util.Set' must have one or more properties with getter & setter.", 
     1077                                                e.getMessage()); 
     1078                        return; 
     1079                } 
     1080 
     1081                fail("IllegalArgumentExceptionが起こっていません。"); 
    10381082        } 
    10391083 
    10401084        public void testGetBeansPropertyMap_対象外_Object() throws Exception { 
    1041                 Class beanType = Object.class; 
    1042                 Map<String, PropertyDescriptor> actual = JavaScriptUtility.getBeansPropertyMap(beanType); 
    1043  
    1044                 assertEquals(0, actual.size()); 
     1085                Class targetType = Object.class; 
     1086                 
     1087                try { 
     1088                        JavaScriptUtility.getBeansPropertyMap(targetType); 
     1089                } 
     1090                catch (IllegalArgumentException e) { 
     1091                        assertTrue("IllegalArgumentException", true); 
     1092                        assertEquals("TargetType 'java.lang.Object' must have one or more properties with getter & setter.", 
     1093                                                e.getMessage()); 
     1094                        return; 
     1095                } 
     1096 
     1097                fail("IllegalArgumentExceptionが起こっていません。"); 
    10451098        } 
    10461099