/**
* 连接 webservice 服务器,调用指定方法。
*
* @param namespace
* @param endpoint
* @param function
* 接口方法名称
* @return boolean 是否连接成功
*/
private boolean connect(String namespace, String endpoint, String function,
List<String> paramNames) {
try {
// 连接WS服务器
call = (Call) service.createCall();
// 设置调用方法
call.setOperationName(new QName(namespace, function));
/**************************调用CFX框架时,这些代码是必须的****************************************/
for (String param : paramNames) {
call.addParameter(param,
org.apache.axis.encoding.XMLType.XSD_STRING,
javax.xml.rpc.ParameterMode.IN);// 操作的参数
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);// 设置返回类型
}
call.setUseSOAPAction(true);
/**************************调用CFX框架时,这些代码是必须的****************************************/
// call.setOperationName(function);
// 设置服务器地址
call.setTargetEndpointAddress(endpoint);
} catch (ServiceException ex) {
LOG.error("连接服务器(" + endpoint + ")失败", ex);
return false;
}
return true;
}
....
//连接服务端
this.connect(Config.server_namespace, Config.server_endpoint,
Commons.SERVICE_FUNC_NAME_GET, Arrays
.asList(new String[] { "arg0" }));//若对端服务端代码没有声明参数的名称,则默认名称是arg0,arg1...
注意上面的"调用CFX框架时,这些代码是必须的"代码块,因为同是Axis框架的客户端和服务端在通信时,很多默认的设置是相同的,所以无需对Call对象做多余的设置,而在调用.NET或CFX等框架时,就需要根据服务端框架的设置做相应的设置。
其实,既然SOAP协议是与技术框架无关的,那么可以直接通过wsdl就可以知道接口方法的参数返回值等等信息,然后定制相应的客户端。但是我的水平还有限,对SOAP的理解还不够深刻,希望有这方面经验的朋友指点一二。
如果上面的阐述不够清楚可以参考另一篇博文:[url]http://t22011787.iteye.com/blog/1144662[/url]