5
我知道這是一個初學者問題,但我一直試圖解決這個問題,一直在困擾我的頭撞牆。使用JAXB解組一個列表
我有XML從REST服務(Windows Azure管理API),它看起來像下面回來:
<HostedServices
xmlns="http://schemas.microsoft.com/windowsazure"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<HostedService>
<Url>https://management.core.windows.net/XXXXX</Url>
<ServiceName>foo</ServiceName>
</HostedService>
<HostedService>
<Url>https://management.core.windows.net/XXXXX</Url>
<ServiceName>bar</ServiceName>
</HostedService>
</HostedServices>
當我嘗試取消元帥使用JAXB它,服務的列表總是空的。
我想盡可能避免編寫XSD(Microsoft不提供)。下面是JAXB代碼:
JAXBContext context = JAXBContext.newInstance(HostedServices.class, HostedService.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
HostedServices hostedServices = (HostedServices)unmarshaller.unmarshal(new StringReader(responseXML));
// This is always 0:
System.out.println(hostedServices.getHostedServices().size());
這裏是Java類:
@XmlRootElement(name="HostedServices", namespace="http://schemas.microsoft.com/windowsazure")
public class HostedServices
{
private List<HostedService> m_hostedServices = new ArrayList<HostedService>();
@XmlElement(name="HostedService")
public List<HostedService> getHostedServices()
{
return m_hostedServices;
}
public void setHostedServices(List<HostedService> services)
{
m_hostedServices = services;
}
}
@XmlType
public class HostedService
{
private String m_url;
private String m_name;
@XmlElement(name="Url")
public String getUrl()
{
return m_url;
}
public void setUrl(String url)
{
m_url = url;
}
@XmlElement(name="ServiceName")
public String getServiceName()
{
return m_name;
}
public void setServiceName(String name)
{
m_name = name;
}
}
任何幫助將衷心感謝。
謝謝!這解決了問題。但這真的是標準做法嗎?我在網上看到的各種JAXB示例似乎沒有包含名稱空間。 – 2010-02-11 19:39:19
還有一個'@ XmlSchema'包級別註釋。它爲包中的所有類指定默認名稱空間。 – axtavt 2010-02-11 19:56:22