2016-02-05 77 views
2

我想deserialize以下xml如何反序列化簡單框架中的數組映射?

<scenario name="test responses"> 
    <cmd name="query1"> 
     <return>success_200.xml</return> 
     <return>error_500.xml</return> 
    </cmd> 
    <cmd name="query2"> 
     <return>success_200.xml</return> 
    </cmd> 
</scenario> 

到該類

@Root(name="scenario") 
public class TestScenario { 
    @ElementMap(entry="cmd", key="name", attribute=true, inline=true) 
    private Map<String,StepsList> scenario; 

    @Attribute(required = false) 
    private String name = ""; 

    public static class StepsList { 
     @ElementList(name="return") 
     private List<String> steps = new ArrayList<String>(); 

     public List<String> getSteps() { 
      return steps; 
     } 
    } 
} 

卻得到了一個org.simpleframework.xml.core.ValueRequiredException:無法滿足@org.simpleframework.xml.ElementList

如何可以做到?

+0

檢查:HTTP:// simple.sourceforge.net/download/stream/doc/tutorial/tutorial.php#deserialize –

回答

0

於是,幾個小時的研究後,我創建了一個有效的解決方案。

奇怪的是,但要創建一個陣列的地圖,你需要使用@ElementList裝飾與特殊的SimpleFramework工具類Dictionary。插入該字典的對象必須實現接口並可以包含任何解析規則。在我的情況下,它們包含List<String>對應內部<return>標籤。

您可以在本教程的閱讀工具類:http://simple.sourceforge.net/download/stream/doc/tutorial/tutorial.php#util

@Root(name="scenario") 
public class TestScenario { 
    @ElementList(inline=true) 
    private Dictionary<StepsList> scenario; 

    @Attribute(required = false) 
    private String name = ""; 

    public Dictionary<StepsList> getScenario() { 
     return scenario; 
    } 

    @Root(name="cmd") 
    public static class StepsList implements Entry { 
     @Attribute 
     private String name; 

     @ElementList(inline=true, entry="return") 
     private List<String> steps; 

     @Override 
     public String getName() { 
      return name; 
     } 

     public List<String> getSteps() { 
      return steps; 
     } 
    } 
} 

Dictionary是實現java.util.Set一類,你可以使用它像這樣:

TestScenario test = loadScenario("test.xml"); 
String step1 = test.getScenario().get("query1").getSteps().get(0); 
// step1 is now "success_200.xml" 
String step2 = test.getScenario().get("query1").getSteps().get(1); 
// step2 is now "error_500.xml" 
+0

我很感興趣,你可以嗎?明白髮生了什麼事? –

+0

已更新的答案,以澄清 –

+0

謝謝,但我沒有看到地圖,但有一個列表> –

0

試試這個:

@ElementList(required = false, inline = true, name="return") 
private List<String> steps = new ArrayList<String>(); 
+0

現在它拋出一個'org.simpleframework.xml.core.ElementException:元素'return'沒有匹配' –