2013-03-12 1 views
3

У меня есть этот классJAXB не генерирует требуемую схему для класса, который содержит сгенерированные классы Java?

@XmlRootElement 
public class GpsDataRequest{ 

    //definition of variables 



    @XmlElement(required=true, type=GpxType.class) 
    public GpxType getGpxRoot() { 
     return gpxRoot; 
    } 

    @XmlElement(required=true, type=JourneyXML.class) 
    public JourneyXML getJourneyPlanRoot() { 
     return journeyPlanRoot; 
    } 

    @XmlElement(required=true) 
    public String getSecurityToken() { 
     return securityToken; 
    } 

    @XmlElement(required=true) 
    public UUID getUuid() { 
     return uuid; 
    } 
} 

Когда я генерировать схему, используя этот код:

public class SchemaGenerator { 

    public static void main(String[] args) 
    { 
     try { 
      JAXBContext context= 
        JAXBContext.newInstance(GpsDataRequest.class); 
      SchemaOutputResolver sor =new DemoSchemaOutputResolver(); 
      context.generateSchema(sor); 

     } catch (JAXBException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 


    } 

    public static class DemoSchemaOutputResolver extends SchemaOutputResolver { 

      @Override 
      public Result createOutput(String namespaceUri, String suggestedFileName) 
       throws IOException { 

       // create new file 
       File file = new File("request.xsd"); 

       // create stream result 
       StreamResult result = new StreamResult(file); 

       // set system id 
       result.setSystemId(file.toURI().toURL().toString()); 

       // return result 
       return result; 
      } 
     } 

} 

Все я получаю является XSD только класса GpxType. Почему это?

Чтобы сообщить вам об этом, GpxType и JourneyXML создаются из файлов XSD.

Как обеспечить это, чтобы создать подходящий XSD, который мне нужен?

+0

Имеются ли в ваших свойствах соответствующие методы 'set'? –

+0

Да. Я не добавил полный класс, потому что я думал, что это может быть бесполезно. –

+0

Какую версию и реализацию JAXB (JSR-222) вы используете? –

ответ

1

Попробуйте изменить метод createOutput, чтобы не всегда записывать файл request.xsd. Я считаю, что в вашей модели существует несколько пространств имен, и поэтому генерируются несколько XML-схем.

@Override 
public Result createOutput(String namespaceUri, String suggestedFileName) throws IOException { 

     // create new file 
     File file = new File(suggestedFileName); 

     // create stream result 
     StreamResult result = new StreamResult(file); 

     // set system id 
     result.setSystemId(file.toURI().toURL().toString()); 

     // return result 
     return result; 
    } 
+1

Вот и все. Благодарю. –

Смежные вопросы