为什么我的程序以XML格式返回字符串值?

时间:2019-05-21 11:56:32

标签: java xml servlets

我正在使用Web服务,它返回一个String值。但是在我的输出中,该值是XML格式:

String point = request.getParameter("point");
try {
  String latLonListCityNames = proxy.latLonListCityNames(new BigInteger(point));
  request.setAttribute("point", latLonListCityNames);
  System.out.println(latLonListCityNames);
} catch (RemoteException e) {
  e.printStackTrace();
}

我希望输出例如“俄克拉荷马州”,但实际输出是:

<?xml version='1.0' ?>
<dwml version='1.0' xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://graphical.weather.gov/xml/DWMLgen/schema/DWML.xsd">
    <latLonList>
    <cityNameList>
        Oklahoma
    </cityNameList>
</dwml>

1 个答案:

答案 0 :(得分:0)

Web服务的响应通常(并非总是)以XML表示。如果您需要从xml字符串响应中提取所需格式的数据,例如Java Objects(POJO),则需要一个转换器,即数据封送处理和取消封送处理。

简单的解决方案

使用JAXB

什么是JAXBFrom wiki

  

用于XML绑定的Java体系结构(JAXB)是一种软件框架,允许Java开发人员将Java类映射到XML表示形式。 JAXB提供了两个主要功能:将Java对象编组为XML的能力和相反的功能,即将XML解组为Java对象的能力。

它如何适应我的用例?

为您期望的响应类型创建一个简单的POJO。然后使用JAXB转换器为您转换它们。

例如。如果希望得到cityName的响应列表,则可以按如下所示创建POJO。

CityModel.java

public Class CityModel {
    private List<String> cityName;
    // if more field required, add here.
}

示例XML响应应该是。

<ListOfCities>
    <CityName>My City</CityName>
    <CityName>Your City</CityName>
    <CityName>So Pity</CityName>
</ListOfCities>

然后,将此xml响应字符串传递给等效类类型的JAXB绑定。即CityModel

如何做所有这一切?您可以分享一些很好的例子吗?

阅读this tutorial即可开始。

我对响应类型名称有疑问,描述得不好,如何将其映射为所需的其他名称?

您可能需要查看下面的链接,它们的关键部分是详细研究@XmlRootElement@XmlAttribute@XmlElement等自定义配置的注释。

几个更重要的链接可以在以后提供帮助?

Convert Soap XML response to Object

convert xml to java object using jaxb (unmarshal)

Using JAXB for XML With Java

JAXB Unmarshalling Example: Converting XML into Object