簡體   English   中英

沒有package-info.java的JAXB解組xml

[英]JAXB unmarshall xml without package-info.java

如果沒有package-info.java文件,則JAXB解組器將引發異常。 從另一種語言調用此代碼,並且自定義類加載器無法正確加載package-info。

我已經手動將namespace參數添加到所有@XmlElement批注中。

Xml根元素具有多個xmlns屬性。 其中兩個(xmlns和xmlns:c)具有相同的值(我無法更改來自外部服務的xml)

但是:如果我從文檔中刪除xmlns =“ urn:foo:bar”,即使沒有package-info也可以使用

問題:如果沒有package-info(我無法修改無法加載的自定義類加載器)並且不從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);

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

任何想法都將不勝感激,我花了很多時間嘗試,但仍然一無所有。

BUT: It works if I remove xmlns="urn:foo:bar" from document even without package-info

這意味着您並沒有在需要的任何地方添加namespace參數。

在下面的XML文檔中,沒有@XmlSchema批注來映射名稱空間資格,您將需要Foo類的@XmlRootElement批注上的namespace參數和bar屬性的@XmlElement批注。

<foo xmlns="http://www.example.com">
    <bar>Hello World</bar>
</foo>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM