我正在使用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>
答案 0 :(得分:0)
Web服务的响应通常(并非总是)以XML表示。如果您需要从xml字符串响应中提取所需格式的数据,例如Java Objects(POJO),则需要一个转换器,即数据封送处理和取消封送处理。
简单的解决方案
使用JAXB
。
什么是JAXB
? From 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