Last modified by Pascal Robert on 2007/09/03 19:36

From version 2.1
edited by smmccraw
on 2007/07/08 09:46
Change comment: There is no comment for this version
To version 4.1
edited by Pascal Robert
on 2007/09/03 19:36
Change comment: Migrated to Confluence 4.0

Summary

Details

Page properties
Title
... ... @@ -1,1 +1,1 @@
1 -Programming__WebObjects-Web Services-Sending Large Data
1 +Web Services-Sending Large Data
Author
... ... @@ -1,1 +1,1 @@
1 -XWiki.smmccraw
1 +XWiki.probert
Content
... ... @@ -1,350 +1,348 @@
1 -=== Kristoff Cossement ===
1 +=== Kristoff Cossement ===
2 2  
3 3  Soap with mime attachments was indeed the way to go.
4 4  
5 -Remark: this only works with java 1.4.2//09 (I did not get it working with java 1.5.x)//
5 +Remark: this only works with java 1.4.2_09 (I did not get it working with java 1.5.x)
6 6  
7 7  For those who are interested I included some sample code on how to exchange large binary data between a java client and and webobjects server without taking all data in memory.
8 -You also need the java mail and java activation framework from sun.
8 + You also need the java mail and java activation framework from sun.
9 9  
10 -==== Client.java ====
10 +==== Client.java ====
11 11  
12 -{{panel}}
12 +{{code}}
13 13  
14 - import javax.xml.soap.SOAPConnectionFactory;
15 - import javax.xml.soap.*;
16 - import javax.xml.transform.stream.*;
17 - import javax.xml.transform.*;
18 - import java.io.*;
19 - import org.apache.axis.attachments.AttachmentPart;
20 - import org.apache.axis.message.*;
21 - import javax.activation.DataHandler;
22 - import javax.activation.FileDataSource;
23 - import javax.xml.soap.SOAPElement;
24 - import java.util.*;
25 - import javax.mail.*;
26 -
27 - public class Client {
28 -
29 - public static File resize(String sPath)
30 - {
31 - File file = new File(sPath);
32 -
33 -
34 - String endPoint = "http://localhost:55555/cgi-bin/WebObjects/project.woa/ws/FileUpload";
35 - try{
36 - SOAPConnection connection = SOAPConnectionFactory.newInstance().createConnection();
37 - SOAPMessage message = (javax.xml.soap.SOAPMessage)MessageFactory.newInstance().createMessage();
38 - SOAPPart part = message.getSOAPPart();
39 - SOAPEnvelope envelope = (org.apache.axis.message.SOAPEnvelope)part.getEnvelope();
40 - SOAPBody body = (org.apache.axis.message.SOAPBody)envelope.getBody();
41 - SOAPBodyElement operation = (org.apache.axis.message.SOAPBodyElement)body.addBodyElement(
42 - envelope.createName("upload",
43 - "ns",
44 - "http://localhost:55555/cgi-bin/WebObjects/project.woa/ws/FileUpload"));
45 - operation.setEncodingStyle("http://schemas.xmlsoaporg/soap/encoding/");
46 -
47 - DataHandler dh = new DataHandler(new FileDataSource(file));
48 - AttachmentPart attachment = (org.apache.axis.attachments.AttachmentPart)message.createAttachmentPart(dh);
49 - SOAPElement filename = operation.addChildElement("filename","");
50 - SOAPElement source = operation.addChildElement("source","");
51 - message.addAttachmentPart(attachment);
52 - filename.addTextNode(file.getName());
53 - source.addTextNode(attachment.getContentId());
54 -
55 - SOAPMessage result = connection.call(message,endPoint);
56 - System.out.println(result);
57 - part = result.getSOAPPart();
58 - envelope = (org.apache.axis.message.SOAPEnvelope)part.getEnvelope();
59 - body = (org.apache.axis.message.SOAPBody)envelope.getBody();
60 -
61 - if(!body.hasFault())
62 -________{
63 -__________System.out.println("answer_:_"+body);
64 -__
65 -________}
66 -______}
67 -______catch(Exception_e)
68 -______{
69 -________e.printStackTrace();
70 -______}
71 -______return_null;
72 -____}
73 -__
74 -____public_static_void_main(String[]_args)_{
75 -__
76 -______try_{
77 -__
78 -________resize(args[0]);
79 -__
80 -______}
81 -______catch_(Exception_e)_{
82 -________System.out.println(e.getMessage());
83 -______}
84 -____}
85 -__}
14 + import javax.xml.soap.SOAPConnectionFactory;
15 + import javax.xml.soap.*;
16 + import javax.xml.transform.stream.*;
17 + import javax.xml.transform.*;
18 + import java.io.*;
19 + import org.apache.axis.attachments.AttachmentPart;
20 + import org.apache.axis.message.*;
21 + import javax.activation.DataHandler;
22 + import javax.activation.FileDataSource;
23 + import javax.xml.soap.SOAPElement;
24 + import java.util.*;
25 + import javax.mail.*;
86 86  
87 -{{/panel}}
27 + public class Client {
88 88  
89 -==== Webobjects//Application//.java ====
29 + public static File resize(String sPath)
30 + {
31 + File file = new File(sPath);
90 90  
91 -override//dispatchRequest//
92 92  
93 -{{panel}}
34 + String endPoint = "http://localhost:55555/cgi-bin/WebObjects/project.woa/ws/FileUpload";
35 + try{
36 + SOAPConnection connection = SOAPConnectionFactory.newInstance().createConnection();
37 + SOAPMessage message = (javax.xml.soap.SOAPMessage)MessageFactory.newInstance().createMessage();
38 + SOAPPart part = message.getSOAPPart();
39 + SOAPEnvelope envelope = (org.apache.axis.message.SOAPEnvelope)part.getEnvelope();
40 + SOAPBody body = (org.apache.axis.message.SOAPBody)envelope.getBody();
41 + SOAPBodyElement operation = (org.apache.axis.message.SOAPBodyElement)body.addBodyElement(
42 + envelope.createName("upload",
43 + "ns",
44 + "http://localhost:55555/cgi-bin/WebObjects/project.woa/ws/FileUpload"));
45 + operation.setEncodingStyle("http://schemas.xmlsoaporg/soap/encoding/");
94 94  
95 -__public_WOResponse_dispatchRequest(WORequest_request)
96 -__{
97 -____WOResponse_result_=_null;
98 -____String_sURI_=_request.uri();
99 -____NSLog.debug.appendln("Accessing_"_+_sURI);
100 -__
101 -____Pattern_p_=_Pattern.compile("/ws/FileUpload");
102 -____Matcher_m_=_p.matcher(sURI);
103 -____if(m.find())
104 -____{
105 -______String_sContType_=_request.headerForKey("content-type");
106 -______p_=_Pattern.compile("multipart/related");
107 -______m_=_p.matcher(sContType);
108 -______if(m.find())
109 -______{
110 -________result_=_Dispatcher.handleFileUpload(request);
111 -______}
112 -______else
113 -______{
114 -________result_=_super.dispatchRequest(request);
115 -______}
116 -____}
117 -____else
118 -____{
119 -______result_=_super.dispatchRequest(request);
120 -____}
121 -__
122 -____return_result;
123 -__
124 -__}
47 + DataHandler dh = new DataHandler(new FileDataSource(file));
48 + AttachmentPart attachment = (org.apache.axis.attachments.AttachmentPart)message.createAttachmentPart(dh);
49 + SOAPElement filename = operation.addChildElement("filename","");
50 + SOAPElement source = operation.addChildElement("source","");
51 + message.addAttachmentPart(attachment);
52 + filename.addTextNode(file.getName());
53 + source.addTextNode(attachment.getContentId());
125 125  
126 -{{/panel}}
55 + SOAPMessage result = connection.call(message,endPoint);
56 + System.out.println(result);
57 + part = result.getSOAPPart();
58 + envelope = (org.apache.axis.message.SOAPEnvelope)part.getEnvelope();
59 + body = (org.apache.axis.message.SOAPBody)envelope.getBody();
127 127  
128 -==== Dispatcher.java ====
61 + if(!body.hasFault())
62 + {
63 + System.out.println("answer : "+body);
129 129  
130 -{{panel}}
65 + }
66 + }
67 + catch(Exception e)
68 + {
69 + e.printStackTrace();
70 + }
71 + return null;
72 + }
131 131  
132 -__//
133 -__//_Dispatcher.java
134 -__//_project
135 -__//
136 -__//_Created_by_admin_on_5/5/06.
137 -__//_Copyright_2006___MyCompanyName__._All_rights_reserved.
138 -__//
139 -__import_com.webobjects.foundation.*;
140 -__import_com.webobjects.appserver.*;
141 -__import_com.webobjects.eocontrol.*;
142 -__
143 -__import_java.io.*;
144 -__import_java.util.regex.*;
145 -__import_org.w3c.dom.*;
146 -__import_javax.xml.transform.*;
147 -__import_javax.xml.transform.stream.*;
148 -__import_javax.xml.transform.dom.*;
149 -__import_javax.xml.parsers.*;
150 -__import_org.apache.axis.attachments.*;
151 -__
152 -__
153 -__public_class_Dispatcher_{
154 -__
155 -____public_static_WOResponse_handleFileUpload(WORequest_request)
156 -____{
157 -______String_sContType_=_request.headerForKey("content-type");
158 -______String_sSoapXml_=_"";
159 -______InputStream_requestStream_=_request.contentInputStream();
160 -__
161 -______String_sTempDir_=_System.getProperty("java.io.tmpdir");
162 -______String_timestamp_=(new_Long(System.currentTimeMillis())).toString();
163 -______File_fTempFile_=_new_File(sTempDir+"/"+timestamp);
164 -______File_fSavedFile_=_new_File(sTempDir+"/"+timestamp+".out");
165 -__
166 -______try
167 -______{
168 -________BufferedOutputStream_fOut_=_new_BufferedOutputStream(new_FileOutputStream(fTempFile));
169 -________byte[)_buffer_=_new_byte(32_*_1024];
170 -________int_bytesRead_=_0;
171 -________while_((bytesRead_=_requestStream.read(buffer))_!= -1)
172 - {
173 - fOut.write(buffer, 0, bytesRead);
174 - }
175 - fOut.close();
176 - }
177 - catch (Exception e)
178 - {
179 - NSLog.debug.appendln(e.getMessage());
180 - }
181 -
182 - try
183 - {
184 - InputStream iStream = new FileInputStream(fTempFile);
185 -
186 - MultiPartRelatedInputStream mis = new MultiPartRelatedInputStream(sContType,iStream);
187 - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
188 - Document doc = factory.newDocumentBuilder().parse(mis);
189 - sSoapXml = toString(doc);
190 - NSLog.debug.appendln("SOAP Envelope: " + sSoapXml);
191 - mis.close();
192 - iStream.close();
193 -
194 - Node nEnvelope = getNamedChildNode(doc,"Envelope");
195 - if(null !=_nEnvelope)
196 -________{
197 -__________Node_nBody_=_getNamedChildNode(nEnvelope,"Body");
198 -__________if(null_!= nBody)
199 - {
200 - NSArray nSubNodes = getElementChildNodes(nBody);
201 - if((null !=_nSubNodes)_&&_(nSubNodes.count()_>_0))
202 -____________{
203 -______________Node_nFileUpload_=_(Node)nSubNodes.get(0);
204 -______________nSubNodes_=_getElementChildNodes(nFileUpload);
205 -______________if((null_!= nSubNodes) && (nSubNodes.count() > 1))
206 - {
207 - Node nFileName = (Node)nSubNodes.get(0);
208 - Node nData = (Node)nSubNodes.get(1);
209 -
210 - String sFileName = getTextFromNode(nFileName);
211 - String sFileMimeID = getTextFromNode(nData);
212 -
213 - fSavedFile = new File(sTempDir+"/"+sFileName);
214 -
215 - Pattern pattern = Pattern.compile("(boundary=\".+?\")");
216 - Matcher match = pattern.matcher(sContType);
217 - if(match.find())
218 - {
219 - String boundary= match.group(1);
220 - String sSubContentType = "multipart/related; type=\"text/xml\"; start=\"<"+sFileMimeID+">\"; "+boundary;
221 - iStream = new FileInputStream(fTempFile);
222 - mis = new MultiPartRelatedInputStream(sSubContentType,iStream);
223 - try
224 - {
225 - BufferedOutputStream fOut = new BufferedOutputStream(new FileOutputStream(fSavedFile));
226 - byte[) buffer = new byte(32 * 1024];
227 - int bytesRead = 0;
228 - while ((bytesRead = mis.read(buffer)) !=_-1)
229 -____________________{
230 -______________________fOut.write(buffer,_0,_bytesRead);
231 -____________________}
232 -____________________mis.close();
233 -____________________fOut.close();
234 -__________________}
235 -__________________catch_(Exception_e)
236 -__________________{
237 -____________________System.out.println(e.getMessage());
238 -____________________//throw_new_IOException(me_+_"_failed,_got:_"_+_e.toString());
239 -__________________}
240 -________________}
241 -______________}
242 -____________}__
243 -__________}
244 -________}
245 -______}
246 -______catch(Exception_e)
247 -______{
248 -________e.printStackTrace();
249 -______}
250 -__
251 -__
252 -______WOResponse_result_=_new_WOResponse();
253 -______result.setContent(_"<?xml_version="1.0"_encoding="UTF-8"?>n"+
254 -__________"<soapenv:Envelope_xmlns:soapenv="http://schemas.xmlsoaporg/soap/envelope/"_xmlns:xsd="http://www.w3.org/2001/XMLSchema"_xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">n"+
255 -__________"<soapenv:Body>n"+
256 -__________"<ns:uploadResponse_soapenv:encodingStyle="http://schemas.xmlsoaporg/soap/encoding/"_xmlns:ns="http://localhost:55555/cgi-bin/WebObjects/project.woa/ws/FileUpload">n"+
257 -__________"<ns:uploadReturn_xsi:type="xsd:boolean">true</ns:uploadReturn>n"+
258 -__________"</ns:uploadResponse>n"+
259 -__________"</soapenv:Body>n"+
260 -__________"</soapenv:Envelope>");
261 -__
262 -__
263 -______result.setHeader("text/xml;_charset=utf-8","content-type");
264 -__
265 -__
266 -______return_result;
267 -__
268 -____}
269 -__
270 -__
271 -____static_public_String_toString(Document_document)_{
272 -______String_result_=_null;
273 -__
274 -______if_(document_!= null) {
275 - StringWriter strWtr = new StringWriter();
276 - StreamResult strResult = new StreamResult(strWtr);
277 - TransformerFactory tfac = TransformerFactory.newInstance();
278 - try {
279 - Transformer t = tfac.newTransformer();
280 - t.setOutputProperty(OutputKeys.ENCODING, "utf-8");
281 - t.setOutputProperty(OutputKeys.INDENT, "yes");
282 - t.setOutputProperty(OutputKeys.METHOD, "xml"); //xml, html, text
283 - t.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
284 - t.transform(new DOMSource(document.getDocumentElement()), strResult);
285 - } catch (Exception e) {
286 - System.err.println("XML.toString(Document): " + e);
287 - }
288 - result = strResult.getWriter().toString();
289 - }
290 -
291 - return result;
292 - }
293 -
294 - static public Node getNamedChildNode(Node n, String sChildNodeName)
295 - {
296 -
297 - NodeList nl = n.getChildNodes();
298 -
299 - for(int i=0;i<nl.getLength();i++)
300 - {
301 - Node s = nl.item(i);
302 - String sChild = s.getNodeName();
303 - if(sChildNodeName.equalsIgnoreCase(sChild) || sChild.endsWith(":"+sChildNodeName))
304 - {
305 - NSLog.debug.appendln("childnode = " + s.getNodeName());
306 - return s;
307 - }
308 - }
309 -
310 - return null;
311 -
312 - }
313 - static public NSArray getElementChildNodes(Node n)
314 - {
315 - NSMutableArray elements = new NSMutableArray();
316 - NodeList nl = n.getChildNodes();
317 -
318 - for(int i=0;i<nl.getLength();i++)
319 - {
320 - Node s = nl.item(i);
321 - if(s.getNodeType() == Node.ELEMENT_NODE)
322 - {
323 - NSLog.debug.appendln("childnode = " + s.getNodeName());
324 - elements.addObject(s);
325 - }
326 - }
327 -
328 - return elements;
329 - }
330 - static public String getTextFromNode(Node n)
331 - {
332 - String text = "";
333 -
334 - NodeList nl = n.getChildNodes();
335 -
336 - for(int i=0;i<nl.getLength();i++)
337 - {
338 - Node s = nl.item(i);
339 - if(s.getNodeType() == Node.TEXT_NODE)
340 - {
341 - return s.getNodeValue();
342 - }
343 - }
344 - return text;
345 - }
346 - }
74 + public static void main(String[] args) {
347 347  
348 -{{/panel}}
76 + try {
349 349  
350 -Category:WebObjects
78 + resize(args[0]);
79 +
80 + }
81 + catch (Exception e) {
82 + System.out.println(e.getMessage());
83 + }
84 + }
85 + }
86 +
87 +{{/code}}
88 +
89 +===== Webobjects Application .java =====
90 +
91 +override dispatchRequest
92 +
93 +{{code}}
94 +
95 +  public WOResponse dispatchRequest(WORequest request)
96 + {
97 + WOResponse result = null;
98 + String sURI = request.uri();
99 + NSLog.debug.appendln("Accessing " + sURI);
100 +
101 + Pattern p = Pattern.compile("/ws/FileUpload");
102 + Matcher m = p.matcher(sURI);
103 + if(m.find())
104 + {
105 + String sContType = request.headerForKey("content-type");
106 + p = Pattern.compile("multipart/related");
107 + m = p.matcher(sContType);
108 + if(m.find())
109 + {
110 + result = Dispatcher.handleFileUpload(request);
111 + }
112 + else
113 + {
114 + result = super.dispatchRequest(request);
115 + }
116 + }
117 + else
118 + {
119 + result = super.dispatchRequest(request);
120 + }
121 +
122 + return result;
123 +
124 + }
125 +
126 +{{/code}}
127 +
128 +===== Dispatcher.java =====
129 +
130 +{{code}}
131 +
132 +  //
133 + // Dispatcher.java
134 + // project
135 + //
136 + // Created by admin on 5/5/06.
137 + // Copyright 2006 __MyCompanyName__. All rights reserved.
138 + //
139 + import com.webobjects.foundation.*;
140 + import com.webobjects.appserver.*;
141 + import com.webobjects.eocontrol.*;
142 +
143 + import java.io.*;
144 + import java.util.regex.*;
145 + import org.w3c.dom.*;
146 + import javax.xml.transform.*;
147 + import javax.xml.transform.stream.*;
148 + import javax.xml.transform.dom.*;
149 + import javax.xml.parsers.*;
150 + import org.apache.axis.attachments.*;
151 +
152 +
153 + public class Dispatcher {
154 +
155 + public static WOResponse handleFileUpload(WORequest request)
156 + {
157 + String sContType = request.headerForKey("content-type");
158 + String sSoapXml = "";
159 + InputStream requestStream = request.contentInputStream();
160 +
161 + String sTempDir = System.getProperty("java.io.tmpdir");
162 + String timestamp =(new Long(System.currentTimeMillis())).toString();
163 + File fTempFile = new File(sTempDir+"/"+timestamp);
164 + File fSavedFile = new File(sTempDir+"/"+timestamp+".out");
165 +
166 + try
167 + {
168 + BufferedOutputStream fOut = new BufferedOutputStream(new FileOutputStream(fTempFile));
169 + byte[] buffer = new byte[32 * 1024];
170 + int bytesRead = 0;
171 + while ((bytesRead = requestStream.read(buffer)) != -1)
172 + {
173 + fOut.write(buffer, 0, bytesRead);
174 + }
175 + fOut.close();
176 + }
177 + catch (Exception e)
178 + {
179 + NSLog.debug.appendln(e.getMessage());
180 + }
181 +
182 + try
183 + {
184 + InputStream iStream = new FileInputStream(fTempFile);
185 +
186 + MultiPartRelatedInputStream mis = new MultiPartRelatedInputStream(sContType,iStream);
187 + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
188 + Document doc = factory.newDocumentBuilder().parse(mis);
189 + sSoapXml = toString(doc);
190 + NSLog.debug.appendln("SOAP Envelope: " + sSoapXml);
191 + mis.close();
192 + iStream.close();
193 +
194 + Node nEnvelope = getNamedChildNode(doc,"Envelope");
195 + if(null != nEnvelope)
196 + {
197 + Node nBody = getNamedChildNode(nEnvelope,"Body");
198 + if(null != nBody)
199 + {
200 + NSArray nSubNodes = getElementChildNodes(nBody);
201 + if((null != nSubNodes) && (nSubNodes.count() > 0))
202 + {
203 + Node nFileUpload = (Node)nSubNodes.get(0);
204 + nSubNodes = getElementChildNodes(nFileUpload);
205 + if((null != nSubNodes) && (nSubNodes.count() > 1))
206 + {
207 + Node nFileName = (Node)nSubNodes.get(0);
208 + Node nData = (Node)nSubNodes.get(1);
209 +
210 + String sFileName = getTextFromNode(nFileName);
211 + String sFileMimeID = getTextFromNode(nData);
212 +
213 + fSavedFile = new File(sTempDir+"/"+sFileName);
214 +
215 + Pattern pattern = Pattern.compile("(boundary=\".+?\")");
216 + Matcher match = pattern.matcher(sContType);
217 + if(match.find())
218 + {
219 + String boundary= match.group(1);
220 + String sSubContentType = "multipart/related; type=\"text/xml\"; start=\"<"+sFileMimeID+">\"; "+boundary;
221 + iStream = new FileInputStream(fTempFile);
222 + mis = new MultiPartRelatedInputStream(sSubContentType,iStream);
223 + try
224 + {
225 + BufferedOutputStream fOut = new BufferedOutputStream(new FileOutputStream(fSavedFile));
226 + byte[] buffer = new byte[32 * 1024];
227 + int bytesRead = 0;
228 + while ((bytesRead = mis.read(buffer)) != -1)
229 + {
230 + fOut.write(buffer, 0, bytesRead);
231 + }
232 + mis.close();
233 + fOut.close();
234 + }
235 + catch (Exception e)
236 + {
237 + System.out.println(e.getMessage());
238 + //throw new IOException(me + " failed, got: " + e.toString());
239 + }
240 + }
241 + }
242 + }
243 + }
244 + }
245 + }
246 + catch(Exception e)
247 + {
248 + e.printStackTrace();
249 + }
250 +
251 +
252 + WOResponse result = new WOResponse();
253 + result.setContent( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"+
254 + "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoaporg/soap/envelope/\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n"+
255 + "<soapenv:Body>\n"+
256 + "<ns:uploadResponse soapenv:encodingStyle=\"http://schemas.xmlsoaporg/soap/encoding/\" xmlns:ns=\"http://localhost:55555/cgi-bin/WebObjects/project.woa/ws/FileUpload\">\n"+
257 + "<ns:uploadReturn xsi:type=\"xsd:boolean\">true</ns:uploadReturn>\n"+
258 + "</ns:uploadResponse>\n"+
259 + "</soapenv:Body>\n"+
260 + "</soapenv:Envelope>");
261 +
262 +
263 + result.setHeader("text/xml; charset=utf-8","content-type");
264 +
265 +
266 + return result;
267 +
268 + }
269 +
270 +
271 + static public String toString(Document document) {
272 + String result = null;
273 +
274 + if (document != null) {
275 + StringWriter strWtr = new StringWriter();
276 + StreamResult strResult = new StreamResult(strWtr);
277 + TransformerFactory tfac = TransformerFactory.newInstance();
278 + try {
279 + Transformer t = tfac.newTransformer();
280 + t.setOutputProperty(OutputKeys.ENCODING, "utf-8");
281 + t.setOutputProperty(OutputKeys.INDENT, "yes");
282 + t.setOutputProperty(OutputKeys.METHOD, "xml"); //xml, html, text
283 + t.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
284 + t.transform(new DOMSource(document.getDocumentElement()), strResult);
285 + } catch (Exception e) {
286 + System.err.println("XML.toString(Document): " + e);
287 + }
288 + result = strResult.getWriter().toString();
289 + }
290 +
291 + return result;
292 + }
293 +
294 + static public Node getNamedChildNode(Node n, String sChildNodeName)
295 + {
296 +
297 + NodeList nl = n.getChildNodes();
298 +
299 + for(int i=0;i<nl.getLength();i++)
300 + {
301 + Node s = nl.item(i);
302 + String sChild = s.getNodeName();
303 + if(sChildNodeName.equalsIgnoreCase(sChild) || sChild.endsWith(":"+sChildNodeName))
304 + {
305 + NSLog.debug.appendln("childnode = " + s.getNodeName());
306 + return s;
307 + }
308 + }
309 +
310 + return null;
311 +
312 + }
313 + static public NSArray getElementChildNodes(Node n)
314 + {
315 + NSMutableArray elements = new NSMutableArray();
316 + NodeList nl = n.getChildNodes();
317 +
318 + for(int i=0;i<nl.getLength();i++)
319 + {
320 + Node s = nl.item(i);
321 + if(s.getNodeType() == Node.ELEMENT_NODE)
322 + {
323 + NSLog.debug.appendln("childnode = " + s.getNodeName());
324 + elements.addObject(s);
325 + }
326 + }
327 +
328 + return elements;
329 + }
330 + static public String getTextFromNode(Node n)
331 + {
332 + String text = "";
333 +
334 + NodeList nl = n.getChildNodes();
335 +
336 + for(int i=0;i<nl.getLength();i++)
337 + {
338 + Node s = nl.item(i);
339 + if(s.getNodeType() == Node.TEXT_NODE)
340 + {
341 + return s.getNodeValue();
342 + }
343 + }
344 + return text;
345 + }
346 + }
347 +
348 +{{/code}}