首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >JaxWsProxyFactoryBean调用WebService实例[通俗易懂]

JaxWsProxyFactoryBean调用WebService实例[通俗易懂]

作者头像
全栈程序员站长
发布2022-09-13 20:42:14
发布2022-09-13 20:42:14
2.5K0
举报

大家好,又见面了,我是你们的朋友全栈君。

WebServiceUtils 工具类
代码语言:javascript
复制
package xxxx;
import java.util.ResourceBundle;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.frontend.ClientProxy;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.transport.http.HTTPConduit;
import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
import org.springframework.stereotype.Service;
@Service
public class WebServiceUtils {
	public static final int CXF_CLIENT_CONNECT_TIMEOUT = 30 * 1000;
	public static final int CXF_CLIENT_RECEIVE_TIMEOUT = 30 * 1000;
	/**
	 * 
	 * @param clazz
	 * @param paraName
	 * @param timeout
	 * @return
	 */
	public <T> T getWebService(Class<T> clazz, String paraName, Integer... timeout) {

		ResourceBundle dBResources = ResourceBundle.getBundle("application-config");
		String url = dBResources.getString(paraName);

		if (timeout == null || timeout.length == 0) {
			return getWebServiceByUrl(clazz, url);
		} else if (timeout.length == 1) {
			return getWebServiceByUrl(clazz, url, timeout[0], timeout[0]);
		} else {
			return getWebServiceByUrl(clazz, url, timeout[0], timeout[1]);
		}
	}

	public <T> T getWebServiceByUrl(Class<T> clazz, String url) {
		return getWebServiceByUrl(clazz, url, CXF_CLIENT_CONNECT_TIMEOUT, CXF_CLIENT_RECEIVE_TIMEOUT);
	}

	private <T> T getWebServiceByUrl(Class<T> clazz, String url, Integer connetTimeout, Integer receiveTimeout) {
		// 用于创建JAX-WS代理的工厂,此类提供对用于设置代理的内部属性的访问。使用它可以提供比标准JAX-WS API更多的控制。
		JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
		factory.setServiceClass(clazz);
		factory.setAddress(url);
		@SuppressWarnings("unchecked")
		// 创建可用于进行远程调用的代理对象。
		T webService = (T) factory.create();

		// 设置接口 连接超时和请求超时
		// 通过代理对象获取本地客户端
		Client proxy = ClientProxy.getClient(webService);
		// 通过本地客户端设置 网络策略配置
		HTTPConduit conduit = (HTTPConduit) proxy.getConduit();
		// 用于配置客户端HTTP端口的属性
		HTTPClientPolicy policy = new HTTPClientPolicy();
		// 超时控制 单位 : 毫秒
		policy.setConnectionTimeout(connetTimeout);
		policy.setReceiveTimeout(receiveTimeout);
		conduit.setClient(policy);
		return webService;
	}

}
实际调用示例
代码语言:javascript
复制
String jsonoInfo = null;
try {
			jsonInfo = webServiceUtil.getWebService(GjxxWebService.class, 	
			"webService_url").gjglAccountqueryPersonFuzzyWs(zjhm, idType, pageNo, pageSize);
		} catch (WebServiceException se) {
	        	xxxxxxx....
		}

各参数名称等分析:

名称

描述

GjxxWebService

通过wsdl 生成的接口

webService_url

接口的url地址

gjglAccountqueryPersonFuzzyWs

接口中的某个方法

zjhm, idType, pageNo, pageSize

调用该接口所需要的参数

jsonInfo

调用该接口的返回值,据接口具体而定

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/162672.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • WebServiceUtils 工具类
  • 实际调用示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档