如何使用 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 和名称空间限定的文章:
我从 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 和名称空间限定的文章: