Cxf和Axis使用https进行通信的笔记示例

Java WebService实战:从HelloWorld到WSDL接口开发与客户端调用详解 WebService作为一种基于SOAP协议和WSDL描述的标准化服务接口技术,其核心价值在于实现跨平台、跨语言的异构系统间可靠通信。其工作原理是通过XML格式的SOAP消息在HTTP等协议上传输,并由WSDL文件明确定义服务端点、操作及数据结构,形成机器可读的契约。在Java生态中,JAX-WS标准与Apache CXF框架的结合,为构建高互操作性的企业级服务提供了强大支持。通过代码优先的开发模式,开发者可以快速定义服务接口并发布服务,而客户端则可通过动态调用、工具生成存根等多种方式实现集成。本文以经典的 阅读详情

1. Cxf使用https进行通信

1.1动态生成ws代理的工具类如下:

import org.apache.cxf.configuration.jsse.TLSClientParameters;
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.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import javax.security.cert.CertificateException;
import javax.security.cert.X509Certificate;


public class CXFUtil {
    protected static final Logger LOG = LoggerFactory.getLogger(CXFUtil.class);
    /**
     * 证书信任管理
     */
    private static X509TrustManager tm = new X509TrustManager() {
        public void checkClientTrusted(X509Certificate[] xcs, String string) throws CertificateException {
            //不检查
        }

        public void checkServerTrusted(X509Certificate[] xcs, String string) throws CertificateException {
            //不检查
        }
        @Override
        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return null;
        }

        @Override
        public void checkClientTrusted(java.security.cert.X509Certificate[] arg0, String arg1) throws java.security.cert.CertificateException {
            //不检查
        }

        @Override
        public void checkServerTrusted(java.security.cert.X509Certificate[] arg0, String arg1) throws java.security.cert.CertificateException {
            //不检查
        }
    };

    /**
     * 创建webservice代理
     *
     * @param clazz
     * @param wsdl
     * @return
     */
    public static <T> T lookUp(Class<T> clazz, String wsdl) {
        JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
        // 设定接口类
        factory.setServiceClass(clazz);
        factory.setAddress(wsdl);
        // 权限设置拦截器,会在请求发出时将token设置到header中
        // 添加权限设置拦截器
        return (T) factory.create();
    }


    /**
     * 在WebService客户端请求https时,忽略检查服务端证书是否是信任的
     *
     * @param obj
     * @author dongming 2017年3月9日14:58:05
     */
    public static void configureSSLOnTheClient(Object obj) {
        Client client = ClientProxy.getClient(obj);
        HTTPConduit httpConduit = (HTTPConduit) client.getConduit();
        try {
            TLSClientParameters tlsParams = new TLSClientParameters();
            tlsParams.setDisableCNCheck(true);
            tlsParams.setTrustManagers(new TrustManager[]{tm});
            httpConduit.setTlsClientParameters(tlsParams);
            LOG.info("Configure SSL On The Client Success");
        } catch (Exception e) {
            LOG.error("Set Trust Managers Error", e);
        }
    }
}


1.2 使用示例如下:

// IVMSWebService 是使用CXF工具生成的ws类的接口,ip也即wsdl地址
IVMSWebService service = CXFUtil.lookUp(IVMSWebService.class, ip); 

//忽略服务端证书检查 
CXFUtil.configureSSLOnTheClient(service);

2.1 AXIS使用https通信必须的工具类如下:

import java.io.IOException;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.net.UnknownHostException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.SocketFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import org.apache.commons.httpclient.ConnectTimeoutException;
import org.apache.commons.httpclient.HttpClientError;
import org.apache.commons.httpclient.params.HttpConnectionParams;
import org.apache.commons.httpclient.protocol.ProtocolSocketFactory;

public class SSLIgnoreErrorProtocolSocketFactory implements ProtocolSocketFactory{

	private SSLContext sslcontext = null;
	
