使用cached的wrapper类读取请求响应内容

使用cached的wrapper类读取请求响应内容,第1张

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服务响应回来的值、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9651424.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存