Merge pull request #1000 from marilynel/master

fixing sonarcube issues
This commit is contained in:
Sean Leary 2025-07-23 20:46:33 -05:00 committed by GitHub
commit 82432f0245
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 81 additions and 39 deletions

View File

@ -1785,46 +1785,77 @@ public class JSONObject {
populateMap(bean, Collections.newSetFromMap(new IdentityHashMap<Object, Boolean>()), jsonParserConfiguration);
}
/**
* Convert a bean into a json object
* @param bean object tobe converted
* @param objectsRecord set of all objects for this method
* @param jsonParserConfiguration json parser settings
*/
private void populateMap(Object bean, Set<Object> objectsRecord, JSONParserConfiguration jsonParserConfiguration) {
Class<?> klass = bean.getClass();
// If klass is a System class then set includeSuperClass to false.
boolean includeSuperClass = klass.getClassLoader() != null;
Method[] methods = includeSuperClass ? klass.getMethods() : klass.getDeclaredMethods();
Method[] methods = getMethods(klass);
for (final Method method : methods) {
if (isValidMethod(method)) {
final String key = getKeyNameFromMethod(method);
if (key != null && !key.isEmpty()) {
try {
final Object result = method.invoke(bean);
if (result != null || jsonParserConfiguration.isUseNativeNulls()) {
// check cyclic dependency and throw error if needed
// the wrap and populateMap combination method is
// itself DFS recursive
if (objectsRecord.contains(result)) {
throw recursivelyDefinedObjectException(key);
}
objectsRecord.add(result);
testValidity(result);
this.map.put(key, wrap(result, objectsRecord));
objectsRecord.remove(result);
closeClosable(result);
}
} catch (IllegalAccessException ignore) {
} catch (IllegalArgumentException ignore) {
} catch (InvocationTargetException ignore) {
}
processMethod(bean, objectsRecord, jsonParserConfiguration, method, key);
}
}
}
}
/**
* Processes method into json object entry if appropriate
* @param bean object being processed (owns the method)
* @param objectsRecord set of all objects for this method
* @param jsonParserConfiguration json parser settings
* @param method method being processed
* @param key name of the method
*/
private void processMethod(Object bean, Set<Object> objectsRecord, JSONParserConfiguration jsonParserConfiguration,
Method method, String key) {
try {
final Object result = method.invoke(bean);
if (result != null || jsonParserConfiguration.isUseNativeNulls()) {
// check cyclic dependency and throw error if needed
// the wrap and populateMap combination method is
// itself DFS recursive
if (objectsRecord.contains(result)) {
throw recursivelyDefinedObjectException(key);
}
objectsRecord.add(result);
testValidity(result);
this.map.put(key, wrap(result, objectsRecord));
objectsRecord.remove(result);
closeClosable(result);
}
} catch (IllegalAccessException ignore) {
// ignore exception
} catch (IllegalArgumentException ignore) {
// ignore exception
} catch (InvocationTargetException ignore) {
// ignore exception
}
}
/**
* This is a convenience method to simplify populate maps
* @param klass the name of the object being checked
* @return methods of klass
*/
private static Method[] getMethods(Class<?> klass) {
boolean includeSuperClass = klass.getClassLoader() != null;
return includeSuperClass ? klass.getMethods() : klass.getDeclaredMethods();
}
private static boolean isValidMethodName(String name) {
return !"getClass".equals(name) && !"getDeclaringClass".equals(name);
}

View File

@ -4000,19 +4000,24 @@ public class JSONObjectTest {
@Test
public void test_strictModeWithMisCasedBooleanOrNullValue(){
JSONParserConfiguration jsonParserConfiguration = new JSONParserConfiguration().withStrictMode();
try{
JSONObject j1 = new JSONObject("{\"a\":True}", jsonParserConfiguration);
new JSONObject("{\"a\":True}", jsonParserConfiguration);
fail("Expected an exception");
} catch (JSONException e) { }
} catch (JSONException e) {
// No action, expected outcome
}
try{
JSONObject j2 = new JSONObject("{\"a\":TRUE}", jsonParserConfiguration);
new JSONObject("{\"a\":TRUE}", jsonParserConfiguration);
fail("Expected an exception");
} catch (JSONException e) { }
} catch (JSONException e) {
// No action, expected outcome
}
try{
JSONObject j2 = new JSONObject("{\"a\":nUlL}", jsonParserConfiguration);
new JSONObject("{\"a\":nUlL}", jsonParserConfiguration);
fail("Expected an exception");
} catch (JSONException e) { }
} catch (JSONException e) {
// No action, expected outcome
}
}
@Test
@ -4021,17 +4026,23 @@ public class JSONObjectTest {
// Parsing the following objects should fail
try{
JSONObject j3 = new JSONObject("{true : 3}", jsonParserConfiguration);
new JSONObject("{true : 3}", jsonParserConfiguration);
fail("Expected an exception");
} catch (JSONException e) { }
} catch (JSONException e) {
// No action, expected outcome
}
try{
JSONObject j4 = new JSONObject("{TRUE : 3}", jsonParserConfiguration);
new JSONObject("{TRUE : 3}", jsonParserConfiguration);
fail("Expected an exception");
} catch (JSONException e) { }
} catch (JSONException e) {
// No action, expected outcome
}
try{
JSONObject j5 = new JSONObject("{1 : 3}", jsonParserConfiguration);
new JSONObject("{1 : 3}", jsonParserConfiguration);
fail("Expected an exception");
} catch (JSONException e) { }
} catch (JSONException e) {
// No action, expected outcome
}
}