8073357: schema1.xsd has wrong content. Sequence of the enum values has been changed
Reviewed-by: joehw, lancea
--- a/jdk/test/javax/xml/ws/8046817/GenerateEnumSchema.java Tue Apr 21 13:21:40 2015 -0700
+++ b/jdk/test/javax/xml/ws/8046817/GenerateEnumSchema.java Wed Apr 22 02:23:06 2015 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -23,57 +23,83 @@
/*
* @test
- * @bug 8046817
- * @summary schemagen fails to generate xsd for enum types
+ * @bug 8046817 8073357
+ * @summary schemagen fails to generate xsd for enum types.
+ * Check that order of Enum values is preserved.
* @run main/othervm GenerateEnumSchema
*/
import java.io.BufferedReader;
import java.io.File;
-import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
+import java.nio.file.Files;
import java.nio.file.Paths;
-import java.util.Scanner;
+import java.util.stream.Collectors;
public class GenerateEnumSchema {
private static final String SCHEMA_OUTPUT_FILENAME = "schema1.xsd";
private static final File schemaOutputFile = new File(SCHEMA_OUTPUT_FILENAME);
+ private static final String[] expectedEnums = {
+ "\"FIRST\"", "\"ONE\"", "\"TWO\"", "\"THREE\"",
+ "\"FOUR\"", "\"FIVE\"", "\"SIX\"", "\"LAST\""};
+ private static String schemaContent = "";
- public static void main(String[] args) throws Exception, IOException {
+ public static void main(String[] args) throws Exception {
+
//Check schema generation for class type
runSchemaGen("TestClassType.java");
checkIfSchemaGenerated();
+ readSchemaContent();
checkSchemaContent("<xs:complexType name=\"testClassType\">");
checkSchemaContent("<xs:element name=\"a\" type=\"xs:int\"/>");
- schemaOutputFile.delete();
+
//Check schema generation for enum type
runSchemaGen("TestEnumType.java");
checkIfSchemaGenerated();
+ readSchemaContent();
+ //Check if Enum type schema is generated
checkSchemaContent("<xs:simpleType name=\"testEnumType\">");
- checkSchemaContent("<xs:enumeration value=\"ONE\"/>");
- checkSchemaContent("<xs:enumeration value=\"TWO\"/>");
- checkSchemaContent("<xs:enumeration value=\"THREE\"/>");
+ //Check the sequence of enum values order
+ checkEnumOrder();
schemaOutputFile.delete();
}
+ // Check if schema file successfully generated by schemagen
private static void checkIfSchemaGenerated() {
if (!schemaOutputFile.exists()) {
throw new RuntimeException("FAIL:" + SCHEMA_OUTPUT_FILENAME + " was not generated by schemagen tool");
}
}
- private static void checkSchemaContent(String exp_token) throws FileNotFoundException {
- System.out.print("Check if generated schema contains '" + exp_token + "' string: ");
- try (Scanner scanner = new Scanner(schemaOutputFile)) {
- if (scanner.findWithinHorizon(exp_token, 0) != null) {
- System.out.println("OK");
- return;
- }
+ //Read schema content from file
+ private static void readSchemaContent() throws Exception {
+ schemaContent = Files.lines(schemaOutputFile.toPath()).collect(Collectors.joining(""));
+ }
+
+ // Check if schema file contains specific string
+ private static void checkSchemaContent(String expContent) {
+ System.out.print("Check if generated schema contains '" + expContent + "' string: ");
+ if (schemaContent.contains(expContent)) {
+ System.out.println("OK");
+ return;
}
System.out.println("FAIL");
- throw new RuntimeException("The '" + exp_token + "' is not found in generated schema");
+ throw new RuntimeException("The '" + expContent + "' is not found in generated schema");
+ }
+ // Check if the generated schema contains all enum constants
+ // and their order is preserved
+ private static void checkEnumOrder() throws Exception {
+ int prevElem = -1;
+ for (String elem : expectedEnums) {
+ int curElem = schemaContent.indexOf(elem);
+ System.out.println(elem + " position = " + curElem);
+ if (curElem < prevElem) {
+ throw new RuntimeException("FAIL: Enum values order is incorrect or " + elem + " element is not found");
+ }
+ prevElem = curElem;
+ }
}
private static String getClassFilePath(String filename) {
--- a/jdk/test/javax/xml/ws/8046817/TestEnumType.java Tue Apr 21 13:21:40 2015 -0700
+++ b/jdk/test/javax/xml/ws/8046817/TestEnumType.java Wed Apr 22 02:23:06 2015 +0300
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2014, 2015, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -25,5 +25,5 @@
@XmlEnum(String.class)
public enum TestEnumType {
- ONE, TWO, THREE
+ FIRST, ONE, TWO, THREE, FOUR, FIVE, SIX, LAST
}