diff --git a/module-ballerina-xsd/BalTool.toml b/module-ballerina-xsd/BalTool.toml index b6d2819..4fe9db3 100644 --- a/module-ballerina-xsd/BalTool.toml +++ b/module-ballerina-xsd/BalTool.toml @@ -2,8 +2,8 @@ id = "xsd" [[dependency]] -path = "../xsd-cli/build/libs/xsd-cli-1.2.0.jar" +path = "../xsd-cli/build/libs/xsd-cli-1.2.1-SNAPSHOT.jar" [[dependency]] -path = "../xsd-core/build/libs/xsd-core-1.2.0.jar" +path = "../xsd-core/build/libs/xsd-core-1.2.1-SNAPSHOT.jar" diff --git a/module-ballerina-xsd/Ballerina.toml b/module-ballerina-xsd/Ballerina.toml index f4e8f3f..ce5daf4 100644 --- a/module-ballerina-xsd/Ballerina.toml +++ b/module-ballerina-xsd/Ballerina.toml @@ -2,7 +2,7 @@ distribution = "2201.11.0" org = "ballerina" name = "xsdtool" -version = "1.2.0" +version = "1.2.1" authors = ["Ballerina"] keywords = ["xsd", "xsd-tool"] repository = "https://github.com/ballerina-platform/xsd-tools" diff --git a/module-ballerina-xsd/Dependencies.toml b/module-ballerina-xsd/Dependencies.toml index bbf96bc..25cb719 100644 --- a/module-ballerina-xsd/Dependencies.toml +++ b/module-ballerina-xsd/Dependencies.toml @@ -10,7 +10,7 @@ distribution-version = "2201.11.0" [[package]] org = "ballerina" name = "xsdtool" -version = "1.2.0" +version = "1.2.1" modules = [ {org = "ballerina", packageName = "xsdtool", moduleName = "xsdtool"} ] diff --git a/xsd-core/src/main/java/io/ballerina/xsd/core/visitor/Utils.java b/xsd-core/src/main/java/io/ballerina/xsd/core/visitor/Utils.java index 3dfcff3..35a4229 100644 --- a/xsd-core/src/main/java/io/ballerina/xsd/core/visitor/Utils.java +++ b/xsd-core/src/main/java/io/ballerina/xsd/core/visitor/Utils.java @@ -104,12 +104,24 @@ public final class Utils { private static final String WHITESPACE_PATTERN = "\\s"; private static final String SPECIAL_CHARS_PATTERN = "[!@$%^&*()_\\-|]"; public static final String NMTOKEN = "NMTOKEN"; + public static final String NMTOKENS = "NMTOKENS"; + public static final String ENTITY = "ENTITY"; + public static final String ENTITIES = "ENTITIES"; + public static final String NAME = "Name"; public static final String IDREF = "IDREF"; public static final String IDREFS = "IDREFS"; public static final String ANYDATA = "anydata"; public static final String ANY_TYPE = "anyType"; public static final String ANY_SIMPLE_TYPE = "anySimpleType"; public static final String ANY_ATOMIC_TYPE = "anyAtomicType"; + private static final Set SIMPLE_TYPES = Set.of( + TIME, DATE_TIME, DATE, G_YEAR_MONTH, G_YEAR, STRING, LANGUAGE, DURATION, + INTEGER, LONG, NEGATIVE_INTEGER, NON_POSITIVE_INTEGER, POSITIVE_INTEGER, SHORT, + UNSIGNED_LONG, UNSIGNED_INT, UNSIGNED_SHORT, UNSIGNED_BYTE, INT, BASE64_BINARY, + BOOLEAN, FLOAT, DOUBLE, DECIMAL, ANY_URI, NON_NEGATIVE_INTEGER, G_MONTH_DAY, G_DAY, + G_MONTH, NORMALIZED_STRING, TOKEN, NCNAME, QNAME, NOTATION, NMTOKEN, NMTOKENS, + IDREF, IDREFS, ID, HEX_BINARY, BYTE, NAME, ENTITY, ENTITIES + ); public static String addNamespace(XSDVisitorImpl xsdVisitor, String namespace) { if (Objects.equals(namespace, EMPTY_STRING)) { @@ -186,9 +198,9 @@ public static String deriveType(Node node) { public static String typeGenerator(String typeName) { switch (typeName) { - case TIME, DATE_TIME, DATE, G_YEAR_MONTH, G_YEAR, STRING, LANGUAGE, - DURATION, ANY_URI, G_MONTH_DAY, NMTOKEN, IDREF, IDREFS, G_DAY, G_MONTH, NORMALIZED_STRING, - TOKEN, NCNAME, QNAME, NOTATION, BASE64_BINARY, HEX_BINARY, BYTE, ID -> { + case TIME, DATE_TIME, DATE, G_YEAR_MONTH, G_YEAR, STRING, LANGUAGE, DURATION, ANY_URI, G_MONTH_DAY, + NMTOKEN, NMTOKENS, IDREF, IDREFS, G_DAY, G_MONTH, NORMALIZED_STRING, TOKEN, NCNAME, QNAME, + NOTATION, BASE64_BINARY, HEX_BINARY, BYTE, ID, NAME, ENTITY, ENTITIES -> { return STRING; } case INTEGER, LONG, NEGATIVE_INTEGER, NON_POSITIVE_INTEGER, POSITIVE_INTEGER, SHORT, @@ -215,13 +227,7 @@ public static String typeGenerator(String typeName) { public static boolean isSimpleType(String type) { String typeName = type.contains(COLON) ? type.substring(type.indexOf(COLON) + 1) : type; - String[] simpleTypes = { - TIME, DATE_TIME, DATE, G_YEAR_MONTH, G_YEAR, STRING, LANGUAGE, DURATION, - INTEGER, LONG, NEGATIVE_INTEGER, NON_POSITIVE_INTEGER, POSITIVE_INTEGER, SHORT, - UNSIGNED_LONG, UNSIGNED_INT, UNSIGNED_SHORT, - UNSIGNED_BYTE, INT, BASE64_BINARY, BOOLEAN, FLOAT, DOUBLE, DECIMAL, ANY_URI, NON_NEGATIVE_INTEGER - }; - return Arrays.stream(simpleTypes).toList().contains(typeName); + return SIMPLE_TYPES.contains(typeName); } public static Iterable asIterable(NodeList nodeList) { diff --git a/xsd-core/src/test/java/io/ballerina/xsd/core/XSDToRecordTest.java b/xsd-core/src/test/java/io/ballerina/xsd/core/XSDToRecordTest.java index 517a2dd..88c1c9a 100644 --- a/xsd-core/src/test/java/io/ballerina/xsd/core/XSDToRecordTest.java +++ b/xsd-core/src/test/java/io/ballerina/xsd/core/XSDToRecordTest.java @@ -86,7 +86,9 @@ private static Stream provideTestPaths() { "41_elements_with_attribute_group.bal"}, new Object[] {new String[] {"42_elements_with_any.xsd"}, "42_elements_with_any.bal"}, new Object[] {new String[] {"43_elements_with_include_base.xsd", "43_elements_with_include.xsd"}, - "43_elements_with_include.bal"} + "43_elements_with_include.bal"}, + new Object[] {new String[] {"44_elements_with_builtin_string_types.xsd"}, + "44_elements_with_builtin_string_types.bal"} ); } diff --git a/xsd-core/src/test/resources/expected/44_elements_with_builtin_string_types.bal b/xsd-core/src/test/resources/expected/44_elements_with_builtin_string_types.bal new file mode 100644 index 0000000..95a8046 --- /dev/null +++ b/xsd-core/src/test/resources/expected/44_elements_with_builtin_string_types.bal @@ -0,0 +1,21 @@ +import ballerina/data.xmldata; + +@xmldata:Namespace {uri: "http://namespace.org/"} +public type TokenList record {| + string \#content; +|}; + +@xmldata:Namespace {uri: "http://namespace.org/"} +public type EntityRef record {| + string \#content; +|}; + +@xmldata:Namespace {uri: "http://namespace.org/"} +public type EntityRefs record {| + string \#content; +|}; + +@xmldata:Namespace {uri: "http://namespace.org/"} +public type NameVal record {| + string \#content; +|}; diff --git a/xsd-core/src/test/resources/xml/44_elements_with_builtin_string_types.xsd b/xsd-core/src/test/resources/xml/44_elements_with_builtin_string_types.xsd new file mode 100644 index 0000000..6a9ff9d --- /dev/null +++ b/xsd-core/src/test/resources/xml/44_elements_with_builtin_string_types.xsd @@ -0,0 +1,6 @@ + + + + + +