	/**
	* 不进行证明书的验证
	* 
	* @return
	*/
	private static SSLContext createEasySSLContext() {
		try {
			SSLContext context = SSLContext.getInstance("SSL");
			context.init(null, new TrustManager[] { new X509TrustManager() {
				public void checkClientTrusted(X509Certificate[] arg0,
						String arg1) throws CertificateException {
				}
		
				public void checkServerTrusted(X509Certificate[] arg0,
						String arg1) throws CertificateException {
				}
		
				public X509Certificate[] getAcceptedIssuers() {
					return null;
				}
			} }, null);
			return context;
		} catch (Exception e) {
			throw new HttpClientError(e.toString());
		}
	}
	
	private SSLContext getSSLContext() {
		if (this.sslcontext == null) {
			this.sslcontext = createEasySSLContext();
		}
		return this.sslcontext;
	}
	
	@Override
	public Socket createSocket(String host, int port) throws IOException,
		UnknownHostException {
	    return getSSLContext().getSocketFactory().createSocket(host, port);
	}
	
	@Override
	public Socket createSocket(String host, int port, InetAddress clientHost,
		int clientPort) throws IOException, UnknownHostException {
	    return getSSLContext().getSocketFactory().createSocket(host, port,
			clientHost, clientPort);
	}
	
	@Override
	public Socket createSocket(String host, int port, InetAddress localAddress,
		int localPort, HttpConnectionParams params) throws IOException,
		UnknownHostException, ConnectTimeoutException {
		if (params == null) {
			throw new IllegalArgumentException("Parameters may not be null");
		}
		int timeout = params.getConnectionTimeout();
		SocketFactory socketfactory = getSSLContext().getSocketFactory();
		if (timeout == 0) {
			return socketfactory.createSocket(host, port, localAddress,
					localPort);
		} else {
			Socket socket = socketfactory.createSocket();
			SocketAddress localaddr = new InetSocketAddress(localAddress,
					localPort);
			SocketAddress remoteaddr = new InetSocketAddress(host, port);
			socket.bind(localaddr);
			socket.connect(remoteaddr, timeout);
			return socket;
		}
    }
}


2.2 axis使用https通信示例

//stub是使用命令WSDL2Java -uri http://10.66.71.127:28010/?wsdl  -p com.lhever.core  -d adb -s -o build\client 生成的ws代理类
 IVMSWebServiceImpServiceStub stub = new IVMSWebServiceImpServiceStub(ip);//ip也即wsdl地址
 if (ip.contains("https")) { //使用https通信的逻辑在这里
                SSLIgnoreErrorProtocolSocketFactory socketfactory = new SSLIgnoreErrorProtocolSocketFactory();
				
				//Protocol类似包org.apache.commons.httpclient.protocol
                Protocol protocol = new Protocol("https", socketfactory, 18080); //18080也即wsdl中的端口号,为了便于理解代码,此处写死
                stub._getServiceClient().getOptions().setProperty("CUSTOM_PROTOCOL_HANDLER", protocol);
            }
stub.submitJob(); // submitJob是该wsdl发布的一个服务	


Apache CXF Web服务开发框架详解 Apache CXF 是一个功能强大且灵活的开源 Web 服务框架,专为构建和集成基于标准的服务导向架构(SOA)而设计。它支持多种协议,包括 SOAP、WSDL 和 RESTful 服务,能够满足企业级应用在异构系统间通信的需求。在 SOA 架构中,服务是松耦合、可重用的业务功能单元。Apache CXF 提供了对 JAX-WS 和 JAX-RS 标准的良好支持,使得开发者能够轻松地创建、发布和调用服务。 阅读详情

相关推荐

Apache CXF框架全面解析与实战应用

Apache CXF 是一个功能强大且高度模块化的开源 Web 服务框架,支持 SOAP 和 RESTful 风格的服务开发。其核心基于可扩展的Bus架构,将组件如前端编程模型、绑定机制、消息传递和拦截器链统一管理,实现松耦合与高内聚的设计理念。// 简单示例:通过Spring配置启用CXF BusCXF 提供对 JAX-WS 和 JAX-RS 的完整支持,同时兼容多种传输协议(HTTP、JMS)与 WS-* 标准(如 WS-Security、WS-Addressing)。

