TL;博士
@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
。在注释/
中指定的命名空间末尾有一个额外的。@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);
}
}
了解更多信息