生成XML时奇怪的响应JAX-RS

时间:2013-12-09 21:56:33

标签: java xml jax-rs

我目前在编组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?更重要的是,我该如何解决?

2 个答案:

答案 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();

你是否按照这些方针做了什么?