weixin_35755434的博客 1130

springboot CXF 调用webservice客户端https+ip时跳过认证

JaxWsProxyFactoryBean

xiao466068504的博客 3307

Java WebService调用全攻略:6种方式详解与源码实战

WebService是一种基于标准Web协议实现跨平台、跨语言通信的分布式技术,其核心架构由服务提供者服务请求者和服务注册中心(如UDDI)构成,遵循松耦合、可重用的设计理念。通过SOAP或REST等协议封装操作,暴露标准化接口。当服务端抛出异常时,SOAP 协议会通过返回错误信息。JAX-WS 会将其映射为或更具体的自定义异常类。

weixin_42600407的博客 1477

真正的轻量级WebService框架——使用JAX-WS(JWS)发布WebService

以后测试时试试,这里先备份下: 原址:https://blog.csdn.net/rainyspring4540/article/details/81125731   WebService历来都很受重视,特别是Java阵营,WebService框架和技术层出不穷。知名的XFile(新的如CXF)、Axis1、Axis2等。   而Sun公司也不甘落后,从早期的JAX-RPC到现在成熟的、支...

rainyspring4540的专栏 922

Java WebService实践教程.zip

在Java中,定义和暴露业务逻辑为WebService服务涉及到几个关键步骤。首先,你需要定义一个Java类,它将作为服务的载体,然后使用特定的注解来暴露这个类的方法,使其成为可通过网络调用的服务方法。下面是一个简单的例子:@WebMethod@WebMethod在这个例子中,我们创建了一个名为的类,它包含两个方法:add和subtract。使用注解标记这个类为一个Web服务类,而注解声明了方法调用风格,这里采用的是远程过程调用(RPC)风格。

weixin_32661831的博客 627

java 调用https webservice实例及axis包

java 调用https发布的webservice接口实例及axis包及详细说明

java使用cxf调用https方式的webservice

以下内容转载之后亲自测试过,又整理添加了linux服务器下的配置过程: 转载地址 第一步:导入cxf必须的jar包,当前使用的cxf的版本为3.0.5 &lt;!-- 5.CXF --&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.cxf&lt;/groupId&gt; &lt;artifactId&gt;cxf-rt-fro...

Guoxianzhi的博客 5112

ESP8266红外控制美的空调:从协议解析到Home Assistant集成

红外遥控技术作为一种经典的非接触式控制方式,其原理是通过红外发光二极管发射经过特定频率调制的光信号来传递指令。在物联网和智能家居领域,利用微控制器如ESP8266模拟红外信号,成为将传统家电接入智能生态系统的关键技术。这项技术通过精准解析和生成符合设备厂商私有协议的红外编码,实现了对空调、电视等设备的远程与自动化控制,具有很高的实用价值。本文聚焦于美的空调的红外协议,深入探讨了其脉冲宽度调制(PWM)和全量式编码的特点,并提供了基于ESP8266的完整解决方案,包括硬件连接、库函数API详解以及如何将其无缝

weixin_30718391的博客 402

axis2调用https协议的接口,报错org.apache.axis2.AxisFault: Transport error: 550 Error:

