Skip to content

Commit 17d9e5f

Browse files
committed
GOSDK-25: Unmarshaling optional enums in response payloads causes panic. Adding instantiation step to nullable enums before attempting to set value.
1 parent f161b2d commit 17d9e5f

File tree

4 files changed

+11
-8
lines changed

4 files changed

+11
-8
lines changed

ds3-autogen-go/src/main/kotlin/com/spectralogic/ds3autogen/go/generators/parser/BaseTypeParserGenerator.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ open class BaseTypeParserGenerator : TypeParserModelGenerator<TypeParser>, TypeP
108108
// Handle case if the element is an enum
109109
if (isElementEnum(ds3Element.type!!, typeMap)) {
110110
if (ds3Element.nullable) {
111-
return ParseChildNodeAsNullableEnum(xmlTag, modelName, paramName)
111+
return ParseChildNodeAsNullableEnum(xmlTag, modelName, paramName, toGoType(ds3Element.type!!))
112112
}
113113
return ParseChildNodeAsEnum(xmlTag, modelName, paramName)
114114
}

ds3-autogen-go/src/main/kotlin/com/spectralogic/ds3autogen/go/models/parser/ParseChildNodeImpls.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,10 +167,12 @@ data class ParseChildNodeAsEnum(
167167
data class ParseChildNodeAsNullableEnum(
168168
override val xmlTag: String,
169169
val modelName: String,
170-
val paramName: String) : ParseElement {
170+
val paramName: String,
171+
val paramType: String) : ParseElement {
171172

172173
override val parsingCode: String
173-
get() { return "parseNullableEnum(child.Content, $modelName.$paramName, aggErr)" }
174+
get() { return "$modelName.$paramName = new($paramType)\n" +
175+
goIndent(3) + "parseNullableEnum(child.Content, $modelName.$paramName, aggErr)" }
174176
}
175177

176178
data class ParseChildNodeAsCommonPrefix(

ds3-autogen-go/src/test/java/com/spectralogic/ds3autogen/go/generators/parser/BaseTypeParserGenerator_Test.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ public void toChildNodeTest() {
202202
new ParseChildNodeAsPrimitiveType(INT_ELEMENT.getName(), modelName, INT_ELEMENT.getName(), "Int"),
203203
new ParseChildNodeAddToSlice(LIST_ELEMENT.getName(), modelName, LIST_ELEMENT.getName(), removePath(LIST_ELEMENT.getComponentType())),
204204
new ParseChildNodeAsEnum(ENUM_ELEMENT.getName(), modelName, ENUM_ELEMENT.getName()),
205-
new ParseChildNodeAsNullableEnum(ENUM_PTR_ELEMENT.getName(), modelName, ENUM_PTR_ELEMENT.getName()),
205+
new ParseChildNodeAsNullableEnum(ENUM_PTR_ELEMENT.getName(), modelName, ENUM_PTR_ELEMENT.getName(), removePath(ENUM_PTR_ATTR.getType())),
206206
new ParseChildNodeAsSlice("TestCollectionValue", "CustomMarshaledName", modelName, LIST_WITH_ENCAPS_TAG_ELEMENT.getName(), removePath(LIST_WITH_ENCAPS_TAG_ELEMENT.getComponentType())),
207207
new ParseChildNodeAsDs3Type(DS3_TYPE_ELEMENT.getName(), modelName, DS3_TYPE_ELEMENT.getName()),
208208
new ParseChildNodeAddEnumToSlice(LIST_ENUM_ELEMENT.getName(), modelName, LIST_ENUM_ELEMENT.getName(), removePath(LIST_ENUM_ELEMENT.getComponentType())),
@@ -250,7 +250,7 @@ public void toChildNodeListTest() {
250250
new ParseChildNodeAsPrimitiveType(INT_ELEMENT.getName(), modelName, INT_ELEMENT.getName(), "Int"),
251251
new ParseChildNodeAddToSlice(LIST_ELEMENT.getName(), modelName, LIST_ELEMENT.getName(), removePath(LIST_ELEMENT.getComponentType())),
252252
new ParseChildNodeAsEnum(ENUM_ELEMENT.getName(), modelName, ENUM_ELEMENT.getName()),
253-
new ParseChildNodeAsNullableEnum(ENUM_PTR_ELEMENT.getName(), modelName, ENUM_PTR_ELEMENT.getName()),
253+
new ParseChildNodeAsNullableEnum(ENUM_PTR_ELEMENT.getName(), modelName, ENUM_PTR_ELEMENT.getName(), removePath(ENUM_PTR_ATTR.getType())),
254254
new ParseChildNodeAsSlice("TestCollectionValue", "CustomMarshaledName", modelName, LIST_WITH_ENCAPS_TAG_ELEMENT.getName(), removePath(LIST_WITH_ENCAPS_TAG_ELEMENT.getComponentType())),
255255
new ParseChildNodeAsDs3Type(DS3_TYPE_ELEMENT.getName(), modelName, DS3_TYPE_ELEMENT.getName()));
256256

ds3-autogen-go/src/test/java/com/spectralogic/ds3autogen/go/models/parser/ParseChildNodeImpls_Test.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@
1919

2020
import static org.hamcrest.CoreMatchers.is;
2121
import static org.junit.Assert.assertThat;
22-
import static org.junit.Assert.assertTrue;
2322

2423
public class ParseChildNodeImpls_Test {
2524

2625
private static final String XML_TAG = "XmlTag";
2726
private static final String MODEL_NAME = "modelName";
2827
private static final String PARAM_NAME = "ParamName";
28+
private static final String PARAM_TYPE = "ParamType";
2929
private static final String PARSER_NAMESPACE = "ParserNamespace";
3030
private static final String CHILD_TYPE = "ChildType";
3131

@@ -109,9 +109,10 @@ public void ParseChildNodeAsEnumTest() {
109109

110110
@Test
111111
public void ParseChildNodeAsNullableEnumTest() {
112-
final String expected = String.format("parseNullableEnum(child.Content, %s.%s, aggErr)", MODEL_NAME, PARAM_NAME);
112+
final String expected = String.format("%s.%s = new(%s)\n" +
113+
" parseNullableEnum(child.Content, %s.%s, aggErr)", MODEL_NAME, PARAM_NAME, PARAM_TYPE, MODEL_NAME, PARAM_NAME);
113114

114-
final ParseElement parseElement = new ParseChildNodeAsNullableEnum(XML_TAG, MODEL_NAME, PARAM_NAME);
115+
final ParseElement parseElement = new ParseChildNodeAsNullableEnum(XML_TAG, MODEL_NAME, PARAM_NAME, PARAM_TYPE);
115116
assertThat(parseElement.getXmlTag(), is(XML_TAG));
116117
assertThat(parseElement.getParsingCode(), is(expected));
117118
}

0 commit comments

Comments
 (0)