1997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu/** 2997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Copyright (c) 2003,2004, Stefan Haustein, Oberhausen, Rhld., Germany 3997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 4997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Permission is hereby granted, free of charge, to any person obtaining a copy 5997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * of this software and associated documentation files (the "Software"), to deal 6997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * in the Software without restriction, including without limitation the rights 7997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * to use, copy, modify, merge, publish, distribute, sublicense, and/or 8997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * sell copies of the Software, and to permit persons to whom the Software is 9997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * furnished to do so, subject to the following conditions: 10997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 11997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * The above copyright notice and this permission notice shall be included in 12997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * all copies or substantial portions of the Software. 13997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 14997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 20997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * IN THE SOFTWARE. 21997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 22997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Contributor(s): John D. Beatty, Dave Dash, F. Hunter, Alexander Krebs, 23997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Lars Mehrmann, Sean McDaniel, Thomas Strang, Renaud Tognelli 24997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * */ 25997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 26997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yupackage org.ksoap2.transport; 27997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 28997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport java.util.List; 29997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport java.util.zip.GZIPInputStream; 30997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport java.io.*; 31997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport java.net.MalformedURLException; 32997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport java.net.Proxy; 33997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport java.net.URL; 34997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 35997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport org.ksoap2.*; 36997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport org.ksoap2.serialization.SoapSerializationEnvelope; 37997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport org.xmlpull.v1.*; 38997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 39997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu/** 40997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * A J2SE based HttpTransport layer. 41997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 42997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yupublic class HttpTransportSE extends Transport { 43997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 44997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu private ServiceConnection serviceConnection; 45997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 46997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 47997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Creates instance of HttpTransportSE with set url 48997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 49997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @param url 50997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * the destination to POST SOAP data 51997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 52997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public HttpTransportSE(String url) { 53997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu super(null, url); 54997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 55997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 56997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 57997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Creates instance of HttpTransportSE with set url and defines a 58997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * proxy server to use to access it 59997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 60997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @param proxy 61997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Proxy information or <code>null</code> for direct access 62997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @param url 63997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * The destination to POST SOAP data 64997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 65997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public HttpTransportSE(Proxy proxy, String url) { 66997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu super(proxy, url); 67997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 68997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 69997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 70997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Creates instance of HttpTransportSE with set url 71997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 72997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @param url 73997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * the destination to POST SOAP data 74997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @param timeout 75997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * timeout for connection and Read Timeouts (milliseconds) 76997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 77997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public HttpTransportSE(String url, int timeout) { 78997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu super(url, timeout); 79997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 80997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 81997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public HttpTransportSE(Proxy proxy, String url, int timeout) { 82997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu super(proxy, url, timeout); 83997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 84997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 85997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 86997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Creates instance of HttpTransportSE with set url 87997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 88997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @param url 89997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * the destination to POST SOAP data 90997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @param timeout 91997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * timeout for connection and Read Timeouts (milliseconds) 92997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @param contentLength 93997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Content Lenght in bytes if known in advance 94997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 95997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public HttpTransportSE(String url, int timeout, int contentLength) { 96997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu super(url, timeout); 97997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 98997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 99997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public HttpTransportSE(Proxy proxy, String url, int timeout, int contentLength) { 100997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu super(proxy, url, timeout); 101997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 102997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 103997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 104997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * set the desired soapAction header field 105997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 106997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @param soapAction 107997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * the desired soapAction 108997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @param envelope 109997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * the envelope containing the information for the soap call. 110997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @throws IOException 111997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @throws XmlPullParserException 112997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 113997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public void call(String soapAction, SoapEnvelope envelope) throws IOException, 114997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu XmlPullParserException { 115997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 116997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu call(soapAction, envelope, null); 117997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 118997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 119997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 120997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 121997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * set the desired soapAction header field 122997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 123997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @param soapAction 124997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * the desired soapAction 125997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @param envelope 126997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * the envelope containing the information for the soap call. 127997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @param headers 128997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * a list of HeaderProperties to be http header properties when establishing the connection 129997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 130997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @return <code>CookieJar</code> with any cookies sent by the server 131997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @throws IOException 132997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @throws XmlPullParserException 133997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 134997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public List call(String soapAction, SoapEnvelope envelope, List headers) 135997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu throws IOException, XmlPullParserException { 136997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 137997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu if (soapAction == null) { 138997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu soapAction = "\"\""; 139997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 140997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 141997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu System.out.println("call action:" + soapAction); 142997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu byte[] requestData = createRequestData(envelope, "UTF-8"); 143997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 144997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu if (requestData != null) { 145997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu requestDump = debug ? new String(requestData) : null; 146997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 147997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu else { 148997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu requestDump = null; 149997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 150997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu responseDump = null; 151997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 152997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu System.out.println("requestDump:" + requestDump); 153997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu ServiceConnection connection = getServiceConnection(); 154997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu System.out.println("connection:" + connection); 155997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 156997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu connection.setRequestProperty("User-Agent", USER_AGENT); 157997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu // SOAPAction is not a valid header for VER12 so do not add 158997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu // it 159997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu // @see "http://code.google.com/p/ksoap2-android/issues/detail?id=67 160997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu System.out.println("envelope:" + envelope); 161997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu if (envelope != null) { 162997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu if (envelope.version != SoapSerializationEnvelope.VER12) { 163997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu connection.setRequestProperty("SOAPAction", soapAction); 164997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 165997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 166997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu if (envelope.version == SoapSerializationEnvelope.VER12) { 167997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu connection.setRequestProperty("Content-Type", CONTENT_TYPE_SOAP_XML_CHARSET_UTF_8); 168997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } else { 169997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu connection.setRequestProperty("Content-Type", CONTENT_TYPE_XML_CHARSET_UTF_8); 170997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 171997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 172997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu connection.setRequestProperty("Connection", "close"); 173997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu connection.setRequestProperty("Accept-Encoding", "gzip"); 174997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu connection.setRequestProperty("Content-Length", "" + requestData.length); 175997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 176997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu //M: Retry for HTTP Authentication 177997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu //connection.setFixedLengthStreamingMode(requestData.length); 178997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 179997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu // Pass the headers provided by the user along with the call 180997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu if (headers != null) { 181997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu for (int i = 0; i < headers.size(); i++) { 182997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu HeaderProperty hp = (HeaderProperty) headers.get(i); 183997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu connection.setRequestProperty(hp.getKey(), hp.getValue()); 184997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 185997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 186997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 187997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu connection.setRequestMethod("POST"); 188997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 189997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 190997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu else { 191997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu connection.setRequestProperty("Connection", "close"); 192997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu connection.setRequestProperty("Accept-Encoding", "gzip"); 193997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu connection.setRequestMethod("GET"); 194997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 195997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 196997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu if (requestData != null) { 197997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu OutputStream os = connection.openOutputStream(); 198997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 199997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu os.write(requestData, 0, requestData.length); 200997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu os.flush(); 201997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu os.close(); 202997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu requestData = null; 203997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 204997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu InputStream is; 205997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu List retHeaders = null; 206997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu boolean gZippedContent = false; 207997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu boolean bcaCert = false; 208997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 209997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu try { 210997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu retHeaders = connection.getResponseProperties(); 211997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu System.out.println("[HttpTransportSE] retHeaders = " + retHeaders); 212997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu for (int i = 0; i < retHeaders.size(); i++) { 213997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu HeaderProperty hp = (HeaderProperty) retHeaders.get(i); 214997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu // HTTP response code has null key 215997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu if (null == hp.getKey()) { 216997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu continue; 217997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 218997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu // ignoring case since users found that all smaller case is used on some server 219997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu // and even if it is wrong according to spec, we rather have it work.. 220997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu if (hp.getKey().equalsIgnoreCase("Content-Encoding") 221997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu && hp.getValue().equalsIgnoreCase("gzip")) { 222997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu gZippedContent = true; 223997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 224997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 225997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu if (gZippedContent) { 226997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu is = getUnZippedInputStream(connection.openInputStream()); 227997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } else { 228997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu is = connection.openInputStream(); 229997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 230997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } catch (IOException e) { 231997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu if (gZippedContent) { 232997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu is = getUnZippedInputStream(connection.getErrorStream()); 233997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } else { 234997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu is = connection.getErrorStream(); 235997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 236997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 237997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu if (is == null) { 238997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu connection.disconnect(); 239997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu throw (e); 240997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 241997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 242997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 243997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu if (debug) { 244997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu ByteArrayOutputStream bos = new ByteArrayOutputStream(); 245997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu byte[] buf = new byte[8192]; 246997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 247997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu while (true) { 248997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu int rd = is.read(buf, 0, 8192); 249997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu if (rd == -1) { 250997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu break; 251997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 252997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu bos.write(buf, 0, rd); 253997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 254997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 255997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu bos.flush(); 256997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu buf = bos.toByteArray(); 257997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 258997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu responseDump = new String(buf); 259997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 260997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu System.out.println("responseDump:" + responseDump); 261997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu is.close(); 262997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu is = new ByteArrayInputStream(buf); 263997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 264997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 265997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu if (envelope != null) { 266997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu parseResponse(envelope, is); 267997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 268997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 269997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu return retHeaders; 270997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 271997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 272997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu private InputStream getUnZippedInputStream(InputStream inputStream) throws IOException { 273997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /* workaround for Android 2.3 274997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu (see http://stackoverflow.com/questions/5131016/) 275997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 276997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu try { 277997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu return (GZIPInputStream) inputStream; 278997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } catch (ClassCastException e) { 279997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu return new GZIPInputStream(inputStream); 280997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 281997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 282997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 283997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public ServiceConnection getServiceConnection() throws IOException { 284997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu if (serviceConnection == null) { 285997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu System.out.println("new ServiceConnectionSE:" + proxy + " " + url + " " + timeout); 286997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu serviceConnection = new ServiceConnectionSE(proxy, url, timeout); 287997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 288997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu return serviceConnection; 289997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 290997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 291997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public String getHost() { 292997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 293997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu String retVal = null; 294997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 295997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu try { 296997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu retVal = new URL(url).getHost(); 297997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } catch (MalformedURLException e) { 298997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu e.printStackTrace(); 299997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 300997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 301997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu return retVal; 302997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 303997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 304997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public int getPort() { 305997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 306997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu int retVal = -1; 307997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 308997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu try { 309997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu retVal = new URL(url).getPort(); 310997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } catch (MalformedURLException e) { 311997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu e.printStackTrace(); 312997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 313997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 314997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu return retVal; 315997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 316997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 317997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public String getPath() { 318997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 319997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu String retVal = null; 320997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 321997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu try { 322997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu retVal = new URL(url).getPath(); 323997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } catch (MalformedURLException e) { 324997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu e.printStackTrace(); 325997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 326997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 327997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu return retVal; 328997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 329997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 330997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public String getQuery() { 331997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 332997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu String retVal = null; 333997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 334997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu try { 335997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu retVal = new URL(url).getQuery(); 336997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } catch (MalformedURLException e) { 337997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu e.printStackTrace(); 338997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 339997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 340997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu return retVal; 341997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 342997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 343997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 344997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @hide 345997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 346997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public byte[] getRequestData(SoapEnvelope envelope, String encoding) { 347997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu try { 348997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu return createRequestData(envelope, encoding); 349997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } catch (Exception e) { 350997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu e.printStackTrace(); 351997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 352997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 353997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu return null; 354997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 355997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu} 356