2013-03-12 104 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; 
      } 
     } 

} 

我得到的只是GpxType類的XSD。這是爲什麼?

爲了讓您知道,GpxType和JourneyXML是從XSD文件生成的。

如何執行此操作以生成我需要的適當XSD?

+0

你的屬性是否有相應的'set'方法? – 2013-03-12 14:50:27

+0

是的。我沒有添加完整的類,因爲我認爲它可能沒用。 – 2013-03-12 15:00:39

+0

您使用的是JAXB(JSR-222)的哪個版本和實現? – 2013-03-12 15:04:10

回答

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

就是這樣。謝謝。 – 2013-03-13 09:49:39