问题描述
我一直在 CXF 上摆弄服务器端拦截器.但是似乎实现简单的传入和传出拦截器并不是一项微不足道的任务,这些拦截器为我提供了一个包含 SOAP XML 的纯字符串.
I have been fiddling around with server side interceptors on CXF. But is seems that it is not a trivial task to implement simple incoming and outgoing interceptors that give me a plain string containing the SOAP XML.
我需要在拦截器中使用纯 XML,以便我可以将它们用于特定的日志记录任务.标准登录 &LogOut 拦截器不能胜任这项任务.有没有人愿意分享一些关于如何实现一个简单的传入拦截器的示例,该拦截器能够获取传入的 SOAP XML 和传出的拦截器以再次获取 SOAP XML?
I need to have the plain XML in the interceptor so that I can use them for specific logging tasks. The standard LogIn & LogOut interceptors are not up to the task. Is anyone willing to share some example on how I could implement a simple incoming interceptor that is able to get the incoming SOAP XML and a outgoing interceptor to again get the SOAP XML?
推荐答案
在这里找到传入拦截器的代码:使用 Apache CXF 作为 XML 记录请求/响应
Found the code for an incoming interceptor here:Logging request/response with Apache CXF as XML
我的传出拦截器:
import java.io.OutputStream;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.io.CacheAndWriteOutputStream;
import org.apache.cxf.io.CachedOutputStream;
import org.apache.cxf.io.CachedOutputStreamCallback;
import org.apache.cxf.message.Message;
import org.apache.cxf.phase.Phase;
public class MyLogInterceptor extends LoggingOutInterceptor {
public MyLogInterceptor() {
super(Phase.PRE_STREAM);
}
@Override
public void handleMessage(Message message) throws Fault {
OutputStream out = message.getContent(OutputStream.class);
final CacheAndWriteOutputStream newOut = new CacheAndWriteOutputStream(out);
message.setContent(OutputStream.class, newOut);
newOut.registerCallback(new LoggingCallback());
}
public class LoggingCallback implements CachedOutputStreamCallback {
public void onFlush(CachedOutputStream cos) {
}
public void onClose(CachedOutputStream cos) {
try {
StringBuilder builder = new StringBuilder();
cos.writeCacheTo(builder, limit);
// here comes my xml:
String soapXml = builder.toString();
} catch (Exception e) {
}
}
}
}
这篇关于如何获得传入 &使用Apache CXF以简单的方式传出soap xml?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!