为什么我的程序 Return 字符串值采用 XML 格式?
Why My program Return String Value in XML format?
我正在使用 Web 服务,它 returns 是一个字符串值。但在我的输出中,该值采用 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();
}
我希望输出例如 "Oklahoma",但实际输出是:
<?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>
web-services 的回复通常(不总是)在 XML 中。如果您需要从 xml 字符串响应中提取所需格式的数据,例如 Java 对象 (POJO),您需要一个转换器,即编组和 Un-marshaling 数据。
简单的解决方案
使用JAXB
.
什么是JAXB
? From wiki
Java Architecture for XML Binding (JAXB) is a software framework that allows Java developers to map Java classes to XML representations. JAXB provides two main features: the ability to marshal Java objects into XML and the inverse, i.e. to unmarshal XML back into Java objects.
它如何适合我的 use-case?
为您期望的响应类型创建一个简单的 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 响应字符串传递给等效 Class 类型的 JAXB 绑定。即 CityModel
.
这一切是怎么做到的?你能分享一些好的例子吗?
阅读 this tutorial 开始。
我对响应类型名称有疑问,它们没有很好地描述,我怎样才能用我想要的不同名称映射它们?
您可能需要查看下面的链接,它们的关键部分是调查更多关于 @XmlRootElement
、@XmlAttribute
、@XmlElement
等自定义配置的注释。
有几个更重要的链接可以在以后提供帮助?
convert xml to java object using jaxb (unmarshal)
我正在使用 Web 服务,它 returns 是一个字符串值。但在我的输出中,该值采用 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();
}
我希望输出例如 "Oklahoma",但实际输出是:
<?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>
web-services 的回复通常(不总是)在 XML 中。如果您需要从 xml 字符串响应中提取所需格式的数据,例如 Java 对象 (POJO),您需要一个转换器,即编组和 Un-marshaling 数据。
简单的解决方案
使用JAXB
.
什么是JAXB
? From wiki
Java Architecture for XML Binding (JAXB) is a software framework that allows Java developers to map Java classes to XML representations. JAXB provides two main features: the ability to marshal Java objects into XML and the inverse, i.e. to unmarshal XML back into Java objects.
它如何适合我的 use-case?
为您期望的响应类型创建一个简单的 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 响应字符串传递给等效 Class 类型的 JAXB 绑定。即 CityModel
.
这一切是怎么做到的?你能分享一些好的例子吗?
阅读 this tutorial 开始。
我对响应类型名称有疑问,它们没有很好地描述,我怎样才能用我想要的不同名称映射它们?
您可能需要查看下面的链接,它们的关键部分是调查更多关于 @XmlRootElement
、@XmlAttribute
、@XmlElement
等自定义配置的注释。
有几个更重要的链接可以在以后提供帮助?
convert xml to java object using jaxb (unmarshal)