0
<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;
                  }

}

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

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

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);
4

2 回答 2

1

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

附带说明一下,如果您手动创建了类,则很可能您做错了什么。进行完整性检查的最简单方法是为您的 XML 创建模式(如果您没有它,那么出于多种原因,您应该这样做)并使用“xjc”(JDK 附带)生成 Java 类。然后,您可以直接将这些类用于 Marshal/Unmarshal,或者只是检查它们以查看它们与您的有何不同。

于 2012-04-04T13:45:46.763 回答
0

你的这段代码...

 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\"?>\r\n"
            + "<BADFM>\r\n"
            + "<Order >\r\n"
            + "<Ord OrdQty=\"1\" faft=\"O\">\r\n"
            + "<Bag pakka=\"1\"  DSE=\"C\"/>\r\n"
            + "</Ord>\r\n"
            + "</Order>\r\n"
            + "</BADFM>");

        final Object o = unmarshaller.unmarshal(reader);

        final Message m = (Message)o;

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

    }

}

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

于 2012-04-04T13:58:02.607 回答