1 17 18 package org.pentaho.core.util; 19 20 import java.io.IOException ; 21 import java.io.OutputStream ; 22 import java.util.Iterator ; 23 import java.util.List ; 24 import java.util.Set ; 25 26 import org.pentaho.core.repository.IContentItem; 29 import org.pentaho.core.runtime.IRuntimeContext; 30 import org.pentaho.core.solution.IOutputHandler; 31 import org.pentaho.core.solution.SimpleOutputHandler; 32 import org.pentaho.messages.Messages; 33 import org.pentaho.messages.util.LocaleHelper; 34 35 public class SoapUtil { 36 37 public static void generateSoapResponse(IRuntimeContext context, OutputStream outputStream, SimpleOutputHandler outputHandler, OutputStream contentStream, List messages) { 38 39 StringBuffer messageBuffer = new StringBuffer (); 40 generateSoapResponse(context, outputHandler, contentStream, messageBuffer, messages); 41 try { 42 outputStream.write(messageBuffer.toString().getBytes(LocaleHelper.getSystemEncoding())); 43 } catch (IOException e) { 44 } 46 } 47 48 public static String getSoapHeader() { 49 return "<SOAP-ENV:Envelope " + "xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\" " + "SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">\n " + "<SOAP-ENV:Body>\n"; 54 } 55 56 public static String getSoapFooter() { 57 return "</SOAP-ENV:Body>\n</SOAP-ENV:Envelope>"; 59 } 60 61 public static void generateSoapError(StringBuffer messageBuffer, List messages) { 62 63 String message = UIUtil.getFirstError(messages); 64 65 messageBuffer.append("<SOAP-ENV:Fault>\n"); 67 if (message == null) { 68 message = Messages.getErrorString("SoapUtil.ERROR_0001_UNKNOWN_ERROR"); } 70 71 75 76 boolean senderFault = (message.indexOf("SolutionEngine.ERROR_0002") != -1) || (message.indexOf("SolutionEngine.ERROR_0003") != -1) || (message.indexOf("SolutionEngine.ERROR_0004") != -1) || (message.indexOf("SolutionEngine.ERROR_0005") != -1); messageBuffer.append("<SOAP-ENV:faultcode>\n <SOAP-ENV:Subcode>\n<SOAP-ENV:Value><![CDATA[" + message + "]]></SOAP-ENV:Value>\n </SOAP-ENV:Subcode>\n </SOAP-ENV:faultcode>"); 86 if (senderFault) { 87 messageBuffer.append("<SOAP-ENV:faultactor>SOAP-ENV:Client</SOAP-ENV:faultactor>\n"); } else { 89 messageBuffer.append("<SOAP-ENV:faultactor>SOAP-ENV:Server</SOAP-ENV:faultactor>\n"); } 91 92 messageBuffer.append("<SOAP-ENV:faultstring><SOAP-ENV:Text xml:lang=\"" + LocaleHelper.getDefaultLocale().toString() + "\"><![CDATA[" + message + "]]></SOAP-ENV:Text>\n </SOAP-ENV:faultstring>\n"); 95 messageBuffer.append("<SOAP-ENV:Detail>"); 98 Iterator messageIterator = messages.iterator(); 99 while (messageIterator.hasNext()) { 100 messageBuffer.append("<message name=\"trace\"><![CDATA[" + (String ) messageIterator.next() + "]]></message>\n"); } 102 messageBuffer.append("</SOAP-ENV:Detail>"); 104 messageBuffer.append("</SOAP-ENV:Fault>\n"); 106 } 107 108 public static String openSoapResponse() { 109 return "<ExecuteActivityResponse xmlns:m=\"http://pentaho.org\">\n"; } 111 112 public static String closeSoapResponse() { 113 return "</ExecuteActivityResponse>\n"; } 115 116 public static void generateSoapResponse(IRuntimeContext context, SimpleOutputHandler outputHandler, OutputStream contentStream, StringBuffer messageBuffer, List messages) { 117 120 133 134 if (context == null || context.getStatus() != IRuntimeContext.RUNTIME_STATUS_SUCCESS) { 135 generateSoapError(messageBuffer, messages); 136 } else { 137 138 messageBuffer.append(openSoapResponse()); 139 140 IContentItem contentItem = outputHandler.getFeedbackContentItem(); 141 142 Set outputNames = context.getOutputNames(); 144 145 Iterator outputNameIterator = outputNames.iterator(); 146 while (outputNameIterator.hasNext()) { 147 String outputName = (String ) outputNameIterator.next(); 148 contentItem = outputHandler.getOutputContentItem(IOutputHandler.RESPONSE, IOutputHandler.CONTENT); 149 if (outputNames.size() == 1 && contentItem != null) { 150 String mimeType = contentItem.getMimeType(); 151 if (mimeType != null && mimeType.startsWith("text/")) { if (mimeType.equals("text/xml")) { messageBuffer.append("<").append(outputName).append(">") .append(contentStream.toString()).append("</").append(outputName).append(">"); } else if (mimeType.startsWith("text/")) { messageBuffer.append("<").append(outputName).append("><![CDATA[") .append(contentStream.toString()).append("]]></").append(outputName).append(">"); } 163 } else { 164 Object value = context.getOutputParameter(outputName).getValue(); 165 if (value == null) { 166 value = ""; } 168 messageBuffer.append(SoapHelper.toSOAP(outputName, value)); 169 } 170 } else { 171 Object value = context.getOutputParameter(outputName).getValue(); 172 if (value == null) { 173 value = ""; } 175 messageBuffer.append(SoapHelper.toSOAP(outputName, value)); 176 } 177 } 178 messageBuffer.append(closeSoapResponse()); 179 } 180 } 181 182 } 183 | Popular Tags |