[英]XML to Object Unmarshalling using JAXB
我需要将XML解组到Java Object,我尝试使用以下代码。 它创建一个对象,但是将所有值设置为null。 相同的代码:
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Dispatch implements java.io.Serializable {
private Integer dispatchId;
private Order order;
/**
* @return the dispatchId
*/
public Integer getDispatchId() {
return dispatchId;
}
/**
* @param dispatchId
* the dispatchId to set
*/
public void setDispatchId(Integer dispatchId) {
this.dispatchId = dispatchId;
}
/**
* @return the order
*/
public Order getOrder() {
return order;
}
/**
* @param order
* the order to set
*/
public void setOrder(Order order) {
this.order = order;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return ""+this.dispatchId;
}
}
我有Dispatch Class和其他子类,我需要将XML转换为Java Object。 相同的代码:
Public class UnmarshalExample {
public static void main(String[] args) {
String xmlString = "<ns1:dispatch xmlns:ns1=\"http://service.order.com\"><ns1:dispatchId>1</ns1:dispatchId><ns1:order><ns1:totalAmount>1000.0</ns1:totalAmount></ns1:order></ns1:dispatch>";
Dispatch dispatch = (Dispatch) JAXB.unmarshal(
new StringReader(xmlString), Dispatch.class);
System.out.println(dispatch);
}
}
作为输出,它将返回null 。
有人可以告诉我代码中有什么错误吗?
奇怪,我粘贴了代码并运行,它产生了dispatchId 1:
派遣班:
import javax.xml.bind.annotation.*;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Dispatch implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private Integer dispatchId;
/**
* @return the dispatchId
*/
public Integer getDispatchId() {
return dispatchId;
}
/**
* @param dispatchId
* the dispatchId to set
*/
public void setDispatchId(Integer dispatchId) {
this.dispatchId = dispatchId;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return ""+this.dispatchId;
}
}
测试班
import java.io.*;
import javax.xml.bind.JAXB;
public class Test {
public static void main(String[] args) {
String xmlString = "<ns1:dispatch xmlns:ns1=\"http://service.order.com\"><ns1:dispatchId>1</ns1:dispatchId><ns1:order><ns1:totalAmount>1000.0</ns1:totalAmount></ns1:order></ns1:dispatch>";
Dispatch dispatch = (Dispatch) JAXB.unmarshal(
new StringReader(xmlString), Dispatch.class);
System.out.println(dispatch);
}
}
输出是
1
订单是订单类型。 我们没有看到此类的任何代码。 这也可能是其原因。 您可能无法提供有关要构建的订单的体面数据。
若要查看如何使用名称空间: http : //blog.bdoughan.com/2012/11/applying-namespace-during-jaxb-unmarshal.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.