如何使用 JAXB 映射 XML 忽略名称空间?

How to map a XML ignoring namespace using JAXB?

我从 Web 服务收到 XML 格式如下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<string xmlns="http://someurl.com">somethingheresomethinghere</string>

我正在尝试将其解组为如下所示的 POJO:

@XmlRootElement(name="string")
public class StringValue {

    @XmlValue
    private String value;

    public StringValue () {
    }
}

我的解组代码是这样的:

public T xmlToObject(Class<T> contextPath, Reader reader) throws Exception {
    JAXBContext context = JAXBContext.newInstance(contextPath);
    Unmarshaller unmarshaller = context.createUnmarshaller();
    unmarshaller.setEventHandler(new XMLValidationEventHandler());
    T objectToConvert = (T) unmarshaller.unmarshal(reader);
    return objectToConvert;
}

但我收到以下错误:

unexpected element (uri:"http://someurl.com", local:"string"). Expected elements are <{}string>

如果要从中省略 XML 中的命名空间,那么它会起作用,但我想知道如何才能使它成为命名空间部分,而不是改变 XML使用 JAXB 编组或解组时不会给我带来任何麻烦。

我怎样才能实现这种行为?

您可以使用包级别 @XmlSchema 注释映射命名空间。

@XmlSchema( 
    namespace = "http://someurl.com", 
    elementFormDefault = XmlNsForm.QUALIFIED) 
package example;

import javax.xml.bind.annotation.*;

了解更多信息

我在我的博客上写了更多关于 JAXB 和名称空间限定的文章: