diff --git a/CHANGELOG.md b/CHANGELOG.md index 9fa9416a468..671f4e937af 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,8 @@ ### 6.7-SNAPSHOT #### Bugs -Fix #5145: [java-generator] handle `additionalProperties: true` emitting a field of type `AnyType` +* Fix #5145: [java-generator] handle `additionalProperties: true` emitting a field of type `AnyType` +* Fix #5164: [java-generator] handle more special characters in field names #### Improvements diff --git a/java-generator/core/src/main/java/io/fabric8/java/generator/nodes/AbstractJSONSchema2Pojo.java b/java-generator/core/src/main/java/io/fabric8/java/generator/nodes/AbstractJSONSchema2Pojo.java index 7486bfd10a4..09e29cfbcc9 100644 --- a/java-generator/core/src/main/java/io/fabric8/java/generator/nodes/AbstractJSONSchema2Pojo.java +++ b/java-generator/core/src/main/java/io/fabric8/java/generator/nodes/AbstractJSONSchema2Pojo.java @@ -131,10 +131,12 @@ public static String sanitizeString(String str) { index = sanitized.indexOf('-'); } - sanitized = sanitized.replace('.', '_'); - sanitized = sanitized.replace(' ', '_'); - sanitized = sanitized.replace('\'', '_'); - sanitized = sanitized.replace('\"', '_'); + StringBuilder sanitizedSb = new StringBuilder(sanitized.length()); + for (char originalChar : sanitized.toCharArray()) { + char sanitizedChar = Character.isJavaIdentifierPart(originalChar) ? originalChar : '_'; + sanitizedSb.append(sanitizedChar); + } + sanitized = sanitizedSb.toString(); return sanitized; } diff --git a/java-generator/core/src/test/resources/dummy-crd.yml b/java-generator/core/src/test/resources/dummy-crd.yml index 5cab8250e73..a15c273118d 100644 --- a/java-generator/core/src/test/resources/dummy-crd.yml +++ b/java-generator/core/src/test/resources/dummy-crd.yml @@ -41,6 +41,8 @@ spec: type: string four"doublequote: type: string + five/slash: + type: string scope: Namespaced names: plural: dummies diff --git a/java-generator/it/src/it/escape-characters/src/test/java/io/fabric8/it/dummy/TestEscapeCharacters.java b/java-generator/it/src/it/escape-characters/src/test/java/io/fabric8/it/dummy/TestEscapeCharacters.java index 83db0e0a385..639cca14511 100644 --- a/java-generator/it/src/it/escape-characters/src/test/java/io/fabric8/it/dummy/TestEscapeCharacters.java +++ b/java-generator/it/src/it/escape-characters/src/test/java/io/fabric8/it/dummy/TestEscapeCharacters.java @@ -47,6 +47,7 @@ void testDeserialization() { assertEquals("2", spec.getTwo_space()); assertEquals("3", spec.getThree_quote()); assertEquals("4", spec.getFour_doublequote()); + assertEquals("5", spec.getFive_slash()); } @Test @@ -61,6 +62,7 @@ void testAgainstSample() throws Exception { spec.setTwo_space("2"); spec.setThree_quote("3"); spec.setFour_doublequote("4"); + spec.setFive_slash("5"); sample.setSpec(spec); ObjectMeta om = new ObjectMeta(); om.setName("sample"); diff --git a/java-generator/it/src/it/escape-characters/src/test/resources/dummy-crd.yml b/java-generator/it/src/it/escape-characters/src/test/resources/dummy-crd.yml index 5cab8250e73..a15c273118d 100644 --- a/java-generator/it/src/it/escape-characters/src/test/resources/dummy-crd.yml +++ b/java-generator/it/src/it/escape-characters/src/test/resources/dummy-crd.yml @@ -41,6 +41,8 @@ spec: type: string four"doublequote: type: string + five/slash: + type: string scope: Namespaced names: plural: dummies diff --git a/java-generator/it/src/it/escape-characters/src/test/resources/sample.yaml b/java-generator/it/src/it/escape-characters/src/test/resources/sample.yaml index a53ff65aecd..545e700f2ac 100644 --- a/java-generator/it/src/it/escape-characters/src/test/resources/sample.yaml +++ b/java-generator/it/src/it/escape-characters/src/test/resources/sample.yaml @@ -24,3 +24,4 @@ spec: two space: "2" three'quote: "3" four"doublequote: "4" + five/slash: "5"