如果没有 package-info.java 文件,JAXB unmarshaller 会抛出异常。此代码是从另一种语言调用的,自定义类加载器无法正确加载包信息。
我已经手动将命名空间参数添加到所有 @XmlElement 注释中。
xml 根元素有多个 xmlns 属性。其中两个(xmlns 和 xmlns:c)具有相同的值(我无法更改来自外部服务的 xml)
但是:如果我从文档中删除 xmlns="urn:foo:bar" 即使没有包信息,它也可以工作
问题:如何在没有包信息的情况下解组(我无法修改无法加载它的自定义类加载器)并且不从 xml 中删除 xmlns ?我应该在我的代码中更改什么?
Java 1.6_45 vJAXB 2.1.10
XML 根元素示例:
<?xml-stylesheet type="text/xsl" href="file1.xslt">
<?xml-stylesheet type="text/xsl" href="file1.xslt"?>
<c:ClinicalDocument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="urn:foo:ba" xmlns:c="urn:foo:bar" xmlns:std="urn:foo:std"
xsi:schemaLocation="urn:foo:bar file2.xsd">
代码:
String path = "D:\\data\\document.xml";
try {
JAXBContext jc = JAXBContext.newInstance(ObjectFactory.class);
Unmarshaller u = jc.createUnmarshaller();
Object root = u.unmarshal(new File(path)); //exception w/o package-info.java
CDocument doc= (CDocument) JAXBIntrospector.getValue(root);
System.out.println(doc);
包信息.java
@javax.xml.bind.annotation.XmlSchema(namespace = "urn:foo:bar", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED,
xmlns={@XmlNs(namespaceURI = "urn:foo:bar", prefix = "")})
package test.model;
import javax.xml.bind.annotation.XmlNs;
例外:
javax.xml.bind.UnmarshalException: Unable to create an instance of my.package.here.model.ANY
任何想法将不胜感激,我花了很多时间尝试,但仍然一无所获。