使用JAXBContext,我有一个包来创建XML头但是命名空间没有正确生成。我需要将XML从第一个更改为第二个。
JAXBContext jaxbContext = JAXBContext
.newInstance("com.oracle.xmlns.eos.v2");
Marshaller marshaller = jaxbContext.createMarshaller();
来自:
<?xml version="1.0" encoding="UTF-8"?>
<ns1:DPC
xmlns:ns2="http://xmlns.oracle.com/EnterpriseObjects/V2"
xmlns:ns1="http://url/xsd/DPC"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2003/03/addressing"
xmlns:ns0="http://xmlns.oracle.com/EnterpriseObjects/IC/V1"/>
要:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns1:DPC
xmlns:ns1="http://url/xsd/DPC"
xmlns:wsa="http://schemas.xmlsoap.org/ws/2003/03/addressing"
xmlns:ns0="http://xmlns.oracle.com/EnterpriseObjects/IC/V1"
xmlns:coreEB="http://xmlns.oracle.com/EnterpriseObjects/EB/V1"
xmlns:cc="http://xmlns.oracle.com/EnterpriseObjects/V2"/>
请建议是否可以将第一个更改为第二个。这需要添加xmlns:coreEB="http://xmlns.oracle.com/EnterpriseObjects/EB/V1"
并将命名空间从xmlns:ns2="http://xmlns.oracle.com/EnterpriseObjects/V2"
重命名为xmlns:cc="http://xmlns.oracle.com/EnterpriseObjects/V2"
。
答案 0 :(得分:0)
除了第二个名称空间http://xmlns.oracle.com/EnterpriseObjects/EB/V1
JAXB marshaller对所有已知的上下文类或包中的命名空间进行编组。
您的示例意味着从包com.oracle.xmlns.eos.v2
开始,没有对包含具有http://xmlns.oracle.com/EnterpriseObjects/EB/V1
命名空间的JAXB注释的类的包的引用
所以,
首先 - 仔细检查你的JAXB类/包结构,问题就在那里。
第二 - 如果你没有发现差异或不确定...尝试将http://xmlns.oracle.com/EnterpriseObjects
/EB/V1
命名空间所需的包显式添加到由:
分隔的JAXBContext
JAXBContext jaxbContext = JAXBContext
.newInstance("com.oracle.xmlns.eos.v2:com.oracle.xmlns.enterpriseobjects.eb.v1");
生成的XML中需要名称空间。 也许你没有该命名空间的任何元素或属性,因为JAXB没有发现它是必需的,但命名空间就在那里。
请记住,包必须是JAXB,使用jaxb ObjectFactory
类或jaxb.index
文件。