2017-03-03 152 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

这是工作! 我在这里张贴之前做了这个测试....使用错误的命名空间。 谢谢 –