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

JaxWsProxyFactoryBean调用WebService实例[通俗易懂]WebServiceUtils工具类packagexxxx;importjava.util.ResourceBundle;importorg.apache.cxf.endpoint.Client;importorg.apache.cxf.frontend.ClientProxy;importorg.apache.cxf.jaxws.JaxWsProxyFactoryBean…

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

WebServiceUtils 工具类

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;
	}

}

实际调用示例

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.net/162672.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Vue常用指令(二)

    Vue常用指令(二)6、v-for基于源数据多次渲染元素或模板块。图示:代码:<body><div id=”app”> <p v-for=”(score, index) in scores”> 索引: {{index }} , 分数: {{score}} </p> <div v-for=”(d, ke…

    2022年6月13日
    23
  • Spring IOC 之解析 bean 标签:开启解析进程,BeanDefinition

    Spring IOC 之解析 bean 标签:开启解析进程,BeanDefinitionSpring IOC 之解析 bean 标签:开启解析进程,BeanDefinition

    2022年4月20日
    53
  • 深度学习—3.Pytorch基础

    深度学习—3.Pytorch基础

    2021年10月5日
    47
  • ScheduledExecutorService 使用

    ScheduledExecutorService 使用ScheduledExecutorService,我平时没有用过,他的最大优点除了线程池的特性以外,可以实现循环或延迟任务。ScheduledExecutorService,是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,也就是说,任务是并发执行,互不影响。需要注意,只有当调度任务来的时候,ScheduledExecutorService才会真正启动一个线程,其余时间ScheduledExecutorService都是出于轮询任务的状态。先来个简单的延迟任务调…

    2022年6月2日
    34
  • web端功能测试怎么测_web的主要功能是什么

    web端功能测试怎么测_web的主要功能是什么一、功能测试1.1链接测试链接是web应用系统的一个很重要的特征,主要是用于页面之间切换跳转,指导用户去一些不知道地址的页面的主要手段,链接测试一般关注三点:1)链接是否按照既定指示那样,确实链

    2022年8月1日
    9
  • 2022-Java面试宝典收藏版

    2022-Java面试宝典收藏版Java基础目录前言一、基础篇1.1.Java语言有哪些特点1.2.面向对象和面向过程的区别1.3.八种基本数据类型的大小,以及他们的封装类1.4.标识符的命名规则。1.5.instanceof关键字的作用1.6.Java自动装箱与拆箱1.7.重载和重写的区别1.8.equals与==的区别1.9.Hashcode的作用1.10.String、StringStringBuffer和StringBuilder的区别是什么?1.11.ArrayList和linkedLi

    2022年9月16日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号