繁体   English   中英

使用JAXB进行XML到对象的解组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM