小编典典
首先,获取XML格式化输出的方法是在编组器上设置正确的属性(通常在使用CXF时使用JAXB,因为JAXB做得很可靠,所以可以使用)。也就是说,在某个地方您将需要执行以下操作:
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
问题是您不一定要格式化 所有 输出;它增加了很多开销。幸运的是,您已经在生成一个explicit Response,因此我们可以使用更多的功能:
Marshaller marshaller = Class()).createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
StringWriter sw = new StringWriter();
marshaller.marshal(entity, sw);
return Response.String(), MediaType.APPLICATION_XML_TYPE).build();
在此JIRA问题中提到了另一种方法(它本身已关闭,但对您而言并不是什么大问题):
解决方法是注册一个自定义输出处理程序,该处理程序可以检查用于请求可选缩进的任何自定义查询:
JAXBElementProvider和JSONProvider由JAXB
Marshaller驱动,因此默认情况下,它们会检查当前消息上的Marshaller.JAXB_FORMATTED_OUTPUT属性。
这导致如下代码:
public class FormattedJAXBInterceptor extends AbstractPhaseInterceptor {
public FormattedJAXBInterceptor() {
super(Phase.PRE_STREAM);
}
public void handleMessage(Message message) {
message.put(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
}
public void handleFault(Message messageParam) {
message.put(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
}
}
2020-11-16
本文发布于:2024-02-01 22:26:37,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170679759639834.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |