繁体   English   中英

解组总是显示0和null

[英]unmarshaling always shows 0 and null

我认为最好的方法是复制我的代码,以便您理解它。

这是我的POJO类:

import javax.xml.bind.annotation.XmlAttribute;

public class Product {

    private String name;

    public Product() {
    }

    public Product(String name) {
        this.name = name;
    }

    @XmlAttribute(name = "productName")
    public String getProduct() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}


import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="ShoppingCart")

public class Cart {

    private List<Product> productList = new ArrayList<>();
    private long CartIdentifier;

    public Cart() {

    }
    public Cart(long id) {
        this.CartIdentifier=id;
    }

    @XmlAttribute(name="CartIdentifier")
    public long getId() {
        return  CartIdentifier;
    }

    public void setType(long id) {
        this.CartIdentifier=id;
    }

    public Cart(List<Product> list) {
        this.productList = list;
    }

    public void addElement(Product element) {
        this.productList.add(element);
    }
    @XmlElement(name = "CurrentProducts")
    public List<Product> getCart() {
        return this.productList;
    }

    public void setCart(List<Product> cart) {
        this.productList = cart;
    }

}

import java.util.ArrayList;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "CashRegister")
public class Register {
    @XmlElement(name = "ShoppingCart")
    private ArrayList<Cart> listCart;

    long CartIdentifier;

    public Register() {

    }

    public Register(long id) {
        this.CartIdentifier=id;
    }
    public long getId() {
        return  CartIdentifier;
    }

    public void addElementforBonus(Cart element) {
        listCart.add(element);
    }

    public void setType(long id) {
        this. CartIdentifier=id;
    }

    public void setList(ArrayList<Cart> list) {
        this.listCart = list;
    }

    public ArrayList<Cart> getCartList() {
        return listCart;
    }

}

因此,这些是我的POJO类,主要是它们创建了完美的XML,但是,从XML转换为普通输出时,出现了问题。 有人可以告诉我我在哪里出错,为什么我的输出总是0和null?

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

public class Main {

    public static void main(String[] args) throws JAXBException, IOException {

        ArrayList<Cart> list = new ArrayList<Cart>();

        Register store = new Register(1);
        store.setType(1);
        store.setList(list);

        Product first = new Product("Burger");
        Product second = new Product("Banana");

        Cart cart1 = new Cart(1);
        cart1.setType(1);
        cart1.addElement(first);
        cart1.addElement(second);
        store.getCartList().add(cart1);


        // create JAXB context and instantiate marshaller
        JAXBContext context = JAXBContext.newInstance(Register.class);
        Marshaller m = context.createMarshaller();
        m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

        // Write to System.out
        m.marshal(store, System.out);


            m.marshal(store, new File("mrs.xml"));

            System.out.println("Output from our XML File: ");
            Unmarshaller um = context.createUnmarshaller();
            Register reg = (Register) um.unmarshal(new FileReader("mrs.xml"));
            ArrayList<Cart> list1 = reg.getCartList();
            for(Cart x:reg.getCartList()) {
                System.out.println(x.getId());
            }
            for (Cart cart : list1) {
                System.out.println("Cart: " + cart.getId());
                for(Product product : cart.getCart()) {
                     System.out.println("Product: " + product.getProduct());
                }
            }


        }



}

所以这是我的输出:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<CashRegister>
    <ShoppingCart CartIdentifier="1">
        <CurrentProducts productName="Burger"/>
        <CurrentProducts productName="Banana"/>
    </ShoppingCart>
</CashRegister>
Output from our XML File: 
0
Cart: 0
Product: null
Product: null

有一个带有两种产品的购物车,但没有0和null。

不,我的问题不是重复的。 我不想将其作为Element或在我的xml中显示该元素的名称。 我的xml看起来很完美,但是我无法解组

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<CashRegister>
    <ShoppingCart CartIdentifier="1">
        <CurrentProducts productName="Burger"/>
        <CurrentProducts productName="Banana"/>
    </ShoppingCart>
</CashRegister>
Output from our XML File: 
Exception in thread "main" java.lang.ClassCastException: bonusxml.Register cannot be cast to bonusxml.Register1
    at bonusxml.Main.main(Main.java:45)

如果您不愿保留XML结构,则必须为此付出代价。 下面是可以使您反序列化所创建XML的类。 但是,最终您将使用两组不同的类进行序列化和反序列化。

购物车

@XmlRootElement(name="ShoppingCart")
public class Cart1 {

    @XmlElement(name = "CurrentProducts")
    private List<Product1> productList = new ArrayList<>();
    @XmlAttribute(name="CartIdentifier")
    private long CartIdentifier;

    public Cart1() {}

    public Cart1(long id) {
        this.CartIdentifier=id;
    }
    // setters & getters
}

产品.java

public class Product1 {

    @XmlAttribute(name = "productName")
    private String name;

    public Product1() {
    }

    public Product1(String name) {
    this.name = name;
    }
    // setters & getters
}

注册.java

@XmlRootElement(name = "CashRegister")
public class Register1 {

    @XmlElement(name = "ShoppingCart")
    private ArrayList<Cart1> listCart;

    long CartIdentifier;

    public Register1() {

    }

    public Register1(long id) {
        this.CartIdentifier=id;
    }
    //setters & getters
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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