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