javax.xml.bind.UnmarshalException

dre*_*der 6 xml namespaces jaxb unmarshalling

我收到以下错误:

javax.xml.bind.UnmarshalException: unexpected element(uri:"http://www.docsite.com/ClientConfig.xsd", local:"ClientConfig").
Expected elements are <{http://www.docsite.com/ClientConfig.xsd/}ClientConfig>
Run Code Online (Sandbox Code Playgroud)

我的根元素类文件是:

@XmlRootElement(name="ClientConfig",namespace="http://www.docsite.com/ClientConfig.xsd/")
public class ClientConfig {}
Run Code Online (Sandbox Code Playgroud)

我的package.info文件是:

@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;
Run Code Online (Sandbox Code Playgroud)

让我知道我该怎么做才能解决这个问题

bdo*_*han 5

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;
Run Code Online (Sandbox Code Playgroud)

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 {}
Run Code Online (Sandbox Code Playgroud)

由于您@XmlSchemapackage-info类上声明了命名空间,因此您无需在该类上重复它@XmlRootElement.

package com.convertXml.docSite.XmlConverter;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="ClientConfig")
public class ClientConfig {}
Run Code Online (Sandbox Code Playgroud)

演示

现在,这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);
    }

}
Run Code Online (Sandbox Code Playgroud)

欲获得更多信息