XML根节点包含PCData时的JAXB注释

时间:2011-03-02 21:01:36

标签: xml jaxb marshalling jersey root

我正在尝试使用来自第三方网络服务的数据。不幸的是,Web服务正在以我所说的不寻常的XML格式返回数据。以下是我从服务中收到的数据示例:

    <?xml version="1.0" encoding="utf-8"?>
    <string xmlns="http://mynamespace">(-76.4844131, 39.1031567, 0.0000000)
         (-76.4871168, 39.1031567, 0.0000000)
         (-76.4875889, 39.1042890, 0.0000000)
         (-76.4905500, 39.1052881, 0.0000000)
    </string>

根节点的内容是一个较大的字符串值,而不是包含路径点元素列表(lat,lon,elevation)的根节点。虽然我可以解析字符串,但我希望使用JAXB(因为我使用JERSEY进行服务调用)将这个返回的XML转换为Java POCO。

理想情况下,将根节点的大字符串体转换为带有路径列表的POCO类会很好,但我想这需要在JAXB之外进行自定义XML反序列化。

但如果我可以使用JAXB,我会对此感到高兴:

@XmlRootElement(name="string", namespace="http://mynamespace")
public class Route {
  private String _wayPoints;

  @ ???? 
  public String getWayPoints() { returns _waypoints; }
  public void setWayPoints(String wayPoints) { _wayPoints = wayPoints; }
}

不幸的是,我没有在JAXB中看到任何方式告诉编组人员我的一个属性应该是根元素或其他元素的内容。

理想情况下,如果我能用以下内容注释我的财产会很好:

@XmlElementContent(ElementName="string")

这会将我的wayPoint属性的内容编组/解组为我的根元素的内容(或innertext)。

有没有人有类似的问题?有没有办法用JAXB做到这一点?或者我应该考虑解析字符串和/或编写自定义XML反序列化器。

谢谢!

1 个答案:

答案 0 :(得分:4)

您可以使用@XmlValue

@XmlValue
public String getWayPoints() { returns _waypoints; }