具有MOXy的多个XML的相同前缀的不同命名空间

时间:2015-05-01 14:57:55

标签: xml namespaces jaxb moxy

在解组时,我在为多个不同的XML文件中的相同前缀设置不同的名称空间URI时遇到了一些麻烦,XML的结构如下:

<?xml version="1.0" encoding="UTF-8"?>
<pdi:company xmlns:rdp="rdp_namespace_uri" xmlns:pdi="pdi_namespace_uri" name="test">
  <division rdp:id="id_1" rdp:type="org" name="Financial">data</division>
  <division rdp:id="id_2" rdp:type="org"  name="Personal">data</division>  
</pdi:company>

每个文件结构都相同,只有RDP名称空间和PDI名称空间对于每个XML文件都不同。由于命名空间被定义为静态最终变量,因此一旦设置它就无法更改它。我的Java类看起来像这样:

@XmlRootElement(name = "company", namespace = JAXBProperties.pdiNamespace)
@XmlAccessorType(XmlAccessType.FIELD)
public class Company {

    private ArrayList<Division> divisions;
}

和JAXBProperties类:

public class JAXBProperties {

    public static final String rdpNamespace = "rdp_namespace_uri";
    public static final String pdiNamespace = "pdi_namespace_uri";
}

我需要为每个文件动态更改rdpNamespace和pdiNamespace变量。我怎么能做到这一点?

我无法改变XML本身的结构,例如简单地重写名称空间URI,因为这些XML文件来自不同的源,我应该做的只是将它们解组为对象表示。

我们有一个例子,这个将为严格给出PDI命名空间的company_1.xml定义,如下所示:

@XmlRootElement(name = "company", namespace = "http://www.example.com/PDI_1")
public class Company {

对于另一个文件company_2.xml,名称空间不同(我必须手动重写它):

@XmlRootElement(name = "company", namespace = "http://www.example.com/PDI_2")
public class Company {

每当我尝试解组文件而不将@XmlRootElement中的命名空间更改为其文件的xmlns:pdi标记中的相应命名空间时,我会收到错误,假设我尝试使用PD_1命名空间解组文件company_2.xml:

Exception Description: A descriptor with default root element {http://www.example.com/PDI_2}company was not found in the project]

当我手动将@XmlRootElement中的命名空间更改为PD_2时,一切正常。我想动态更新@XmlRootElement中的命名空间,但是当我尝试动态设置它(通过动态创建的变量)时,我收到一个错误:

The value for annotation attribute XmlRootElement.namespace must be a constant expression

我希望我的问题很清楚,我正在努力完成这项工作。 或者是否有任何其他解决方案可以绕过命名空间检查?(我不想关闭命名空间感知)

0 个答案:

没有答案