此xml文件的jaxb注释应该是什么?

时间:2018-10-20 12:53:03

标签: java jaxb unmarshalling spring-camel xml-binding

我有一个要使用jaxb解组的xml文件有效载荷,我创建了一个用于解组的pojo类,并且为该pojo定义了xml属性和元素,但是我对命名空间有些困惑,如何注释它们?

我的xml文件:

channels

我用Jaxb注释的Pojo是:

<ns1:ContractLinkEvent xmlns:ns0="http://Enterprise.BizTalk.Canonical.Schemas/v2.0/ESB" xmlns:ns1="http://Enterprise.BizTalk.MCF.Core.Schemas/v2.0/ESB">

<Header xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

</Header>

<ContractLink xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<ContractLinkId>1509148</ContractLinkId>

<BillingProfile>

<BillingProfileId>173886</BillingProfileId>

<BillingProfileCode xsi:nil="true"/>

</BillingProfile>

</ContractLink>

</ns1:ContractLinkEvent>

。 。 。 继续

解组时遇到以下异常:

@XmlRootElement(name = "ContractLinkEvent", namespace="http://Enterprise.BizTalk.Canonical.Schemas/v2.0/ESB")
@XmlAccessorType(XmlAccessType.FIELD)
public class ContractLinkPojo { 

    @XmlElement(name="Header")
    private String Header;

    @XmlElement(name="ContractLink")
    private String ContractLink;

我认为我没有正确定义名称空间,因为我还没有定义名称空间,因为我仍然很困惑,有什么想法吗?

编辑: 这是我的解组路线

java.io.IOException: javax.xml.bind.UnmarshalException
 - with linked exception:
[com.sun.istack.SAXParseException2; lineNumber: 1; columnNumber: 1; unexpected element (uri:"http://Enterprise.BizTalk.MCF.Core.Schemas/v2.0/ESB", local:"ContractLinkEvent"). Expected elements are (none)]

1 个答案:

答案 0 :(得分:0)

命名空间类似于Java中的程序包名称。您可以使用该名称为您创建的XML元素使用唯一的名称,这样它们就不会与其他XML元素冲突。 您可以将默认的XML名称空间定义为:

xmlns="http://Enterprise.BizTalk.Canonical.Schemas/v2.0/ESB"

您可以使用以下前缀定义多个XML名称空间:

   xmlns:ns0="..." 
   xmlns:ns1="..."

上面的ns0和ns1是您创建的前缀。

在xml中,您尚未定义任何默认名称空间。因此,我想您正在尝试使用名称空间前缀ns0和ns1来标识元素。在这种情况下,您已将ns1用于ContractLinkElement,但未使用

或其他任何方法。但是,ns0不会在任何地方使用,如果不需要,可以将其删除。请检查这是否是您想要的。

此外,没有结束标记:

<ns1:ContractLinkEvent 
xmlns:ns0="http://Enterprise.BizTalk.Canonical.Schemas/v2.0/ESB" 
xmlns:ns1="http://Enterprise.BizTalk.MCF.Core.Schemas/v2.0/ESB">