如果沒有package-info.java文件,JAXB unmarshaller會拋出異常。此代碼是從另一種語言調用的,自定義類加載器無法正確加載package-info。JAXB unmarshall xml without package-info.java
我已經手動添加名稱空間參數給所有的@XmlElement註解。
Xml根元素具有多個xmlns屬性。其中兩個(xmlns和xmlns:c)具有相同的值(我無法更改xml,它來自外部服務)
但是:如果從文檔中刪除xmlns =「urn:foo:bar」即使沒有包信息
問題:如何在沒有包信息的情況下取消組裝(我無法修改無法加載的自定義類加載程序),也無需從xml中刪除xmlns? 我應該在我的代碼中更改什麼?
爪哇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);
package-info.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
任何想法將不勝感激,我花了這麼多時間嘗試,但仍然沒有。