java - 使用 JAXB 解码列表

标签 java list jaxb azure

我知道这是一个初学者问题,但我已经用头撞墙两个小时了,现在试图弄清楚这一点。

我从 REST 服务(Windows Azure 管理 API)返回了 XML,如下所示:

<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(微软没有提供)。这是 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;
  }

}

任何帮助将不胜感激。

最佳答案

@XmlRootElement命名空间 不会传播到其子级。您应该明确指定 namespace :

...
@XmlElement(name="HostedService", namespace="http://schemas.microsoft.com/windowsazure") 
...
@XmlElement(name="Url", namespace="http://schemas.microsoft.com/windowsazure") 
...
@XmlElement(name="ServiceName", namespace="http://schemas.microsoft.com/windowsazure")
... 

关于java - 使用 JAXB 解码列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2246935/

相关文章:

java - Netbeans:Jframe 中带有子索引的 JCombobox

java - 将日期文本更改为日期

python - 如何仅使用 itertools 将每个 Python 列表的元素重复 n 次?

c# - List<> 内的 "Tag"字符串

在 JRUBY 中构建 Web 应用程序之前,Tomcat 可能不会从 JAXB 加载 TOMCAT JAR

java - 在 Java 中从 hashmap 创建多个 XML 文件

java - 如何使用 SimpleDateFormat 格式化句子中的西类牙月份?

java - 我可以使用什么库来解析 Java 中的 Schedule String

python - 如何用两个索引替换列表中的项目

java - 使用 @XmlRootElement 注释类是否会降低性能?