2010-07-25 8 views

Répondre

2

Vous pourriez probablement écrire quelque chose assez facilement, puis appeler Ant:

import java.io.File; 
import java.io.IOException; 

import javax.xml.bind.JAXBContext; 
import javax.xml.bind.SchemaOutputResolver; 
import javax.xml.transform.Result; 
import javax.xml.transform.stream.StreamResult; 

public class SchemaGenerator { 

    public static void main(String[] args) throws Exception { 
     String contextPath = args[0]; 
     String outputDir = args[1]; 
     JAXBContext jc = JAXBContext.newInstance(contextPath); 
     jc.generateSchema(new MySchemaOutputResolver(schemaFileName)); 
    } 

    private static class MySchemaOutputResolver extends SchemaOutputResolver { 

     private String outputDir; 

     public MySchemaOutputResolver(String outputDir) { 
      this.outputDir = outputDir; 
     } 

     public Result createOutput(String namespaceURI, String suggestedFileName) throws IOException { 
      File file = new File(outputDir + "/" + suggestedFileName); 
      StreamResult result = new StreamResult(file); 
      result.setSystemId(file.toURI().toURL().toString()); 
      return result; 
     } 

    } 

} 

Dans votre chemin de contexte vous auriez besoin d'un fichier jaxb.index avec une liste des classes à inclure dans votre JAXBContext. Ou vous pouvez passer les noms de classes à la classe SchemaGenerator et les charger via un ClassLoader.

Questions connexes