JSON 메시지 validation 기능 수정

- 오류발생위치 출력
- type 오류 validation test 추가
This commit is contained in:
curry772
2026-05-18 14:00:28 +09:00
parent 82c7c2bc8c
commit e0ea4a4f5d
3 changed files with 228 additions and 41 deletions
@@ -166,10 +166,12 @@ public class JSONMessage extends Message {
throw new InvalidAccessException("The number of repetitions is different from the number of repetitions of the actual data. , " + item.getName(), item.getItemPath());
}
} // validation
} catch(InvalidAccessException e) {
throw e;
} catch(Exception e) {
throw new InvalidAccessException("setValue error", getItemPath(), null, e);
}
}
}
protected void doSetValue(JsonNode node, HashMap validationTargets, String parentPath) {
Item item = null;
@@ -255,40 +257,49 @@ public class JSONMessage extends Message {
} else if(value == null || value.length() == 0) {
setObject( itemPath, value );
} else {
int itemType = item.getDataTypeId();
switch(itemType) {
case Types.TYPE_INT :
case Types.TYPE_SHORT :
setInt( itemPath, new Integer(value) );
break;
case Types.TYPE_LONG :
setLong( itemPath, new Long(value) );
break;
case Types.TYPE_BIGDECIMAL :
if (SystemKeys.isValidationEnabled() && !isValid(value, item.getLength(), item.getDecimalPointLength())) {
throw new InvalidAccessException(
String.format("Invalid decimal point format Error value=%s,length=%d,pointLength=%d",
value, item.getLength(), item.getDecimalPointLength()),
itemPath);
}
setBigDecimal( itemPath, new BigDecimal(value) );
break;
case Types.TYPE_DOUBLE :
setDouble( itemPath, new Double(value) );
break;
case Types.TYPE_FLOAT :
setFloat( itemPath, new Float(value) );
break;
case Types.TYPE_BOOLEAN :
setObject( itemPath, new Boolean(value) );
break;
case Types.TYPE_STRING :
setString(itemPath, value);
break;
default :
setString(itemPath, value);
break;
}
int itemType = item.getDataTypeId();
try {
switch(itemType) {
case Types.TYPE_INT :
case Types.TYPE_SHORT :
setInt( itemPath, new Integer(value) );
break;
case Types.TYPE_LONG :
setLong( itemPath, new Long(value) );
break;
case Types.TYPE_BIGDECIMAL :
if (SystemKeys.isValidationEnabled() && !isValid(value, item.getLength(), item.getDecimalPointLength())) {
throw new InvalidAccessException(
String.format("Invalid decimal point format Error value=%s,length=%d,pointLength=%d",
value, item.getLength(), item.getDecimalPointLength()),
itemPath);
}
setBigDecimal( itemPath, new BigDecimal(value) );
break;
case Types.TYPE_DOUBLE :
setDouble( itemPath, new Double(value) );
break;
case Types.TYPE_FLOAT :
setFloat( itemPath, new Float(value) );
break;
case Types.TYPE_BOOLEAN :
setObject( itemPath, new Boolean(value) );
break;
case Types.TYPE_STRING :
setString(itemPath, value);
break;
default :
setString(itemPath, value);
break;
}
} catch (InvalidAccessException e) {
throw e;
} catch (Exception e) {
throw new InvalidAccessException(
String.format("Type mismatch: value='%s', field='%s', dataType=%s",
value, itemPath, Types.getType(itemType)),
itemPath, null, e);
}
}
}
}