
servlet的requestbody以及response的body一旦流被读取了,就无法再次消费了,因此这对于有要拦截请求,记录相关信息的时候,带来一个潜在的坑。那么如何处理这个呢,利用filter,wrapper一层,然后proceed,最后response完之后在把cached的body设置回原始响应。
spring提供了ContentCachingRequestWrapper以及ContentCachingResponseWrapper两个类,来解决这类问题。
读取完body之后
通过这个设置回去,就可以使得终端消费者可以正常接收响应了。
客户端使用onMessage方法检索消息内容。客户端通过消息得到envelope,再通过envelope得到body,从而访问SOAPBody对象。访问SOAPBody对象是因为内容存放在该元素中。为了检索由NodeaddTextNode方法添加的内容,请调用NodegetValue方法。GetValue返回调用元素的直接子元素的值。为了访问bodyElement,需要在body上调用getChildElement方法。以下代码演示了如何从响应消息中检索内容。
public SOAPMessage onMessage(SOAPMessage message)
{
SOAPEnvelop env = msggetSOAPPart()getEnvelope();
env getBody()
addChildElement(envcreateName("Response"))
addTextNode("This is a Response");
return msg;
}
想要从含有附件的消息中检索内容,你需要访问附件。没有参数的情况下,SOAPMessagegetAttachments方法返回指向所有AttachmentPart对象的javautilIterator对象。以下代码打印出了SOAPMessage对象消息中每一个AttachmentPart对象的内容。
javautilIterator it = messagegetAttachments();
while (ithasNext()) {
AttachmentPart attachment = (AttachmentPart)itnext();
Object content = attachmentgetContent();
String id = attachmentgetContentId();
Systemoutprint("Attachment " + id + " contains: " + content);
Systemoutprintln("");
}
访问消息的附件部分
当收到带有附件的消息或是希望改变消息附件的时候,都需要访问消息的附件。没有附加信息的SOAPMesssagegetAttachments方法返回指向消息中所有AttachmentPart对象的javautilIterator对象。以下代码演示了如何访问附件从而获得SOAPMessage对象消息中每个AttachmentPart对象的内容。
javautilIterator it = msggetAttachments();
while (ithasNext()) {
AttachmentPart ap = itnext();
Object content = apgetContent();
String id = apgetContentId();
Systemoutprint("Attachment " + id + " contains: " + content);
Systemoutprintln("");
}
组装并部署SOAP客户端
以上就是关于使用cached的wrapper类读取请求响应内容全部的内容,包括:使用cached的wrapper类读取请求响应内容、求助,如何获取WEB服务响应回来的值、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)