diff --git a/examples/wservice/SOAPClient4XG.java b/examples/wservice/SOAPClient4XG.java
new file mode 100644
index 0000000000000000000000000000000000000000..eef383b5d6e0c85b544d3382b9e5ccc89ebe2f65
--- /dev/null
+++ b/examples/wservice/SOAPClient4XG.java
@@ -0,0 +1,106 @@
+/** 
+ * SOAPClient4XG. Read the SOAP envelope file passed as the second
+ * parameter, pass it to the SOAP endpoint passed as the first parameter, and
+ * print out the SOAP envelope passed as a response.  with help from Michael
+ * Brennan 03/09/01
+ * 
+ * java SOAPClient4XG http://services.xmethods.net:80/soap/servlet/rpcrouter weatherreq.xml
+ *
+ * @author  Bob DuCharme
+ * @version 1.1
+ * @param   SOAPUrl      URL of SOAP Endpoint to send request.
+ * @param   xmlFile2Send A file with an XML document of the request.  
+ *
+ * 5/23/01 revision: SOAPAction added
+*/
+
+import java.io.*;
+import java.net.*;
+
+public class SOAPClient4XG {
+    public static void main(String[] args) throws Exception {
+
+        if (args.length  < 2) {
+            System.err.println("Usage:  java SOAPClient4XG " +
+                               "http://soapURL soapEnvelopefile.xml" +
+                               " [SOAPAction]");
+				System.err.println("SOAPAction is optional.");
+            System.exit(1);
+        }
+
+        String SOAPUrl      = args[0];
+        String xmlFile2Send = args[1];
+
+		  String SOAPAction = "";
+        if (args.length  > 2) 
+				SOAPAction = args[2];
+				
+        // Create the connection where we're going to send the file.
+        URL url = new URL(SOAPUrl);
+        URLConnection connection = url.openConnection();
+        HttpURLConnection httpConn = (HttpURLConnection) connection;
+
+        // Open the input file. After we copy it to a byte array, we can see
+        // how big it is so that we can set the HTTP Cotent-Length
+        // property. (See complete e-mail below for more on this.)
+
+        FileInputStream fin = new FileInputStream(xmlFile2Send);
+
+        ByteArrayOutputStream bout = new ByteArrayOutputStream();
+    
+        // Copy the SOAP file to the open connection.
+        copy(fin,bout);
+        fin.close();
+
+        byte[] b = bout.toByteArray();
+
+        // Set the appropriate HTTP parameters.
+        httpConn.setRequestProperty( "Content-Length",
+                                     String.valueOf( b.length ) );
+        httpConn.setRequestProperty("Content-Type","text/xml; charset=utf-8");
+		  httpConn.setRequestProperty("SOAPAction",SOAPAction);
+        httpConn.setRequestMethod( "POST" );
+        httpConn.setDoOutput(true);
+        httpConn.setDoInput(true);
+
+        // Everything's set up; send the XML that was read in to b.
+        OutputStream out = httpConn.getOutputStream();
+        out.write( b );    
+        out.close();
+
+        // Read the response and write it to standard out.
+
+        InputStreamReader isr =
+            new InputStreamReader(httpConn.getInputStream());
+        BufferedReader in = new BufferedReader(isr);
+
+        String inputLine;
+
+        while ((inputLine = in.readLine()) != null)
+            System.out.println(inputLine);
+
+        in.close();
+    }
+
+  // copy method from From E.R. Harold's book "Java I/O"
+  public static void copy(InputStream in, OutputStream out) 
+   throws IOException {
+
+    // do not allow other threads to read from the
+    // input or write to the output while copying is
+    // taking place
+
+    synchronized (in) {
+      synchronized (out) {
+
+        byte[] buffer = new byte[256];
+        while (true) {
+          int bytesRead = in.read(buffer);
+          if (bytesRead == -1) break;
+          out.write(buffer, 0, bytesRead);
+        }
+      }
+    }
+  } 
+}
+