Jaxb:这种结构不会发生从XML到java的数据绑定

  • 本文关键字:XML java 数据绑定 结构 Jaxb jaxb
  • 更新时间 :
  • 英文 :

<BADFM>
<Order >
<Ord OrdQty="1" faft="O">
<Bag pakka="1"  DSE="C"/>
</Ord>
</Order>
</BADFM>

====

=============
@XmlRootElement(name="BADFM")
public class Message
{
@XmlElement(name="Order")   
private MobBlock mob;
 public MobBlock getMob() {
return mob;
}
public void setmob(MobBlock mob) {
this.mob = mob;
}
}

====

==============
public class MobBlock {
    private Ord ord;
    @XmlElement(name="Ord")
                  public Ord getOrd() {
    return ord;
    }
    public void setOrd(Ord ord) {
        this.ord = ord;
    }
}

====

===============
public class Ord {
 private Bagger Bagger;
 @XmlElement(name="Bag")
    public Bagger getBagger() {
    return Bagger;
    }
    public void setBagger(Bagger Bagger) {
               this.Bagger = Bagger;
    }
    }

====

===================
public class Bagger {
    private String dsc;
    @XmlAttribute(name = "DSE")
    public String getDSE() {
        return dsc;
    }
                public void setDSE(String dsc) {
    this.dsc = dsc;
                  }
}

====

======================

当我尝试访问时,它返回我空

System.out.println(m.getMob((.getOrd((.getBagger((.getDSE(((;

谁能告诉我问题出在哪里?

这是我的解析器类

public class BadFmParser
{   
public static AbstractMessageT parse(String Str) throws Exception {
    private static JAXBContext jc = null;
            jc = JAXBContext.newInstance("mypackage");
        Unmarshaller um = jc.createUnmarshaller();
        BADFM badfmMessage = (BADFM) um.unmarshal(new StringReader(Str));
        JAXBElement<? extends Message> element = badfmMessage.getMessage();
        return element.getValue();
}

我这样称呼它

Message message = BADFMParser.parse(XMLFile);

你从哪里得到"m"?发布代码以进行解组。

作为旁注,如果您手动创建类,则可能是您做错了什么。进行健全性检查的最简单方法是为您的XML创建模式(如果您没有它,那么出于多种原因,您应该这样做(并使用"xjc"(随JDK一起提供(生成Java类。然后,您可以直接将这些类用于元帅/解编组,或者只是检查它们以查看它们与您的类有何不同。

你的这段代码...

 BADFM badfmMessage = (BADFM) um.unmarshal(new StringReader(Str));
 JAXBElement<? extends Message> element = badfmMessage.getMessage();

。有些令人费解。你从Unmarshaller那里得到一个对象,把它投射到BADFM,然后从中得到一个JAXBElement?这个 BADFM 类是什么?

我已经采用了您的 Message、MobBlock、Ord 和 Bagger 类,将它们放在一个包中,然后在其中创建了这个 Main 类:

package jaxb1;
import java.io.Reader;
import java.io.StringReader;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
public class Main {
    public static void main(String[] args) throws Exception {
        final JAXBContext context = 
            JAXBContext.newInstance(
            Bagger.class, 
            Ord.class, 
            MobBlock.class, 
            Message.class
            );
        final Unmarshaller unmarshaller = context.createUnmarshaller();
        final Reader reader = 
            new StringReader("<?xml version="1.0"?>rn"
            + "<BADFM>rn"
            + "<Order >rn"
            + "<Ord OrdQty="1" faft="O">rn"
            + "<Bag pakka="1"  DSE="C"/>rn"
            + "</Ord>rn"
            + "</Order>rn"
            + "</BADFM>");
        final Object o = unmarshaller.unmarshal(reader);
        final Message m = (Message)o;
        System.out.println(m.getMob().getOrd().getBagger().getDSE());
    }
}

结果工作正常。运行时输出C

最新更新