I think it's true that this is due to everything being built in memory with Axis, but it's certainly not necessary that Web services be implemented in this way. From what I know of the Axis structure a custom serializer/deserializer is not really going to help, either, since Axis will still be building everything in memory before it sends it (or before processing it, on the receive side).

Axis rpc/enc is especially bad for large messages, and judging from the amount of time you're saying it takes to process the message I'd suspect that's what you're using. Just changing to a doc/lit approach with Axis will probably give you dramatically better performance in that case.

For an alternative approach you can look at my JibxSoap framework (http://www.jibx.org/jibxsoap). I haven't tried it with very large messages, but it should scale very well. For a discussion of doc/lit vs. rpc/enc and a look at some performance figures see http://www.sosnoski.com/presents/cleansoap/comparing.html You can see the non-linear increase in rpc/enc processing time for Axis as the number of components in the message increases in the results at http://www.sosnoski.com/presents/cleansoap/results.html I'd suspect this is due to multiRef handling, but haven't looked into it in detail.

I'm hoping to update JibxSoap before the end of the year with a production-quality beta based on the upcoming JiBX beta 4. The current JibxSoap code is more of a demonstration than a full framework, but is usable for many types of applications.

 - Dennis

--
Dennis M. Sosnoski
Enterprise Java, XML, and Web Services
Training and Consulting
http://www.sosnoski.com
Redmond, WA  425.885.7197

Ivan Aguirre wrote:

I believe this problem is the cost of holding the big Web Service
response in memory and, at same time, instanciate a lot of objects (or
maintening a lot of objects in memory and at same thime build a big
XML String). All happening at client side.

I believe this happens with all kind of Web Service that returns a lot of data.

I know it's possible to write your own serializer/deserializer...
maybe you could build an aproach that uses some cache mechanism to
optmize the use o memory.

Ivan

On Thu, 11 Nov 2004 14:45:42 +0100, Thomas Herre
<[EMAIL PROTECTED]> wrote:


Ivan,

Thanks for the tip. I knew that this the preferred way to handle such
problems.

Nonetheless I would like to know if Axis should be able to handle such
large responses.
You see, it was the first time, I encountered such a problem with Axis.
But I think it is not unusual for a business component to return some
hundred or thousand objects.
Can I use such components with Axis? If the performance is as poor as by
now, I can't.
Or am I doing something wrong?

Thanx again.
-Thomas

Ivan Aguirre schrieb:





Tip:

Build a service with the habilitie to retrieve the information "page by page".
If you have, let's say, 5000 clients, show them in your GUI in a paged
form.... like google do on searches.... maybe 200 clients by page (25
pages) shoud be good.
bye

Ivan


On Thu, 11 Nov 2004 13:48:41 +0100, Thomas Herre <[EMAIL PROTECTED]> wrote:




It is far too slow. Takes between 1 and 2 minutes for one request as
desribed below.
Also, the heap becomes very large: about  300 MB filled with instances
of parser and Axis classes.

Dorner, Thomas schrieb:







Is it too slow or will you get an exception?



-----Ursprüngliche Nachricht-----
Von: Thomas Herre [mailto:[EMAIL PROTECTED]
Gesendet: Donnerstag, 11. November 2004 08:57
An: [EMAIL PROTECTED]
Betreff: [Fwd: Too Large XML Response?]


Hi all,

I'm new to this list, yet not new to Axis.
I would appreciate to hear your thoughts on the following:

We're using Axis/SOAP to connect our GUI Clients with a backend server.
Here's an example: A client wants to display a set of customers.
It requests them via SOAP RPC Call and gets a Collection of objects in
return,
which it can display in a JTable.
As you can imagine, the number of objects returned may easily exceed a
number of, let's say some thousands. That produces a very large XML SOAP
response, which is very hard to parse.
It takes about 80 seconds to finish such a request. I tracked the
problem down to find out that the
bottleneck seems to be on the client side, when deserializing the XML
data into Java objects.

I'm using Axis 1.2 RC 1 with Xerces 2.6.2. JDK is 1.4.2_05.
I'm running Client and Tomcat on the same machine for testing.

So, my question: Am I using Axis for something it is not intended or
should it be able to handle such large responses?

Thank you for your opionion and advice.

Cheers, Thomas

Reply via email to