2012-04-04 7 views
0
<BADFM> 
<Order > 
<Ord OrdQty="1" faft="O"> 
<Bag pakka="1" DSE="C"/> 
</Ord> 
</Order> 
</BADFM> 

=================JAXBは:JavaへのXMLからのデータの結合は

@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を返します.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(); 
} 

私Parserクラスである私はこの方法であなたがから 'M' を取得している

Message message = BADFMParser.parse(XMLFile); 

答えて

1

それを呼び出すのですか?アンマーシャリングのコードを投稿してください。

クラスを手作業で作成した場合、間違ったことが起こる可能性があります。サニティチェックを行う最も簡単な方法は、XML用のスキーマを作成することです(それがない場合は、さまざまな理由で)、 'xjc'(JDKに付属)でJavaクラスを生成します。次に、これらのクラスをMarshal/Unmarshalに直接使用するか、またはそれらを検査して、それらがあなたとどのように異なるかを確認することができます。

+0

私はそれを私の質問に追加しました(パーサクラス) – Pawan

0

あなたのコードのこのビット...

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

は...やや不可解です。 UnmarshallerからObjectを取得してBADFMにキャストし、そこからJAXBElementを取得しますか?このBADFMクラスとは何ですか?

私は、あなたのメッセージ、MobBlock、オードとバガークラスを取ったパッケージでそれらを配置し、それにこのメインクラスを作成しました:

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を出力します。

関連する問題