XML 使用 JAXB 进行对象解组
XML to Object Unmarshalling using JAXB
我需要将 XML 解组为 Java 对象,我已尝试使用以下代码。它创建一个对象但将所有值设置为空。相同的代码:
@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 和其他子 class,我需要将 XML 转换为 Java 对象。相同的代码:
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);
}
}
作为输出,它将return null。
任何人都可以告诉我我的代码有什么问题吗?
这很奇怪,我粘贴了你的代码 运行 并且它生成了 dispatchId 1:
调度class:
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;
}
}
测试class
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
订单类型为订单。我们没有看到此 class 的任何代码。
这可能也是它的原因。您可能没有为要构建的订单提供像样的数据。
查看名称空间的使用方式:http://blog.bdoughan.com/2012/11/applying-namespace-during-jaxb-unmarshal.html
我需要将 XML 解组为 Java 对象,我已尝试使用以下代码。它创建一个对象但将所有值设置为空。相同的代码:
@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 和其他子 class,我需要将 XML 转换为 Java 对象。相同的代码:
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);
}
}
作为输出,它将return null。
任何人都可以告诉我我的代码有什么问题吗?
这很奇怪,我粘贴了你的代码 运行 并且它生成了 dispatchId 1:
调度class:
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;
}
}
测试class
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
订单类型为订单。我们没有看到此 class 的任何代码。 这可能也是它的原因。您可能没有为要构建的订单提供像样的数据。
查看名称空间的使用方式:http://blog.bdoughan.com/2012/11/applying-namespace-during-jaxb-unmarshal.html