1997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu/** 2997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Copyright (c) 2006, James Seigel, Calgary, AB., Canada 3997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Copyright (c) 2003,2004, Stefan Haustein, Oberhausen, Rhld., Germany 4997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 5997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Permission is hereby granted, free of charge, to any person obtaining a copy 6997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * of this software and associated documentation files (the "Software"), to deal 7997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * in the Software without restriction, including without limitation the rights 8997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * to use, copy, modify, merge, publish, distribute, sublicense, and/or 9997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * sell copies of the Software, and to permit persons to whom the Software is 10997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * furnished to do so, subject to the following conditions: 11997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 12997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * The above copyright notice and this permission notice shall be included in 13997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * all copies or substantial portions of the Software. 14997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 15997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 21997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * IN THE SOFTWARE. 22997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 23997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 24997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yupackage org.ksoap2.transport; 25997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 26997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport java.util.List; 27997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport java.io.*; 28997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport java.net.Proxy; 29997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 30997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport org.ksoap2.*; 31997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport org.kxml2.io.*; 32997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport org.xmlpull.v1.*; 33997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 34997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu/** 35997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Abstract class which holds common methods and members that are used by the 36997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * transport layers. This class encapsulates the serialization and 37997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * deserialization of the soap messages, leaving the basic communication 38997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * routines to the subclasses. 39997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 40997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuabstract public class Transport { 41997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 42997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 43997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Added to enable web service interactions on the emulator 44997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * to be debugged with Fiddler2 (Windows) but provides utility 45997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * for other proxy requirements. 46997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 47997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu protected Proxy proxy; 48997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu protected String url; 49997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu protected int timeout = ServiceConnection.DEFAULT_TIMEOUT; 50997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** Set to true if debugging */ 51997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public boolean debug = true; 52997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** String dump of request for debugging. */ 53997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public String requestDump; 54997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** String dump of response for debugging */ 55997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public String responseDump; 56997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu private String xmlVersionTag = ""; 57997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 58997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu protected static final String CONTENT_TYPE_XML_CHARSET_UTF_8 = "text/xml;charset=utf-8"; 59997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu protected static final String CONTENT_TYPE_SOAP_XML_CHARSET_UTF_8 = "application/soap+xml;charset=utf-8"; 60997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu protected static final String USER_AGENT = "ksoap2-android/2.6.0+"; 61997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 62997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu private int bufferLength = ServiceConnection.DEFAULT_BUFFER_SIZE; 63997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 64997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public Transport() { 65997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 66997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 67997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public Transport(String url) { 68997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this(null, url); 69997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 70997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 71997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public Transport(String url, int timeout) { 72997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.url = url; 73997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.timeout = timeout; 74997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 75997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 76997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public Transport(String url, int timeout, int bufferLength) { 77997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.url = url; 78997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.timeout = timeout; 79997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.bufferLength = bufferLength; 80997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 81997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 82997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 83997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Construct the transport object 84997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 85997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @param proxy Specifies the proxy server to use for 86997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * accessing the web service or <code>null</code> if a direct connection is available 87997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @param url Specifies the web service url 88997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 89997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 90997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public Transport(Proxy proxy, String url) { 91997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.proxy = proxy; 92997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.url = url; 93997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 94997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 95997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public Transport(Proxy proxy, String url, int timeout) { 96997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.proxy = proxy; 97997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.url = url; 98997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.timeout = timeout; 99997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 100997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 101997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public Transport(Proxy proxy, String url, int timeout, int bufferLength) { 102997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.proxy = proxy; 103997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.url = url; 104997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.timeout = timeout; 105997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.bufferLength = bufferLength; 106997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 107997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 108997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 109997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Sets up the parsing to hand over to the envelope to deserialize. 110997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 111997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu protected void parseResponse(SoapEnvelope envelope, InputStream is) 112997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu throws XmlPullParserException, IOException { 113997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu XmlPullParser xp = new KXmlParser(); 114997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu xp.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true); 115997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu xp.setInput(is, null); 116997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu envelope.parse(xp); 117997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 118997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 119997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 120997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Serializes the request. 121997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 122997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu protected byte[] createRequestData(SoapEnvelope envelope, String encoding) throws IOException { 123997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu System.out.println("createRequestData"); 124997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu ByteArrayOutputStream bos = new ByteArrayOutputStream(bufferLength); 125997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu byte result[] = null; 126997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu bos.write(xmlVersionTag.getBytes()); 127997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu System.out.println("bos.write"); 128997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu XmlSerializer xw = new KXmlSerializer(); 129997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu System.out.println("new KXmlSerializer"); 130997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu xw.setOutput(bos, encoding); 131997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu System.out.println("xw.setOutput"); 132997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu envelope.write(xw); 133997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu System.out.println("envelope.write"); 134997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu xw.flush(); 135997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu bos.write('\r'); 136997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu bos.write('\n'); 137997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu bos.flush(); 138997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu result = bos.toByteArray(); 139997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu xw = null; 140997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu bos = null; 141997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu System.out.println("createRequestData end"); 142997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu return result; 143997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 144997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 145997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 146997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Serializes the request. 147997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 148997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu protected byte[] createRequestData(SoapEnvelope envelope) throws IOException { 149997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu return createRequestData(envelope, null); 150997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 151997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 152997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 153997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Set the target url. 154997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 155997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @param url 156997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * the target url. 157997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 158997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public void setUrl(String url) { 159997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.url = url; 160997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 161997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 162997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 163997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Sets the version tag for the outgoing soap call. Example <?xml 164997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * version=\"1.0\" encoding=\"UTF-8\"?> 165997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 166997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @param tag 167997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * the xml string to set at the top of the soap message. 168997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 169997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public void setXmlVersionTag(String tag) { 170997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu xmlVersionTag = tag; 171997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 172997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 173997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 174997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Attempts to reset the connection. 175997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 176997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public void reset() { 177997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 178997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 179997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 180997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Perform a soap call with a given namespace and the given envelope providing 181997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * any extra headers that the user requires such as cookies. Headers that are 182997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * returned by the web service will be returned to the caller in the form of a 183997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * <code>List</code> of <code>HeaderProperty</code> instances. 184997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 185997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @param targetNamespace 186997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * the namespace with which to perform the call in. 187997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @param envelope 188997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * the envelope the contains the information for the call. 189997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @param headers 190997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * <code>List</code> of <code>HeaderProperty</code> headers to send with the SOAP request. 191997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 192997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @return Headers returned by the web service as a <code>List</code> of 193997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * <code>HeaderProperty</code> instances. 194997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 195997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu abstract public List call(String targetNamespace, SoapEnvelope envelope, List headers) 196997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu throws IOException, XmlPullParserException; 197997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 198997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 199997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Perform a soap call with a given namespace and the given envelope. 200997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 201997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @param targetNamespace 202997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * the namespace with which to perform the call in. 203997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @param envelope 204997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * the envelope the contains the information for the call. 205997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 206997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public void call(String targetNamespace, SoapEnvelope envelope) throws IOException, 207997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu XmlPullParserException { 208997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu call(targetNamespace, envelope, null); 209997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 210997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 211997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 212997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Return the name of the host that is specified as the web service target 213997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 214997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @return Host name 215997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 216997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu abstract public String getHost(); 217997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 218997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 219997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Return the port number of the host that is specified as the web service target 220997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 221997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @return Port number 222997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 223997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu abstract public int getPort(); 224997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 225997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 226997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Return the path to the web service target 227997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 228997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @return The URL's path 229997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 230997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu abstract public String getPath(); 231997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 232997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu abstract public ServiceConnection getServiceConnection() throws IOException; 233997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu} 234