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

}

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

Its returning me null , when i tried to access

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

Could anybody please tell me what is the problem ?

This is my Parser class

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();
}

i am calling it this way

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 に答える