我想获得SOAPBody对象的长度。我目前的实施是
String mBody = body.toString();
int len= mBody.length();
使用org.apache.axiom.soap.SOAPBody;
由于我的SOAP主体非常庞大,因此整个操作时间都需要很长时间。这种方式效率很低。我怎样才能有效地利用这个长度?
答案 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()