jsonschema2pojo no genera clases pojo desde la cadena json

Estaba siguiendo el enlace Generar clase Java desde JSON? para crear las clases POJO desde la cadena json (y no desde el esquema). Estoy usando jsonschema2pojo jar de la versión 0.4.10 pero no pude generar la clase POJO. Mi código es el siguiente

public class App { public static void main( String[] args ) { JCodeModel codeModel = new JCodeModel(); try { URL source = new URL("file:///C://Users//...//accession.json"); new SchemaMapper().generate(codeModel, "Accession", "com.test", source); File dir = new File("D://test"); if(dir.exists()){ System.out.println("dir available"); codeModel.build(dir); }else{ System.out.println("dir not available"); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } 

Por lo tanto, accession.json tiene una cadena json que debe convertirse en POJO. ¿Alguien por favor me puede ayudar aquí?

Tuve una experiencia similar utilizando la herramienta de línea de comandos. En mi caso, fue el resultado de no especificar correctamente el tipo de origen (JSONSCHEMA o JSON; predeterminado: JSONSCHEMA).

Creo que su problema es similar: está utilizando el constructor predeterminado (no-args) para SchemaMapper . Los siguientes pasos deberían resolver el problema:

  1. Subclase org.jsonschema2pojo.DefaultGenerationConfig , sobrescribiendo getSourceType() para devolver SourceType.JSON
  2. Use una instancia de esa subclase para el SchemaMapper(RuleFactory ruleFactory, SchemaGenerator schemaGenerator) (en lugar del constructor no-args).

Una vez me enfrenté al mismo problema y luego resolví esto. En su código, está utilizando la configuración predeterminada que toma el tipo de origen Jason Schema. Pero cuando está ingresando a Jason, debe configurar este tipo de retorno de esta manera: SourceType.JSON en su configuración.

 class App { public static void main( String[] args ) { JCodeModel codeModel = new JCodeModel(); try { URL source= new URL("file:///D:/temp.json"); GenerationConfig config = new DefaultGenerationConfig() { @Override public boolean isGenerateBuilders() { return true; } public SourceType getSourceType(){ return SourceType.JSON; } }; SchemaMapper mapper =new SchemaMapper(new RuleFactory(config, new GsonAnnotator(), new SchemaStore()), new SchemaGenerator()); mapper.generate(codeModel, "Accession", "com.test", source); File dir = new File("D://"); if(dir.exists()){ System.out.println("dir available"); codeModel.build(dir); }else{ System.out.println("dir not available"); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } 

Espero que te ayude .. Buena suerte !!

También luché un poco con esto. Hice lo siguiente al final:

Creé mi propio GenerationConfig, anulando getSourceType :

 static class MyConfig extends DefaultGenerationConfig { @Override public SourceType getSourceType() { return SourceType.JSON; } } 

Luego inicialicé el proceso de construcción de la siguiente manera:

 private void parseFileExample() { URL source = new URL("file:/tmp/input/blah.json"); JCodeModel codeModel = new JCodeModel(); MyConfig generationConfig = new MyConfig(); RuleFactory ruleFactory = new RuleFactory(generationConfig, new GsonAnnotator(), new SchemaStore()); SchemaGenerator generator = new SchemaGenerator(); SchemaMapper mapper = new SchemaMapper(ruleFactory, generator); mapper.generate(codeModel, "MyClass", "com.drakedroid", source); codeModel.build(new File("/tmp/output/")); } 

El truco aquí era usar una URL . El mapper.generate no funcionó cuando pasé solo una cadena.

Gracias @Kapil, tu respuesta me ayudó. Este progtwig nos permite generar clases de POJO según JSON predefinido. También podemos usarlo en el tiempo de ejecución, donde no se conoce la respuesta de JSON, escriba la respuesta de JSON en el archivo y léala en consecuencia utilizando el siguiente código.

 public class JSONExample { public static void main(String... args) { JCodeModel codeModel = new JCodeModel(); try { // In sample.json I have already pasted a JSON File file=new File("//root//AndroidStudioProjects//MyApplication//sample.json"); URL source = file.toURI().toURL(); GenerationConfig config = new DefaultGenerationConfig() { @Override public boolean isGenerateBuilders() { return true; } public SourceType getSourceType() { return SourceType.JSON; } }; SchemaMapper mapper = new SchemaMapper(new RuleFactory(config, new Jackson2Annotator(), new SchemaStore()), new SchemaGenerator()); try { // The ClassName is the main class that will contain references to other generated class files // com.example is the package name mapper.generate(codeModel, "ClassName", "com.example", source); } catch (IOException e) { e.printStackTrace(); } try { // Directory where classes will be genetrated File file1=new File("//root//AndroidStudioProjects//MyApplication//"); if (file1.exists()) { System.out.println("dir available"); codeModel.build(file1); } else { System.out.println("dir not available"); } System.out.println(""+file1+" Exists "+file1.exists()); } catch (IOException e) { e.printStackTrace(); } } catch(Exception e) { e.printStackTrace(); } } }