001 package mazegen.java_client;
002
003 import java.io.BufferedReader;
004 import java.io.InputStreamReader;
005 import java.io.DataInputStream;
006 import java.io.IOException;
007 import java.io.*;
008 import java.rmi.RemoteException;
009
010 // proxy classes are located in the weblogic.jws.proxies package.
011 import weblogic.jws.proxies.*;
012
013 /**
014 * <p>This is an example of a web service client that uses the web service
015 * proxy generated by WebLogic Server. This example is a simple Java
016 * console application that exercises the MazeGenerator web service and
017 * displays mazes returned from the web service.</p>
018 *
019 * <p>See "MazeGenerator Sample" in the WebLogic Workshop documentation.</p>
020 *
021 * <p>This client accesses the web service via proxy classes found in
022 * SamplesApp/APP-INF/lib/MazeGenerator.jar. That JAR file is obtained by selecting
023 * the "Java Proxy" link on a web service's Test View Overview Page. If
024 * the web service is hosted locally, the URL of the Overview Page is:
025 * http://localhost:7001/samples/proxy/mazegen/MazeGenerator.jws</p>
026 */
027 public class MazeClient
028 {
029
030 private class InputParams
031 {
032 int rows;
033 int cols;
034
035 public InputParams()
036 {
037 rows = -1;
038 cols = -1;
039 }
040 }
041
042 /*
043 * <p>Declare the proxy objects. There is a main proxy object with the
044 * same name as the web service but with "_Impl" appended, then
045 * protocol-specific proxie classes that contain the actual method stubs
046 * for the web service's operations.</p>
047 *
048 * <p>This web service supports SOAP over HTTP, so it
049 * has a proxy with the name <web service>SOAP.</p>
050 */
051 MazeGenerator_Impl m_Proxy = null;
052 MazeGeneratorSoap m_ProxySoap = null;
053
054 /**
055 * Utility method that prints prompts to System.out and gets input
056 * values from System.in.
057 */
058 private InputParams getInputParams()
059 {
060 String input = null;
061 int rows = 0;
062 int columns = 0;
063
064 char [] charBuf = new char[255];
065 int charsRead = 0;
066
067 InputParams returnedParams = null;
068 InputParams params = new InputParams();
069
070 BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
071
072 System.out.print("Enter rows:");
073 try
074 {
075 input = stdin.readLine();
076 rows = Integer.parseInt(input);
077 }
078 catch (IOException ex)
079 {
080 ex.printStackTrace();
081 }
082 catch (NumberFormatException ex) {
083 String msg = "Number of rows must be a valid integer (entered value: '" + input + "')";
084 throw(new NumberFormatException(msg));
085 }
086 System.out.println(input);
087
088 params.rows = rows;
089
090 System.out.print("Enter columns:");
091 try
092 {
093 input = stdin.readLine();
094 columns = Integer.parseInt(input);
095 }
096 catch (IOException ex)
097 {
098 ex.printStackTrace();
099 }
100 catch (NumberFormatException ex) {
101 String msg = "Number of columns must be a valid integer (entered value: '" + input + "')";
102 throw(new NumberFormatException(msg));
103 }
104 System.out.println(input);
105
106 params.cols = columns;
107
108 if( params.rows > 0 && params.cols > 0 )
109 {
110 returnedParams = params;
111 }
112
113 return returnedParams;
114 }
115
116 /*
117 * Main work method. Loops forever (until invalid input), calling
118 * getInputParams to collect input (desired number of rows and
119 * columns) and then calling the web service to get a maze of the
120 * desired size.
121 */
122 private void run()
123 {
124 InputParams params;
125
126 try
127 {
128 /*
129 * Instantiate the main proxy class. The proxy class has the same name as the
130 * web service, with "_Impl" appended.
131 *
132 * Note that there is an alternative constructor in which you can pass the URL of
133 * the target service's WSDL (which is typically the URL of the service with ?WSDL
134 * appended). That technique is used for "dynamic" proxies. The static WSDL is
135 * already built into the generated proxy and will be used if the no-argument
136 * proxy constructor is used (as below). Using the dynamic form causes an extra
137 * hit on the server for every web service request submitted.
138 */
139 m_Proxy = new MazeGenerator_Impl();
140 }
141 catch (IOException ex)
142 {
143 System.out.println("Error getting proxy");
144 ex.printStackTrace();
145 }
146 /*
147 * Get the protocol-specific proxy class.
148 */
149 m_ProxySoap = m_Proxy.getMazeGeneratorSoap();
150
151 while(true)
152 {
153 // get the desired number of rows and columns
154 params = getInputParams();
155 if( params != null )
156 {
157 try
158 {
159 // invoke the web service to get the maze
160
161 String sMaze = m_ProxySoap.printRandomMaze(params.rows,
162 params.cols);
163
164 // print the response
165 System.out.println(sMaze);
166 }
167 catch (RemoteException ex)
168 {
169 System.out.println("Error invoking service via proxy");
170 ex.printStackTrace();
171 }
172 }
173 else
174 {
175 System.out.println("MazeClient: Invalid maze size parameters entered");
176 }
177 }
178
179 }
180
181 public static void main(String [] args)
182 {
183
184 MazeClient client = new MazeClient();
185 client.run();
186
187 return;
188 }
189 }
|