<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
。