我目前在编组XML时遇到了一些问题,我自己编组了。我花了一些时间才弄明白,因为我觉得编组很顺利(没有例外等)。生成我的XML的方法返回:
<?xml version="1.0" encoding="UTF-8"?> version="1.0" encoding="UTF-8" standalone="yes"
<TestClass>
<testValue>banaan</testValue>
</TestClass>
但突然间,我有了非常明显的实现(太晚了),所产生的XML根本就不正确。显然应该是:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<TestClass>
<testValue>banaan</testValue>
</TestClass>
这个非常简单的代码怎么可能:
@Path("test")
@GET
@Produces(MediaType.APPLICATION_XML)
public TestClass getTestClass() {
TestClass test = new TestClass();
test.setTestValue("banaan");
return test;
}
和TestClass:
@XmlRootElement(name = "TestClass")
public class TestClass {
private String testValue;
@XmlElement(name = "testValue")
public String getTestValue() {
return testValue;
}
public void setTestValue(String testValue) {
this.testValue = testValue;
}
public TestClass() {
}
}
生成无效的XML?更重要的是,我该如何解决?
答案 0 :(得分:1)
您正在使用默认尝试来创建一个应该正常运行的JAXBContext,但它似乎在某种程度上搞乱了。尝试将自定义上下文解析程序添加到您的应用程序中。
@Provider
public class XmlContextProvider implements ContextResolver<JAXBContext> {
private JAXBContext context = null;
public JAXBContext getContext(Class<?> type) {
if (type != TestClass.class) {
return null; // we don't support nothing else than TestClass
}
if (context == null) {
try {
context = JAXBContext.newInstance(TestClass.class);
} catch (JAXBException e) {
e.printStackTrace();
}
}
return context;
}
}
您还必须将XmlContextProvider添加到Application类。
答案 1 :(得分:0)
你是如何编组代码的?您似乎正在正确设置类及其值,但这可能是您如何创建马歇尔对象以及您正在使用的上下文/格式化输出的问题
这是一个例子
JAXBContext context = JAXBContext.newInstance(TestClass.class);
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
StringWriter stringWriter = new StringWriter();
m.marshal(test, stringWriter);
return stringWriter.toString();
你是否按照这些方针做了什么?