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

时间:2015-03-11 00:54:17

标签: java xml jaxb xml-namespaces unmarshalling

我正在从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;
}

但我收到以下错误:

  

意外元素(uri:“http://someurl.com”,local:“string”)。预期   元素是&lt; {} string&gt;

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

我该如何实现这种行为?

1 个答案:

答案 0 :(得分:2)

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

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

import javax.xml.bind.annotation.*;

了解更多信息

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