2013-07-01 16 views
0

我有兩個對象應用程序和環境列表。我正在添加這些列表,但我將輸出作爲應用程序的一個完整列表,而不是其他整個環境列表。添加兩個列表並獲取嵌套格式的XML輸出

我希望它在嵌套形式,如應用程序和環境,比第二排的應用環境和一個入口等

這是我的代碼:

@GET 
@Path("/test") 
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) 
public ArrayList<MyModel> Test(){ 

    System.out.println("inside test"); 

    List<ApplicationDTO> allApplication = applicationService.getAllApplication(); 

    List<Application> Applist = new ArrayList<Application>(); 
    List<Environment> Envlist = new ArrayList<Environment>(); 

    for(ApplicationDTO d: allApplication) 
    { 
     Application a = new Application(); 

     a.setApplicationDescription(d.getApplicationDescription()); 
     a.setApplicationId(d.getApplicationId()); 
     a.setApplicationName(d.getApplicationName()); 
     a.setAssignedTo(d.getAssignedTo()); 
     a.setCreatedBy(d.getCreatedBy()); 
     a.setCreateTime(d.getCreateTime()); 
     a.setModifiedTime(d.getModifiedTime()); 
     a.setOwner(d.getOwner()); 

     Environment e = new Environment(); 

     for(EnvironmentDTO en: d.getEnvironment()) 
     { 
      e.setEnvironmentId(en.getEnvironmentId()); 
      e.setEnvironmentName(en.getEnvironmentName()); 
      e.setOwner(en.getOwner()); 
      e.setCreateTime(en.getCreateTime()); 

      Envlist.add(e); 
     } 

     Applist.add(a); 
    } 

    ArrayList<MyModel> obj= new ArrayList<MyModel>(); 
    MyModel mm = new MyModel(); 
    mm.setAppDTO(Applist); 
    mm.setEnDTO(Envlist); 
    obj.add(mm); 
    return obj; 
    } 

編輯

我改變了我的類我已經添加了應用程序中的環境列表,現在我正在獲取應用程序內所有環境的列表,但是我需要一個應用程序中的一個環境,其他下一個裏面等等。我錯過了什麼?

public List<Application> Test(){ 

    System.out.println("inside test"); 

    List<ApplicationDTO> allApplication = applicationService.getAllApplication(); 

    List<Application> Applist = new ArrayList<Application>(); 
    List<Environment> Envlist = new ArrayList<Environment>(); 

    for(ApplicationDTO d: allApplication) 
    {   
     Application a = new Application(); 

     a.setApplicationDescription(d.getApplicationDescription()); 
     a.setApplicationId(d.getApplicationId()); 
     a.setApplicationName(d.getApplicationName()); 
     a.setAssignedTo(d.getAssignedTo()); 
     a.setCreatedBy(d.getCreatedBy()); 
     a.setCreateTime(d.getCreateTime()); 
     a.setModifiedTime(d.getModifiedTime()); 
     a.setOwner(d.getOwner()); 

     for(EnvironmentDTO en: d.getEnvironment()) 
     { 
      Environment e = new Environment(); 

      e.setEnvironmentId(en.getEnvironmentId()); 
      e.setEnvironmentName(en.getEnvironmentName()); 
      e.setOwner(en.getOwner()); 
      e.setCreateTime(en.getCreateTime()); 
      Envlist.add(e); 
     } 

     a.setEnvlists(Envlist);   
     Applist.add(a); 
    } 
    return Applist; 
+0

您是否生成了XSD並將JAXB應用於它? – Woot4Moo

+1

不應該'Environment e = new Environment();'放在for循環中for(EnvironmentDTO en:'?你也可以**不設置'Application'對象中任何地方的'Envlist' –

+0

@Shashank :我認爲這將是他的問題的解決方案。設置a.setEnvironment(en);在Applist.add(a)之前; –

回答

1

您應該創建一個包含應用程序和一系列環境的對象,如ApplicationWithEnvironments。

List<ApplicationWithEnvironments > AppWithEnvlist = new ArrayList<ApplicationWithEnvironments >();   

    for(ApplicationDTO d: allApplication) { 
     ApplicationWithEnvironments appWithEnv = new ApplicationWithEnvironments(); 

     Application a = new Application(); 

     a.set... 

     appWithEnv.setApplication(a); 


     for(EnvironmentDTO en: d.getEnvironment()) 
     { 
      Environment e = new Environment(); 
      e.set... 
      appWithEnv.addEnvironment(e); 
     } 

     AppWithEnvList.add(appWithEnv); 
    } 

    ArrayList<MyModel> obj= new ArrayList<MyModel>(); 
    MyModel mm = new MyModel(); 
    mm.setAppWithEnvList(AppWithEnvList); 
    obj.add(mm); 
    return obj; 

或者你可以在你的應用程序對象中有一個環境列表,所以你不需要新的ApplicationWithEnvironments對象了。

+0

應該怎樣我在ApplicationWithEnvironments類中有兩個列表,分別是List 和List 或其他一些屬性嗎? – Prats

+0

您將擁有1個應用程序屬性和1個列表屬性。 – herman

+0

請看看編輯並告訴我我錯過了什麼? – Prats