ws 測試工程
public class ConfigBean {
private String queryClassName;
private String queryMethodName;
private List<String> queryParameterClassList;
private List<Object> queryParameterList;
private String queryAddress;
private String updateClassName;
private String updateMethodName;
private List<String> updateParameterClassList;
private List<Object> updateParameterList;
private String updateAddress;
private String resultClassName;
private String resultField;
private String expectValue;
private String waitTime;
public ConfigBean() {
super();
}
public ConfigBean(String queryClassName, String queryMethodName,
List<String> queryParameterClassList,
List<Object> queryParameterList, String queryAddress,
String updateClassName, String updateMethodName,
List<String> updateParameterClassList,
List<Object> updateParameterList, String updateAddress,
String resultClassName, String resultField, String expectValue,
String waitTime) {
super();
this.queryClassName = queryClassName;
this.queryMethodName = queryMethodName;
this.queryParameterClassList = queryParameterClassList;
this.queryParameterList = queryParameterList;
this.queryAddress = queryAddress;
this.updateClassName = updateClassName;
this.updateMethodName = updateMethodName;
this.updateParameterClassList = updateParameterClassList;
this.updateParameterList = updateParameterList;
this.updateAddress = updateAddress;
this.resultClassName = resultClassName;
this.resultField = resultField;
this.expectValue = expectValue;
this.waitTime = waitTime;
}
public String getQueryClassName() {
return queryClassName;
}
public void setQueryClassName(String queryClassName) {
this.queryClassName = queryClassName;
}
public String getQueryMethodName() {
return queryMethodName;
}
public void setQueryMethodName(String queryMethodName) {
this.queryMethodName = queryMethodName;
}
public List<String> getQueryParameterClassList() {
return queryParameterClassList;
}
public void setQueryParameterClassList(List<String> queryParameterClassList) {
this.queryParameterClassList = queryParameterClassList;
}
public List<Object> getQueryParameterList() {
return queryParameterList;
}
public void setQueryParameterList(List<Object> queryParameterList) {
this.queryParameterList = queryParameterList;
}
public String getQueryAddress() {
return queryAddress;
}
public void setQueryAddress(String queryAddress) {
this.queryAddress = queryAddress;
}
public String getUpdateClassName() {
return updateClassName;
}
public void setUpdateClassName(String updateClassName) {
this.updateClassName = updateClassName;
}
public String getUpdateMethodName() {
return updateMethodName;
}
public void setUpdateMethodName(String updateMethodName) {
this.updateMethodName = updateMethodName;
}
public List<String> getUpdateParameterClassList() {
return updateParameterClassList;
}
public void setUpdateParameterClassList(List<String> updateParameterClassList) {
this.updateParameterClassList = updateParameterClassList;
}
public List<Object> getUpdateParameterList() {
return updateParameterList;
}
public void setUpdateParameterList(List<Object> updateParameterList) {
this.updateParameterList = updateParameterList;
}
public String getUpdateAddress() {
return updateAddress;
}
public void setUpdateAddress(String updateAddress) {
this.updateAddress = updateAddress;
}
public String getResultClassName() {
return resultClassName;
}
public void setResultClassName(String resultClassName) {
this.resultClassName = resultClassName;
}
public String getResultField() {
return resultField;
}
public void setResultField(String resultField) {
this.resultField = resultField;
}
public String getExpectValue() {
return expectValue;
}
public void setExpectValue(String expectValue) {
this.expectValue = expectValue;
}
public String getWaitTime() {
return waitTime;
}
public void setWaitTime(String waitTime) {
this.waitTime = waitTime;
}
@Override
public String toString() {
return "ConfigBean [queryClassName=" + queryClassName
+ ", queryMethodName=" + queryMethodName
+ ", queryParameterClassList=" + queryParameterClassList
+ ", queryParameterList=" + queryParameterList
+ ", queryAddress=" + queryAddress + ", updateClassName="
+ updateClassName + ", updateMethodName=" + updateMethodName
+ ", updateParameterClassList=" + updateParameterClassList
+ ", updateParameterList=" + updateParameterList
+ ", updateAddress=" + updateAddress + ", resultClassName="
+ resultClassName + ", resultField=" + resultField
+ ", expectValue=" + expectValue + ", waitTime=" + waitTime
+ "]";
}
}
public class WSFactory {
/**
* get web service port
* @param address
* @param clazz
* @param username
* @param password
* @return
*/
public static Object getPort(String address,String clazz,String username,String password){
try {
/*String cerPath=WSFactory.class.getClassLoader().getResource("cacerts").getPath();
logger.debug("cerPath is :"+cerPath);
System.setProperty("javax.net.ssl.trustStore", cerPath);*/
JaxWsProxyFactoryBean clientFactory = new JaxWsProxyFactoryBean();
clientFactory.setAddress(address);
clientFactory.setServiceClass(Class.forName(clazz));
clientFactory.setUsername(username);
clientFactory.setPassword(password);
return clientFactory.create();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
}
public class TestWS {
private static final String file = "config.xml";
private static final String username = "username";
private static final String password = "password";
public static void main(String[] args) throws Exception {
// 1.
List<ConfigBean> configBeanList = readConfigBeanList();
// 2.
for (ConfigBean configBean : configBeanList) {
createTestThread(configBean);
}
}
private static List<ConfigBean> readConfigBeanList() {
InputStream is = TestWS.class.getClassLoader().getResourceAsStream(file);
XStream xStream = new XStream(new DomDriver());
xStream.alias("configs", List.class);
xStream.alias("config", ConfigBean.class);
xStream.alias("queryParameterClassList", List.class);
xStream.alias("String", String.class);
xStream.alias("int", int.class);
xStream.alias("queryParameterList", List.class);
xStream.alias("updateParameterClassList", List.class);
xStream.alias("updateParameterList", List.class);
return (List<ConfigBean>) xStream.fromXML(is);
}
private static void createTestThread(final ConfigBean configBean) {
new Thread(new Runnable() {
@Override
public void run() {
// 1. invoke query
Object queryResult = invokeMethod(configBean.getQueryClassName(),
configBean.getQueryMethodName(),
configBean.getQueryParameterClassList(),
configBean.getQueryParameterList(),
configBean.getQueryAddress());
System.out.println("queryResult : "+getResult(configBean,queryResult));
// 2. invoke update
Object updateResult = invokeMethod(configBean.getUpdateClassName(),
configBean.getUpdateMethodName(),
configBean.getUpdateParameterClassList(),
configBean.getUpdateParameterList(),
configBean.getUpdateAddress());
System.out.println("updateResult : "+updateResult);
// 3. wait
try {
new Thread().sleep(Integer.parseInt(configBean.getWaitTime()));
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 4. invoke query
Object queryAgainResult = invokeMethod(configBean.getQueryClassName(),
configBean.getQueryMethodName(),
configBean.getQueryParameterClassList(),
configBean.getQueryParameterList(),
configBean.getQueryAddress());
System.out.println("queryAgainResult : "+getResult(configBean,queryAgainResult));
System.out.println("compare : "+(getResult(configBean,queryAgainResult).equals(configBean.getExpectValue())));
}
}).start();
}
private static Object invokeMethod(String className, String methodName,
List<String> parameterClassList, List<Object> parameterList,
String address) {
try {
Class[] classArray = new Class[parameterClassList.size()];
int i = 0;
for (String parameterClass : parameterClassList) {
if(parameterClass.equals("int")){
classArray[i++] = int.class;
}else{
classArray[i++] = Class.forName(parameterClass);
}
}
Object[] parameters = new Object[parameterList.size()];
i = 0;
for (Object parameter : parameterList) {
parameters[i++] = parameter;
}
Class clazz = Class.forName(className);
Method method = clazz.getMethod(methodName, classArray);
return method.invoke(
WSFactory.getPort(address, className, username, password),
parameters);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
private static Object getResult(ConfigBean configBean,Object obj) {
try {
Class clazz=Class.forName(configBean.getResultClassName());
Field field=clazz.getDeclaredField(configBean.getResultField());
field.setAccessible(true);
return field.get(obj);
} catch (ClassNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<configs>
<config>
<queryClassName>xxx</queryClassName>
<queryMethodName>xxx</queryMethodName>
<queryParameterClassList>
<String>xxx</String>
<String>xxx</String>
</queryParameterClassList>
<queryParameterList>
<String>xxx</String>
<int>xxx</int>
</queryParameterList>
<queryAddress>xxx</queryAddress>
<updateClassName>xxx</updateClassName>
<updateMethodName>xxx</updateMethodName>
<updateParameterClassList>
<String>xxx</String>
<String>xxx</String>
<String>xxx</String>
</updateParameterClassList>
<updateParameterList>
<String>xxx</String>
<String>xxx</String>
<int>xxx</int>
</updateParameterList>
<updateAddress>xxx</updateAddress><resultClassName>xxx</resultClassName><resultField>xxx</resultField>
<expectValue>xxx</expectValue>
<waitTime>300</waitTime>
</config>
</configs>