1997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu/* Copyright (c) 2003,2004, Stefan Haustein, Oberhausen, Rhld., Germany 2997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Copyright (c) 2006, James Seigel, Calgary, AB., Canada 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 Yupackage org.ksoap2.transport; 23997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 24997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport java.util.List; 25997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport java.io.*; 26997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 27997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu/** 28997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Interface to allow the abstraction of the raw transport information 29997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 30997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yupublic interface ServiceConnection { 31997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 32997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public static final int DEFAULT_TIMEOUT = 20000; // 20 seconds 33997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public static final int DEFAULT_BUFFER_SIZE = 256 * 1024; // 256 Kb 34997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 35997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 36997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Make an outgoing connection. 37997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 38997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @exception IOException 39997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 40997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public void connect() throws IOException; 41997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 42997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 43997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Disconnect from the outgoing connection 44997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 45997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @exception IOException 46997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 47997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public void disconnect() throws IOException; 48997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 49997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 50997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Returns to the caller all of the headers that were returned with the 51997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * response to the SOAP request. Primarily this gives the caller an 52997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * opportunity to save the cookies for later use. 53997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 54997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @return List of HeaderProperty instances that were returned as part of the http response as http header 55997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * properties 56997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 57997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @exception IOException 58997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 59997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public List getResponseProperties() throws IOException; 60997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 61997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 62997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Set properties on the outgoing connection. 63997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 64997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @param propertyName 65997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * the name of the property to set. For HTTP connections these 66997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * are the request properties in the HTTP Header. 67997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @param value 68997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * the string to set the property header to. 69997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @exception IOException 70997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 71997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public void setRequestProperty(String propertyName, String value) throws IOException; 72997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 73997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 74997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Sets how to make the requests. For HTTP this is typically POST or GET. 75997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 76997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @param requestMethodType 77997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * the type of request method to make the soap call with. 78997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @exception IOException 79997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 80997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public void setRequestMethod(String requestMethodType) throws IOException; 81997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 82997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 83997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * If the length of a HTTP request body is known ahead, sets fixed length 84997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * to enable streaming without buffering. Sets after connection will cause an exception. 85997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 86997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @param contentLength the fixed length of the HTTP request body 87997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @see http://developer.android.com/reference/java/net/HttpURLConnection.html 88997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu **/ 89997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public void setFixedLengthStreamingMode(int contentLength); 90997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 91997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 92997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Open and return the outputStream to the endpoint. 93997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 94997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @exception IOException 95997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @return the output stream to write the soap message to. 96997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 97997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public OutputStream openOutputStream() throws IOException; 98997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 99997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 100997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Opens and returns the inputstream from which to parse the result of the 101997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * soap call. 102997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 103997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @exception IOException 104997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @return the inputstream containing the xml to parse the result from the 105997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * call from. 106997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 107997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public InputStream openInputStream() throws IOException; 108997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 109997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 110997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @return the error stream for the call. 111997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 112997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public InputStream getErrorStream(); 113997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 114997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 115997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Return the name of the host that is specified as the web service target 116997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 117997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @return Host name 118997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 119997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu abstract public String getHost(); 120997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 121997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 122997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Return the port number of the host that is specified as the web service target 123997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 124997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @return Port number 125997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 126997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu abstract public int getPort(); 127997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 128997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 129997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Return the path to the web service target 130997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 131997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @return The URL's path 132997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 133997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu abstract public String getPath(); 134997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu} 135