有效地获得SOAPBody长度

时间:2015-04-30 22:08:52

标签: java performance soap axiom

我想获得SOAPBody对象的长度。我目前的实施是

String mBody = body.toString();
int len= mBody.length();

使用org.apache.axiom.soap.SOAPBody;

由于我的SOAP主体非常庞大,因此整个操作时间都需要很长时间。这种方式效率很低。我怎样才能有效地利用这个长度?

2 个答案:

答案 0 :(得分:1)

你的问题基本上毫无意义。没有像"长度"这样的概念。对于SOAP主体,或更一般地,对于XML元素。这是一个原因(在许多其他原因中):

SOAP消息中的Body元素位于名称空间http://schemas.xmlsoap.org/soap/envelope/(对于SOAP 1.1)或http://www.w3.org/2003/05/soap-envelope(对于SOAP 1.2)中。如果使用toString方法将SOAPBody实例序列化为字符串,则Axiom将在Body元素上生成名称空间声明,以便结果在名称空间方面形成良好。但是,当通过线路发送消息时,SOAP主体将是Envelope元素的子元素,该元素位于同一名称空间中。在这种情况下,名称空间声明将在Envelope元素上生成,而不会在Body元素上重复。

这意味着Body元素有效采用的字符数取决于序列化的上下文。

答案 1 :(得分:0)

我相信你可以使用消息上下文来获取内容长度:

org.apache.axis2.context.MessageContext.getCurrentMessageContext().getInboundContentLength()