TL;DR
@XmlRootElement
注釈で指定された名前空間の末尾に余分な / があります。
長い答え
パッケージ情報
@XmlSchema
名前空間は、パッケージ レベルの注釈で正しく指定されています。
@XmlSchema(namespace="http://www.docsite.com/ClientConfig.xsd",elementFormDefault=XmlNsForm.QUALIFIED)
package com.convertXml.docSite.XmlConverter;
import javax.xml.bind.annotation.XmlSchema;
import javax.xml.bind.annotation.XmlNsForm;
ClientConfig
ClientConfig
しかし、クラスの不適切な名前空間でオーバーライドしました。注釈/
で指定された名前空間の最後にエクストラがあります。@XmlRooElement
package com.convertXml.docSite.XmlConverter;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="ClientConfig",namespace="http://www.docsite.com/ClientConfig.xsd/")
public class ClientConfig {}
@XmlSchema
クラスで名前空間を宣言したので、package-info
で繰り返す必要はありません@XmlRootElement
。
package com.convertXml.docSite.XmlConverter;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name="ClientConfig")
public class ClientConfig {}
デモ
これでunmarshal
正しく動作します:
package com.convertXml.docSite.XmlConverter;
import java.io.StringReader;
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(ClientConfig.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
StringReader xml = new StringReader("<ClientConfig xmlns='http://www.docsite.com/ClientConfig.xsd'/>");
ClientConfig clientConfig = (ClientConfig) unmarshaller.unmarshal(xml);
}
}
詳細については