最近项目上碰到一个https协议的接口,使用axis2客户端调用报错, org.apache.axis2.AxisFault: Transport error: 550 Error: 网上查了好多资料大多是导出证书设置以下代码,这种方式是全局的,搞了半天还没试成功,扑街了 System.setProperty("javax.net.ssl.trustStore","‪F:/xxx"); System.setProperty("javax.net.ssl.trustStorePassword"..

qq445829096的博客 1169

2015年全国大学生电子设计大赛综合测评题

2015年全国大学生电子设计大赛综合测评题 题目如下: 一、555产生可调方波 555定时器是一种集成电路芯片,常被用于定时器、脉冲产生器和振荡电路。555可被作为电路中的延时器件、触发器或起振元件。 555定时器可组成单稳态电路、多稳态电路和无稳态电路。产生方波其实就是制造一个无稳态电路。 555定时器的引脚功能: 其中: DIS引脚与OUT脚电平一致 TRIG: 当此引脚电压降至1/3VCC(或由控制端决定的阈值电压)时输出端给出高电平。 THR:当此引脚电压升至2/3VCC(或由控制端决定的阈值电压

m0_47066484的博客 3万+

MINI PCIE接口设计要点:

3.3Vaux(5pins):3.3V电源。PERST#信号通过外接复位电路,可实现模块复位。模块可以通过硬件方式或软件方式关闭射频通信(不包括 GNSS)。LED_WWAN#:(O)漏极开漏,低有效。:(I)低激活系统禁止射频信号(飞行模式),因此需加上拉。UIM_PWR (1 pin):(O)UIM的电源输出。SMB_DATA:SMBus2.0数据信号线。UIM_VPP:(O)A类设备的可变电源电压。SMB_CLK:SMBus2.0时钟信号线。UIM_RESET:(O)UIM的复位信号。

qq_40010777的博客 8246

axis2 RPCServiceClient访问https接口访问踩过的坑!!!java版本,证书生成,TLS版本问题........

前几天,项目需要调用第三放的https的Webservice接口,说起来都是一把辛酸泪!!! 简单的说下实现以及踩过的坑!!!!!!!!!!!!!!!! 第一步:项目为maven项目,使用axis2需要导入相应jar包,下面是所需要的maven依赖: <dependency> <groupId>org.apache.axis2</groupId> <artifactId>axis2</artifactId>

wangwei775257173的博客 4682

CosyVoice语音合成使用教程

CosyVoice是一款开源的语音合成工具,它基于深度学习模型,能够生成高度逼真的语音内容。该工具支持多种语言的语音生成,包括中文、英文、日文、粤语和韩语。CosyVoice的亮点在于它对生成语音情感和韵律的精细控制,通过富文本或自然语言输入,可以显著提升合成语音的情感表达能力。CosyVoice提供了多种预训练模型,用户可以根据需求选择合适的模型。:基底模型,适用于一般语音合成任务。:经过SFT微调的模型,适用于特定音色和情感的语音合成。:支持Instruct微调的模型,适用于自然语言控制的语音合成。

笔者从事电信媒体开发多年,愿意将多年的开发经验分享给同行 4445

Java搞WebService接口?Axis2这些包不装齐,就像没带枪上战场

摘要:本文探讨了现代分布式系统中的接口开发支撑体系,重点分析了基于Axis2框架的SOAP协议栈实现。Axis2作为一个成熟的SOAP开源引擎,支持WSDL、SOAP等关键标准,通过模块化架构提供企业级特性。文章对比了SOAP与REST的差异,指出二者在企业系统中的互补关系,并详细阐述了Axis2在XML处理、传输层抽象、消息流水线等方面的技术优势。文章强调,Axis2不仅是技术实现,更是SOA架构的核心支撑,其价值在于提供完整的服务开发生命周期支持,包括服务发布、代码生成、会话管理等能力,最终构建出具备企

不忘初心,方得始终。不管前路如何艰难,只要心中有梦想,就有力量。 91

光斑定位 - MATLAB实现

光斑定位是一种常见的图像处理任务,它涉及到在图像中准确定位光斑或亮点的位置。在本篇文章中,我们将使用MATLAB来实现光斑定位的算法,并提供相应的源代码。希望本文提供的MATLAB代码和步骤能够帮助您实现光斑定位任务。通过这些代码,您可以在MATLAB环境中轻松地定位光斑,并在图像上进行可视化展示。这样,我们就完成了光斑定位算法的MATLAB实现。通过以上步骤,我们可以得到一个在光斑位置上标记的图像,从而实现了光斑的准确定位。光斑定位 - MATLAB实现。

qq_39605374的博客 764

Open3D 合并两个点云【2025最新版】

两个点云中的数据连接,博客长期更新,本文最新更新时间为:2025年4月26日。

点云侠的博客 7435

WebService初识

Webservice是一个web服务体系,它为其他应用程序提供数据与服务,各应用程序通过网络协议和规定的一些标准数据格式来访问webservice。    webservice三种最普遍的实现方式是: 远程过程调用(RPC) ---- 远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。其中RMI是RPC在java环境的一种实现形式。面向服

重思考,勤总结 926

基于 ESP32 的智慧图书馆图书定位与借阅管理系统

本文设计的基于 ESP32 的智慧图书馆图书定位与借阅管理系统,以低成本、模块化、易部署为核心优势,融合 UWB 精准定位、RFID 自动识别、WiFi 无线通信技术,解决了传统图书馆的痛点问题。

weixin_42300449的博客 99

JAX-WS(JWS)

简述WebService历来都很受重视,特别是Java阵营,WebService框架和技术层出不穷。知名的XFile(新的如CXF)、Axis1、Axis2等。Web Services 发展至今已有两种形式:REST和SOAP。REST Web Services基于HTTP协议,SOAP Web Services支持多种传输协议:HTTP、SMTP、MIME等等。  本文主要介绍 SOAP web...

jiangshubian的博客 1187

6、 实时家禽健康识别与疾病检测系统的深入解析

本文深入解析了一种基于物联网的实时家禽健康识别与疾病检测系统,结合图像分析和音频分析技术,能够有效识别病鸡并防止疾病传播。文章详细介绍了系统的测试环境、数据采集与预处理方法、图像与音频分析流程,并对系统性能进行了全面评估。最后提出了未来改进方向,包括多模态融合、深度学习应用及实时性优化等。

weixin_28840811的博客 187

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

webService开发

webservice

chenglc1612的博客 697

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

webService 入门

Web service介绍 webservice是什么? web服务:服务器端整出一些资源可以让客户端应用访问(获取数据)一个跨语言、跨平台的规范(抽象)多个跨平台、跨语言的应用间通信整合的方案(实际)。。。 为什么要用Web service?  业务场景:  应用A: java写的,运行在windows平台下 List getAllUsers(); 应用B: c语言写的

weiguang111的博客 364

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Android 访问 web 服务方式

Web 服务架构 web service是一种服务(一种中间件技术),采用HTTP协议通信。通过web service可以将不同操作系统平台、不同语言、不同技术整合到一起。 RESTfulWeb 服务使用标准的 HTTP 方法 (GET/PUT/POST/DELETE) 来抽象所有 Web 系统的服务能力,而不同的是,SOAP应用都通过定义自己个性化的接口方法来...

dianxian1845的博客 219

Linux安装ActiveMQ

ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。支持来自Java,C,C ++,C#,Ruby,Perl,Python,PHP的各种跨语言客户端和协议。支持可插拔传输协议,例如in-VM,TCP,SSL,NIO,UDP,多播,JGroups和JXTA传输。完全支持JMS 1.1和J2EE 1.4,支持瞬态,持久,事务和XA消息。

yinjl123的博客 546

WebService详解

WebService 是一种跨编程语言和跨操作系统平台的远程调用技术。所谓跨编程语言和跨操作平台,就是说服务端程序采用 java 编写,客户端程序则可以采用其他编程语言编写,反之亦然!跨操作系统平台则是指服务端程序和客户端程序可以在不同的操作系统上WebService 是一种标准化的网络服务,允许不同平台和应用程序之间通过网络进行通信。它使得不同语言和平台的应用能够互操作。以下是 WebService 的详细介绍,包括基本概念、类型、工作原理以及应用场景。

刘皇叔说Java的博客 1953

使用 JAXB 框架定制 Web 服务行为

http://www.ibm.com/developerworks/cn/webservices/1003_sunzg_jaxb/ 简介: 本文从实践出发介绍如何使用 JAXB 框架来定制 Web 服务行为,对从 Java 到 XML schema 和从 XML schema 到 Java 的映射定制进行了详细的介绍。本文对计划在项目开发过程中使用 JAXB 框架开发 Web 服务的读者是一...

五谷杂粮 165
上一篇: 同时使用java和scala语言的maven项目pom文件示例
下一篇: AXIS2跳过HTTPS证书验证的几种方式
lhever_
博客等级 码龄14年 213粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值