XML 到 Java JaxB
XML to Java JaxB
我尝试使用 JAXB 将 XML 转换为 Java 未按预期工作。围绕它还有多个其他类似的问题,但我研究的建议解决方案中 none 似乎对我有所帮助。
下面是我的bean
@XmlRootElement(name = "ListingResponse", namespace = "http://www.random.com")
@XmlType(propOrder = {"success", "listingId", "description"})
public class ListingResponse {
private String success;
private String listingId;
private String description;
public String getSuccess() {
return success;
}
@XmlElement(name = "Success")
public void setSuccess(String success) {
this.success = success;
}
public String getListingId() {
return listingId;
}
@XmlElement(name = "ListingId")
public void setListingId(String listingId) {
this.listingId = listingId;
}
public String getDescription() {
return description;
}
@XmlElement(name = "Description")
public void setDescription(String description) {
this.description = description;
}
下面是我尝试进行解组的尝试
ListingResponse response = null;
try {
JAXBContext jaxbContext = JAXBContext.newInstance(ListingResponse.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
response = (ListingResponse) jaxbUnmarshaller.unmarshal(new File("response.xml"));
} catch (JAXBException e) {
e.printStackTrace();
}
最后是我的 response.xml 内容
<ListingResponse xmlns="http://www.random.com" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Success>true</Success>
<Description>ListingId 123 created.</Description>
<ListingId>123</ListingId>
</ListingResponse>
- 没有抛出异常。
- '
response
' 不为空。
- 我试过添加
@XmlAccessorType(XmlAccessType.FIELD / PROPERTY)
在字段/设置方法上使用 @XMLEelement
注释,但这似乎也没有帮助。
但是,响应总是 'empty',其中 none 个字段已初始化。
你们能发现这里的问题吗?
目前您只为根元素指定了正确的名称空间限定。您需要使用包级别 @XmlSchema
注释来映射模型的名称空间限定。
包-info.java
@XmlSchema(
namespace = "http://www.random.com",
elementFormDefault = XmlNsForm.QUALIFIED)
package example;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;
了解更多信息
我尝试使用 JAXB 将 XML 转换为 Java 未按预期工作。围绕它还有多个其他类似的问题,但我研究的建议解决方案中 none 似乎对我有所帮助。
下面是我的bean
@XmlRootElement(name = "ListingResponse", namespace = "http://www.random.com")
@XmlType(propOrder = {"success", "listingId", "description"})
public class ListingResponse {
private String success;
private String listingId;
private String description;
public String getSuccess() {
return success;
}
@XmlElement(name = "Success")
public void setSuccess(String success) {
this.success = success;
}
public String getListingId() {
return listingId;
}
@XmlElement(name = "ListingId")
public void setListingId(String listingId) {
this.listingId = listingId;
}
public String getDescription() {
return description;
}
@XmlElement(name = "Description")
public void setDescription(String description) {
this.description = description;
}
下面是我尝试进行解组的尝试
ListingResponse response = null;
try {
JAXBContext jaxbContext = JAXBContext.newInstance(ListingResponse.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
response = (ListingResponse) jaxbUnmarshaller.unmarshal(new File("response.xml"));
} catch (JAXBException e) {
e.printStackTrace();
}
最后是我的 response.xml 内容
<ListingResponse xmlns="http://www.random.com" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Success>true</Success>
<Description>ListingId 123 created.</Description>
<ListingId>123</ListingId>
</ListingResponse>
- 没有抛出异常。
- '
response
' 不为空。 - 我试过添加
@XmlAccessorType(XmlAccessType.FIELD / PROPERTY)
在字段/设置方法上使用@XMLEelement
注释,但这似乎也没有帮助。
但是,响应总是 'empty',其中 none 个字段已初始化。
你们能发现这里的问题吗?
目前您只为根元素指定了正确的名称空间限定。您需要使用包级别 @XmlSchema
注释来映射模型的名称空间限定。
包-info.java
@XmlSchema(
namespace = "http://www.random.com",
elementFormDefault = XmlNsForm.QUALIFIED)
package example;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;
了解更多信息