2017-03-03 150 views
0

所有,我有一個包裝從xsd生成的豆與Jaxb。 我想用其中的一些到另一個Bean的元帥/解組像這樣的XML:Jaxb:命名空間解組問題

<WrongDocument> 
    <test>test label</test> 
    <CBISDDReqLogMsg xmlns="urn:CBI:xsd:CBISDDReqLogMsg.00.01.00"> 
     <GrpHdr> 
      .... 
     </GrpHdr> 
     <PmtInf> 
     </PmtInf> 
    </CBISDDReqLogMsg> 
</WrongDocument> 

根Bean是

@XmlRootElement(name="WrongDocument") 
@XmlType(name = "", propOrder = { 
    "test", 
    "CBISDDReqLogMsg" 
}) 
@XmlAccessorType(XmlAccessType.FIELD) 
public class WrongDocumentDTO implements Serializable { 

private static final long serialVersionUID = 8545918230166653233L; 

@XmlElement(required = true, type = String.class, nillable = true) 
    protected String test; 

@XmlElement(required = true) 
protected CBISDDReqLogMsg000100 CBISDDReqLogMsg; 

.... 

} 

CBISDDReqLogMsg000100

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "CBISDDReqLogMsg.00.01.00", propOrder = { 
    "grpHdr", 
    "pmtInf" 
}) 
public class CBISDDReqLogMsg000100 
    implements Serializable 
{ 

    private final static long serialVersionUID = 1L; 
    @XmlElement(name = "GrpHdr", required = true) 
    protected CBIGroupHeader2 grpHdr; 
    @XmlElement(name = "PmtInf", required = true) 
    protected List<PaymentInstructionInformation2> pmtInf; 

    .... 

} 

對於使用package-info文件定義CBISDDReqLogMsg000100命名空間。

這是解組代碼:

jc = JAXBContext.newInstance(WrongDocumentDTO.class); 
Unmarshaller unmarshaller = jc.createUnmarshaller(); 
WrongDocumentDTO wrongDocumentDTO = unmarshaller.unmarshal(source, WrongDocumentDTO.class).getValue(); 

不幸的是,在我的wrongDocumentDTO我有測試場填入正確的價值,但是CBISDDReqLogMsg爲空。

我該如何解決此問題?

預先感謝您

回答

1

您需要專門指定的elementnamespace如果不是默認爲整個package

@XmlElement(required = true, namespace = "urn:CBI:xsd:CBISDDReqLogMsg.00.01.00") 
protected CBISDDReqLogMsg000100 CBISDDReqLogMsg; 
+0

這是工作! 我在這裏張貼之前做了這個測試....使用錯誤的命名空間。 謝謝 –