2015-04-30 73 views
2

我想獲得一個SOAPBody對象的長度。我目前的實現是有效獲取SOAPBody長度

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

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

這需要的我的整個運行時間大量的時間作爲我的SOAP體是非常大的。這種方式效率很低。我怎樣纔能有效率地利用這個長度?

+0

其org.apache.axiom.soap.SOAPBody – user2694734

+0

你是什麼意思的「長度」?你是指'SOAPBody'中的文本長度還是序列化的長度? –

+0

是否有可能以某種方式讀取將XML編入「SOAPBody」的長度_before_?我擔心,一旦擁有一個'SOAPBody'對象,就無法獲得長度而不轉換爲字符串或序列化。 –

回答

0

我相信你可以使用消息上下文來獲取內容長度:

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

我正在使用org.apache.synapse.MessageContext。我有這樣的方法來獲得contentLength – user2694734

0

你提的問題基本上是毫無意義的。對於SOAP體來說,不存在「length」這樣的概念,或者對於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元素有效採用的字符數取決於序列化的上下文。