axis-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Lee, Ken" <Ken_...@platts.com>
Subject RE: Passing large data in SOAP Message
Date Wed, 19 May 2004 14:40:12 GMT
I have been working on solutions to this problem for the last month.  In
my case, I convert a resultset to a document using a simple method:  I
don't have the person I received this code from referenced (oops!).  If
you need the imports for this, just let me know.

	private static Document toDocument(ResultSet rs) throws
ParserConfigurationException, SQLException {
		DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
		DocumentBuilder builder        =
factory.newDocumentBuilder();
		Document doc                   = builder.newDocument();

		Element results = doc.createElement("Results");
		doc.appendChild(results);

		ResultSetMetaData rsmd = rs.getMetaData();
		int colCount           = rsmd.getColumnCount();

		/* System.out.println("Starting to build Document"); */
		while (rs.next()) {
			Element row = doc.createElement("Row");
			results.appendChild(row);
			for (int i = 1; i <= colCount; i++) {
				String columnName =
rsmd.getColumnName(i);
				String value      = rs.getString(i);
				Element node      =
doc.createElement(columnName);
	
node.appendChild(doc.createTextNode(value.trim()));
				row.appendChild(node);
			}
		}
		/* System.out.println("Document created"); */
		return doc;
	}

To get around memory problems, I did two things, added memory to the web
server, and changed the memory settings to use quite a bit of memory on
the jvm.  In tomcat, I use the following JAVA_OPTS setting: "-Xms256m
-Xmx256m -DentityExpansionLimit=1000000"  The -DentityExpansionLimit
change came from a comment by Nelson Minar on this forum.

I still don't have an answer that would send the document back
compressed, and using DIME or some other chunking mechanism.  I just
haven't figured it out yet.

I hope some of this may help.  I am not sure Web services is the right
answer for sending large amounts of data.  I have also been looking at
using SSH tunnels to access the data directly in a secure manner.  The
speed has actually been better than all of the hoops that SOAP has be
jumping through.

For smaller datasets, SOAP is working great!

Hope this helps.  I also hope that someone else with knowledge working
with large output objects will provide more enlightenment!

Ken



>  -----Original Message-----
> From: 	Vinod Patil [mailto:vinod.patil@patni.com] 
> Sent:	Tuesday, May 18, 2004 10:40 PM
> To:	axis-user@ws.apache.org
> Subject:	Passing large data in SOAP Message
> 
> Hi All,
> 
>  A type java:MSG service should have the signatures as 
> --public Element [] method(Element [] bodies) 
> --public SOAPBodyElement [] method (SOAPBodyElement [] bodies) 
> --public Document method(Document body) 
> --public void method(SOAPEnvelope req, SOAPEnvelope resp)
> 
> Now if the XML that i am going to embed in the body of the 
> message is very large (say abt 3+ Mb) then the output objects 
> of the service methods will be also be large in size.
> And this will lead to memory problems.
> 
> What i want to ask is that how do we pass very large XML's in 
> the SOAP messages...What approach should be taken if one 
> wants to pass very large XML data in the SOAP message body? 
> 
> I am currently using the messaging style service ( with 
> signature public SOAPBodyElement [] method (SOAPBodyElement 
> [] bodies)  ) but i am running into OutOfMemory problems...
> This is because the Document object that we use to construct 
> the SOAPBodyElement is very large.
> 
> Can anyone please guide me regarding the approcah that needs 
> to be taken in case of passing back huge XML data from a 
> webservice using Axis or any SOAP Implementation?
> 
> Regards,
> Vinod

Mime
View raw message