/*
* Copyright (c) 2002, 2003, 2004 Active Endpoints, Inc.
*
* This program is licensed under the terms of the GNU General Public License
* Version 2 (the "License") as published by the Free Software Foundation, and
* the ActiveBPEL Licensing Policies (the "Policies"). A copy of the License
* and the Policies were distributed with this program.
*
* The License is available at:
* http://www.gnu.org/copyleft/gpl.html
*
* The Policies are available at:
* http://www.activebpel.org/licensing/index.html
*
* Unless required by applicable law or agreed to in writing, this program is
* distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License and the Policies for
* specific language governing the use of this program.
*/
package org.activebpel.demo.client;
import org.activebpel.demo.Constants;
import org.activebpel.demo.loanProcessFault;
import org.activebpel.demo.util.RuntimeParams;
import java.math.BigInteger;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.AxisFault;
import javax.xml.rpc.ParameterMode;
/**
* A client that calls both the assessor and approver Web services directly
* and compares the returned values to the expected values defined in the
* config file.
*
* @author Jim Menard, jimm@activebpel.org
*/
public class WebServicesTestClient {
protected int numTests;
protected int numErrors;
/**
* Creates and runs a Web service test client that prints out a JUnit-like
* result message.
*/
public static void main(String[] args) {
try {
new WebServicesTestClient().run();
}
catch (Exception e) {
e.printStackTrace();
}
}
/**
* Calls two Web services and prints out a JUnit-like result message.
*/
public void run() throws Exception {
RuntimeParams rp = new RuntimeParams();
numTests = numErrors = 0;
testWebService(rp, "assessor");
testWebService(rp, "approver");
System.out.println();
System.out.println((numErrors == 0 ? "OK " : "ERRORS ")
+ numTests + " test" + (numTests == 1 ? "" : "s") + "; "
+ numErrors + " error" + (numErrors == 1 ? "" : "s"));
}
/**
* Calls a Web service and compares the returned result with the expected
* value found in the config file. If they are different, increments the
* error count and prints "E". If they are the same, prints ".".
*
* @param rp retrieves values from the config file
* @param serviceName the WSDL Web service name
* @param expectedAnswerXpathFragment the expected answer is found in
* the config file at /rundata/expectedAnswerXpathFragment
*/
protected void testWebService(RuntimeParams rp, String serviceName)
throws Exception
{
++numTests;
// Call Web service using RPC
Call call = createCall(rp, serviceName);
String result = null;
try {
result = (String)call.invoke(new Object[] {
rp.getText("/rundata/" + serviceName + "-test-client/firstName"),
rp.getText("/rundata/" + serviceName + "-test-client/name"),
new BigInteger(rp.getText("/rundata/" + serviceName
+ "-test-client/amount"))
});
}
catch (AxisFault af) {
if (loanProcessFault.hasMagicFaultErrorCode(af))
result = Constants.MAGIC_FAULT_STRING;
else
result = af.toString();
}
catch (Exception e) {
result = "unexpected exception seen: " + e.toString();
}
System.out.println(serviceName + ": result = " + result);
}
/**
* Creates and returns an RPC SOAP call. The call's parameter values are taken
* from the config file.
*
* @param rp retrieves values from the config file
* @param serviceName the WSDL Web service name
* @return an RPC SOAP call
*/
protected Call createCall(RuntimeParams rp, String serviceName)
throws Exception
{
Service service = new Service();
Call call = (Call)service.createCall();
String urlString = rp.getAttr("/rundata/" + serviceName + "-test-client",
"url");
call.setTargetEndpointAddress(new java.net.URL(urlString));
call.setOperationName(rp.getAttr("/rundata/" + serviceName + "-test-client",
"operation"));
call.addParameter("firstName", org.apache.axis.Constants.XSD_STRING,
ParameterMode.IN);
call.addParameter("name", org.apache.axis.Constants.XSD_STRING,
ParameterMode.IN);
call.addParameter("amount", org.apache.axis.Constants.XSD_INTEGER,
ParameterMode.IN);
call.setReturnType(org.apache.axis.Constants.XSD_STRING);
return call;
}
}