fix apex npe, better example value (#266)

This commit is contained in:
William Cheng 2018-04-29 22:15:04 +08:00 committed by GitHub
parent 1587d202b0
commit 1d7da2ecf4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 150 additions and 28 deletions

View File

@ -191,24 +191,144 @@ public class ApexClientCodegen extends AbstractJavaCodegen {
@Override @Override
public void setParameterExampleValue(CodegenParameter p) { public void setParameterExampleValue(CodegenParameter p) {
if (Boolean.TRUE.equals(p.isLong)) { String example;
p.example = "2147483648L";
} else if (Boolean.TRUE.equals(p.isFile)) { if (p.defaultValue == null) {
p.example = "Blob.valueOf('Sample text file\\nContents')"; example = p.example;
} else if (Boolean.TRUE.equals(p.isDate)) { } else {
p.example = "Date.newInstance(1960, 2, 17)"; example = p.defaultValue;
} else if (Boolean.TRUE.equals(p.isDateTime)) {
p.example = "Datetime.newInstanceGmt(2013, 11, 12, 3, 3, 3)";
} else if (Boolean.TRUE.equals(p.isListContainer)) {
p.example = "new " + p.dataType + "{" + p.items.example + "}";
} else if (Boolean.TRUE.equals(p.isMapContainer)) {
p.example = "new " + p.dataType + "{" + p.items.example + "}";
} else if (Boolean.TRUE.equals(p.isString)) {
p.example = "'" + p.example + "'";
} else if ("".equals(p.example) || p.example == null) {
// Get an example object from the generated model
p.example = p.dataType + ".getExample()";
} }
String type = p.baseType;
if (type == null) {
type = p.dataType;
}
if (Boolean.TRUE.equals(p.isInteger)) {
if (example == null) {
example = "56";
}
} else if (Boolean.TRUE.equals(p.isLong)) {
if (example == null) {
example = "2147483648L";
}
} else if (Boolean.TRUE.equals(p.isDouble)
|| Boolean.TRUE.equals(p.isFloat)
|| Boolean.TRUE.equals(p.isNumber)) {
if (example == null) {
example = "3.4";
}
} else if (Boolean.TRUE.equals(p.isBoolean)) {
if (Boolean.parseBoolean(p.example)) {
p.example = "1";
} else {
p.example = "0";
}
} else if (Boolean.TRUE.equals(p.isFile) || Boolean.TRUE.equals(p.isBinary)) {
example = "Blob.valueOf('Sample text file\\nContents')";
} else if (Boolean.TRUE.equals(p.isByteArray)) {
if (example == null) {
example = "YmFzZSA2NCBkYXRh";
}
example = "\"" + escapeText(example) + "\"";
} else if (Boolean.TRUE.equals(p.isDate)) {
if (example == null) {
example = "1960, 2, 17";
}
example = "Date.newInstance(" + escapeText(p.example) + ")";
} else if (Boolean.TRUE.equals(p.isDateTime)) {
if (example == null) {
example = "2013, 11, 12, 3, 3, 3";
}
example = "Datetime.newInstanceGmt(" + escapeText(p.example) + ")";
} else if (Boolean.TRUE.equals(p.isString)) {
if (example == null) {
example = p.paramName + "_example";
}
example = "\'" + escapeText(example) + "\'";
} else if (!languageSpecificPrimitives.contains(type)) {
// type is a model class, e.g. User
example = type + ".getExample()";
}
// container
if (Boolean.TRUE.equals(p.isListContainer)) {
example = setPropertyExampleValue(p.items);
example = "new " + p.dataType + "{" + example + "}";
} else if (Boolean.TRUE.equals(p.isMapContainer)) {
example = setPropertyExampleValue(p.items);
example = "new " + p.dataType + "{" + example + "}";
} else if (example == null) {
example = "null";
}
p.example = example;
}
protected String setPropertyExampleValue(CodegenProperty p) {
String example;
if (p == null) {
return "null";
}
if (p.defaultValue == null) {
example = p.example;
} else {
example = p.defaultValue;
}
String type = p.baseType;
if (type == null) {
type = p.datatype;
}
if (Boolean.TRUE.equals(p.isInteger)) {
if (example == null) {
example = "56";
}
} else if (Boolean.TRUE.equals(p.isLong)) {
if (example == null) {
example = "2147483648L";
}
} else if (Boolean.TRUE.equals(p.isDouble)
|| Boolean.TRUE.equals(p.isFloat)
|| Boolean.TRUE.equals(p.isNumber)) {
if (example == null) {
example = "3.4";
}
} else if (Boolean.TRUE.equals(p.isBoolean)) {
if (example == null) {
example = "true";
}
} else if (Boolean.TRUE.equals(p.isFile) || Boolean.TRUE.equals(p.isBinary)) {
if (example == null) {
example = "Blob.valueOf('Sample text file\\nContents')";
}
example = escapeText(example);
} else if (Boolean.TRUE.equals(p.isDate)) {
if (example == null) {
example = "1960, 2, 17";
}
example = "Date.newInstance(" + escapeText(p.example) + ")";
} else if (Boolean.TRUE.equals(p.isDateTime)) {
if (example == null) {
example = "2013, 11, 12, 3, 3, 3";
}
example = "Datetime.newInstanceGmt(" + escapeText(p.example) + ")";
} else if (Boolean.TRUE.equals(p.isString)) {
if (example == null) {
example = p.name + "_example";
}
example = "\'" + escapeText(example) + "\'";
} else if (!languageSpecificPrimitives.contains(type)) {
// type is a model class, e.g. User
example = type + ".getExample()";
}
return example;
} }
@Override @Override
@ -242,6 +362,7 @@ public class ApexClientCodegen extends AbstractJavaCodegen {
return cm; return cm;
} }
/* the following workaround is no longer needed
@Override @Override
public void postProcessParameter(CodegenParameter parameter) { public void postProcessParameter(CodegenParameter parameter) {
if (parameter.isBodyParam && parameter.isListContainer) { if (parameter.isBodyParam && parameter.isListContainer) {
@ -250,6 +371,7 @@ public class ApexClientCodegen extends AbstractJavaCodegen {
setParameterExampleValue(parameter); setParameterExampleValue(parameter);
} }
} }
*/
@Override @Override
public void preprocessOpenAPI(OpenAPI openAPI) { public void preprocessOpenAPI(OpenAPI openAPI) {

View File

@ -77,7 +77,7 @@ petstore_auth.setAccessToken('YOUR ACCESS TOKEN');
Map<String, Object> params = new Map<String, Object>{ Map<String, Object> params = new Map<String, Object>{
'petId' => 2147483648L, 'petId' => 2147483648L,
'apiKey' => 'null' 'apiKey' => 'apiKey_example'
}; };
try { try {
@ -175,7 +175,7 @@ Swagger.OAuth petstore_auth = (Swagger.OAuth) client.getAuthentication('petstore
petstore_auth.setAccessToken('YOUR ACCESS TOKEN'); petstore_auth.setAccessToken('YOUR ACCESS TOKEN');
Map<String, Object> params = new Map<String, Object>{ Map<String, Object> params = new Map<String, Object>{
'tags' => new List<String>{'aeiou'} 'tags' => new List<String>{'\'aeiou\''}
}; };
try { try {
@ -318,8 +318,8 @@ petstore_auth.setAccessToken('YOUR ACCESS TOKEN');
Map<String, Object> params = new Map<String, Object>{ Map<String, Object> params = new Map<String, Object>{
'petId' => 2147483648L, 'petId' => 2147483648L,
'name' => 'null', 'name' => 'name_example',
'status' => 'null' 'status' => 'status_example'
}; };
try { try {
@ -368,7 +368,7 @@ petstore_auth.setAccessToken('YOUR ACCESS TOKEN');
Map<String, Object> params = new Map<String, Object>{ Map<String, Object> params = new Map<String, Object>{
'petId' => 2147483648L, 'petId' => 2147483648L,
'additionalMetadata' => 'null', 'additionalMetadata' => 'additionalMetadata_example',
'file' => Blob.valueOf('Sample text file\nContents') 'file' => Blob.valueOf('Sample text file\nContents')
}; };

View File

@ -23,7 +23,7 @@ For valid response try integer IDs with value &lt; 1000. Anything above 1000 or
SwagStoreApi api = new SwagStoreApi(); SwagStoreApi api = new SwagStoreApi();
Map<String, Object> params = new Map<String, Object>{ Map<String, Object> params = new Map<String, Object>{
'orderId' => 'null' 'orderId' => 'orderId_example'
}; };
try { try {

View File

@ -152,7 +152,7 @@ This can only be done by the logged in user.
SwagUserApi api = new SwagUserApi(); SwagUserApi api = new SwagUserApi();
Map<String, Object> params = new Map<String, Object>{ Map<String, Object> params = new Map<String, Object>{
'username' => 'null' 'username' => 'username_example'
}; };
try { try {
@ -193,7 +193,7 @@ Get user by user name
SwagUserApi api = new SwagUserApi(); SwagUserApi api = new SwagUserApi();
Map<String, Object> params = new Map<String, Object>{ Map<String, Object> params = new Map<String, Object>{
'username' => 'null' 'username' => 'username_example'
}; };
try { try {
@ -235,8 +235,8 @@ Logs user into the system
SwagUserApi api = new SwagUserApi(); SwagUserApi api = new SwagUserApi();
Map<String, Object> params = new Map<String, Object>{ Map<String, Object> params = new Map<String, Object>{
'username' => 'null', 'username' => 'username_example',
'password' => 'null' 'password' => 'password_example'
}; };
try { try {
@ -315,7 +315,7 @@ This can only be done by the logged in user.
SwagUserApi api = new SwagUserApi(); SwagUserApi api = new SwagUserApi();
Map<String, Object> params = new Map<String, Object>{ Map<String, Object> params = new Map<String, Object>{
'username' => 'null', 'username' => 'username_example',
'swagUser' => SwagUser.getExample() 'swagUser' => SwagUser.getExample()
}; };