axis客户端 调用CFX框架服务端

/**
	 * 连接 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的理解还不够深刻,希望有这方面经验的朋友指点一二。

如果上面的阐述不够清楚可以参考另一篇博文: http://t22011787.iteye.com/blog/1144662

猜你喜欢

转载自623deyingxiong.iteye.com/blog/1754213