Changes for page Web Services-Sending Large Data
Last modified by Pascal Robert on 2007/09/03 19:36
From version 4.1
edited by Pascal Robert
on 2007/09/03 19:36
on 2007/09/03 19:36
Change comment:
Migrated to Confluence 4.0
To version 1.1
edited by smmccraw
on 2007/07/08 09:46
on 2007/07/08 09:46
Change comment:
There is no comment for this version
Summary
-
Page properties (3 modified, 0 added, 0 removed)
Details
- Page properties
-
- Title
-
... ... @@ -1,1 +1,1 @@ 1 -Web Services-Sending Large Data 1 +Programming__WebObjects-Web Services-Sending Large Data - Author
-
... ... @@ -1,1 +1,1 @@ 1 -XWiki. probert1 +XWiki.smmccraw - Content
-
... ... @@ -1,348 +1,350 @@ 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 - 8 +You also need the java mail and java activation framework from sun. 9 9 10 -==== Client.java ==== 10 +==== Client.java ==== 11 11 12 -{{ code}}12 +{{panel}} 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.*; 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 +__} 26 26 27 - ublic class Client {87 +{{/panel}} 28 28 29 - public static File resize(String sPath) 30 - { 31 - File file = new File(sPath); 89 +==== Webobjects//Application//.java ==== 32 32 91 +override//dispatchRequest// 33 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/"); 93 +{{panel}} 46 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()); 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 +__} 54 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(); 126 +{{/panel}} 60 60 61 - if(!body.hasFault()) 62 - { 63 - System.out.println("answer : "+body); 128 +==== Dispatcher.java ==== 64 64 65 - } 66 - } 67 - catch(Exception e) 68 - { 69 - e.printStackTrace(); 70 - } 71 - return null; 72 - } 130 +{{panel}} 73 73 74 - public static void main(String[] args) { 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 + } 75 75 76 - try{348 +{{/panel}} 77 77 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}} 350 +Category:WebObjects