1. 使用 JDK 自带的 wsimport 工具生成实体类

    1.1 创建身份验证文件(用于 Webservice 身份验证—auth.txt

    # 格式
    http://账号:密码@wsdl地址
    # 案例
    http://userName:password@192.168.1.3/ReportServer/reportservice2010.asmx?wsdl

    1.2 创建文件夹(用于保存生成的WebService实体类—wsdl

    1.3 在 JDK 安装目录下的 bin 目录下,输入 cmd 进入黑窗口

    1.4 输入命令,生成客户端实体类

    wsimport -s 实体类保存文件夹路径 -p 包路径 -encoding utf-8 -keep -verbose -Xauthfile 验权文件路径 wsdl地址
    # 案例
    wsimport -s d:\wsdl -p cn.lqdev.webservice -encoding utf-8 -keep -verbose -Xauthfile d:\auth.txt http://192.168.x.x/ReportServer/reportservice2010.asmx?wsdl

  2. 将实体类导入到项目中

    SOPA方式

    需要依赖

    <!--WebService 所需依赖-->
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web-services</artifactId>
    </dependency>

    创建身份验证类

    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;

    import java.net.Authenticator;
    import java.net.PasswordAuthentication;

    /**
    * <p>描述: [返回鉴权信息] </p>
    * <p>创建时间: 2020/4/7 </p>
    *
    * @author <a href="mailto:chenys@highzap.com" rel="nofollow">Chenys</a>
    * @version v1.0
    */
    @Component
    public class SsrsAuthenticator extends Authenticator {
    @Value("${report.ssrs.confirm.userName}")
    private String ssrsUserName;
    @Value("${report.ssrs.confirm.password}")
    private String ssrsPassword;

    /**
    * 描述: [重写父类方法 返回鉴权信息]
    *
    * @param
    * @return
    * @throws
    * @date 2020/4/7 16:29
    */
    @Override
    public PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication(ssrsUserName, ssrsPassword.toCharArray());
    }
    }
     

    创建配置类(返回SOAP接口的实现类

    import com.highzap.report.webservice.reportingservice.ReportingService2010;
    import com.highzap.report.webservice.reportingservice.ReportingService2010Soap;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;

    import java.net.Authenticator;
    import java.net.MalformedURLException;
    import java.net.URL;

    /**
    * <p>描述: [ReportingService 配置类] </p>
    * <p>创建时间: 2020/4/2 </p>
    *
    * @author <a href="mailto:chenys@highzap.com" rel="nofollow">Chenys</a>
    * @version v1.0
    */
    @Configuration
    public class SsrsConfig {

    @Autowired
    private SsrsAuthenticator ssrsAuthenticator;

    @Value("${report.ssrs.wsdl}")
    private String wsdl;

    /**
    * 描述: [获取一个实例对象]
    *
    * @param
    * @return reportingService2010Soap
    * @date 2020/4/3 14:55
    */
    @Bean
    public ReportingService2010Soap getReportingService2010Soap() throws MalformedURLException {
    // SOAP鉴权
    Authenticator.setDefault(ssrsAuthenticator);
    // 返回一个SOAP接口实现类
    return new ReportingService2010(new URL(wsdl)).getReportingService2010Soap();
    }
    }

    CXF 方式(两种方式效果一样

    需要依赖

    <!--WebService 所需依赖-->
    <dependency> </dependency>

创建配置类(返回SOAP接口的实现类

  
 /**
* <p>描述: [ReportingService 配置类] </p>
* <p>创建时间: 2020/4/2 </p>
*
* @author <a href="mailto:chenys@highzap.com" rel="nofollow">Chenys</a>
* @version v1.0
*/
@Configuration
public class SsrsConfig { @Value("${report.ssrs.wsdl}")
private String wsdl; /**
* 描述: [获取一个实例对象]
*
* @param
* @return reportingService2010Soap
* @date 2020/4/3 14:55
*/
@Bean
public ReportingService2010Soap getReportingService2010Soap() throws MalformedURLException {
// 代理工厂
JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();
// 认证用户、密码
jaxWsProxyFactoryBean.setUsername("userName");
jaxWsProxyFactoryBean.setPassword("password");
// 设置代理地址
jaxWsProxyFactoryBean.setAddress(wsdl);
// 设置接口类型
jaxWsProxyFactoryBean.setServiceClass(ReportingService2010Soap.class);
// 创建一个代理接口实现
ReportingService2010Soap us = (ReportingService2010Soap) jaxWsProxyFactoryBean.create();
return us;
}
}
  1. 调用

    package com.highzap.report.proxy.ssrs;

    import com.highzap.report.dto.ssrs.GetReportDTO;
    import com.highzap.report.dto.ssrs.UploadReportDTO;
    import com.highzap.report.exception.ReportBusinessException;
    import com.highzap.report.webservice.reportingservice.ArrayOfCatalogItem;
    import com.highzap.report.webservice.reportingservice.ArrayOfProperty;
    import com.highzap.report.webservice.reportingservice.CatalogItem;
    import com.highzap.report.webservice.reportingservice.ReportingService2010Soap;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Component;

    import java.util.List;

    /**
    * <p>描述: [封装 ReportingService 官方代理类] </p>
    * <p>创建时间: 2020/4/2 </p>
    *
    * @author <a href="mailto:chenys@highzap.com" rel="nofollow">Chenys</a>
    * @version v1.0
    */
    @Component
    public class SsrsProxy {
    @Autowired
    private ReportingService2010Soap reportingService2010Soap;

    private String notExist = "Unknown";

    /**
    * 描述: [报表上传]
    *
    * @param uploadReportDTO [上传报表方法 参数封装]
    * @return
    * @date 2020/4/2 15:02
    */
    public void uploadReport(UploadReportDTO uploadReportDTO) {
    reportingService2010Soap
    .createCatalogItem(
    uploadReportDTO.getItemType(),
    uploadReportDTO.getName(),
    uploadReportDTO.getParent(),
    uploadReportDTO.getOverwrite(),
    uploadReportDTO.getDefinition(),
    uploadReportDTO.getProperties(),
    uploadReportDTO.getItemInfo(),
    uploadReportDTO.getWarning());
    }

    }

常见问题

  1. 报错:401-鉴权失败(Authentication failure)—代码没有问题,部分环境运行报错;

    原因:JDK放置在了 C盘,导致JDK的安全策略,会禁止proxy使用用户名密码这种鉴权方式;

    解决办法:修改JDK路径下的文件(jdk1.8.0_111/jre/lib/net.properties)

  1. 报错信息:缺少xxxxImpl类

    报错原因:JDK版本问题

    解决办法:切换JDK版本为 JDK1.8

使用 SpringBoot 集成 WebService [需要身份验证]的更多相关文章

  1. WebService 之 身份验证

    在项目开发,我们经常会使用WebService,但在使用WebService时我们经常会考虑到了WebService是安全问题,很容易想到通过一组用户名与密码来防止非法用户的调用 . 一.Networ ...

  2. 在surging 微服务引擎下如何搭建webservice和身份验证

    一.前言 现实生产中,有一些比较老的系统对外提供的接口都是WebService,尤其是比较老的系统都是围绕ESB进行搭建,而对外提供就需要WebService ,为了更好完善其解决方案,故集成了web ...

  3. 调用webservice进行身份验证

    因为同事说在调用webservice的时候会弹出身份验证的窗口,直接调用会返回401,原因是站点部署的时候设置了身份验证(账号名称自己配置).因而在调用的时候需要加入身份验证的凭证. 至于如何获取身份 ...

  4. 为WebService添加身份验证的两种方法

    方法一:SoapHeader 辅助类:MySoapHeader //SoapHeader 添加引用 using System.Web.Services.Protocols; #region 配置登录标 ...

  5. springboot集成shiro实现身份认证

    github地址:https://github.com/peterowang/shiro pom文件 <dependencies> <dependency> <group ...

  6. SpringBoot 使用jwt进行身份验证

    这里只供参考,比较使用jwt方式进行身份验证感觉不好,最不行的就是不能退出 登陆时设定多长过期时间,只能等这个时间过了以后才算退出,服务端只能验证请求过来的token是否通过验证 Code: /** ...

  7. SpringBoot集成JWT实现token验证

    原文:https://www.jianshu.com/p/e88d3f8151db JWT官网: https://jwt.io/ JWT(Java版)的github地址:https://github. ...

  8. ASP.NET协作应用集成到trsids身份验证服务器的开发流程

    开发Actor协同模块: (参考TRSIDS4.0 协作应用集成手册[asp.net]) ASP.Net协作应用集成到IDS之前,需要开发Actor类实现协作应用回调接口中定义的本地登录.退出.用户信 ...

  9. SpringBoot 通过token进行身份验证,存储redis

    代码: public interface TokenManager { /** * 创建token * @param userInfo * @return */ String getToken(Use ...

  10. 在PHP应用中简化OAuth2.0身份验证集成:OAuth 2.0 Client

    在PHP应用中简化OAuth2.0身份验证集成:OAuth 2.0 Client   阅读目录 验证代码流程 Refreshing a Token Built-In Providers 这个包能够让你 ...

随机推荐

  1. Linux-两台Linux服务器间设置共享文件夹(NFS服务器)

    一.环境信息服务器1:192.168.120.141        文件夹:/opt服务器2:192.168.120.142        文件夹:/opt将服务器1的/opt文件夹共享到服务器2的/ ...

  2. Redis 持久化——混合持久化

    1.Redis 持久化--混合持久化 RDB 和 AOF 持久化各有利弊,RDB 可能会导致一定时间内的数据丢失,而 AOF 由于文件较大则会影响 Redis 的启动速度,为了能同时使用 RDB 和 ...

  3. SpringMvc怎么样把数据带给页面

    例子. /** * SpringMVC除过在方法上传入原生的request和session外还能怎么样把数据带给页面 * * 1).可以在方法处传入Map.或者Model或者ModelMap. * 给 ...

  4. Launchpool名词解释

    # 一.什么是Launchpool Launchpool是一种加密货币领域的创新机制,通常由交易所或DeFi平台提供,允许用户通过质押(staking)或锁定特定代币来获得新项目的代币奖励. ## L ...

  5. 华为od机考2025A卷真题 -查找接口成功率最优时间段

    题目描述与示例 题目描述 服务之间交换的接口成功率作为服务调用关键质量特性,某个时间段内的接口失败率使用一个数组表示,数组中每个元素都是单位时间内失败率数值,数组中的数值为 0~100 的整数,给定一 ...

  6. python,设置windows系统时间

    老笔记本纽扣电池没电了,每次拔掉电源再重新开机时间就对不上了,然后写个python脚本开机后执行对时吧 脚本直接网上复制的,比较简单,貌似时访问www.baidu.com获取头信息里的时间,然后设置为 ...

  7. windows10环境下,remote wsl链接wsl ubuntu使用ubuntu 开发环境,报错:VS Code server for WSL closed unexpectedly check WSL terminal for more details

    报错提示这样 在windows的vscode里面的关键报错信息是:vscode wsl Unable to detect if server is already installed: Error: ...

  8. 康谋分享 | 3DGS:革新自动驾驶仿真场景重建的关键技术

    登录后复制 随着自动驾驶技术的迅猛发展,构建高保真.动态的仿真场景成为了行业的迫切需求.传统的三维重建方法在处理复杂场景时常常面临效率和精度的挑战.在此背景下,3D高斯点阵渲染(3DGS)技术应运而生 ...

  9. 100行代码实现Chat2XX(DB/ Web/ KnowledgeBase)

    这两年基于大模型的应用可谓五花八门,Chat2DB,Chat2Web,Chat2KnowledgeBase,Chat2XXX等等.本质上都是以自然语言作为系统输入,通过各种手段获取额外的上下文信息,然 ...

  10. Git错误,fatal: The current branch master has no upstream branch. To push the current branch and set the remote as upstream

    问题:当我执行git push命令的时候,报错如下: fatal: The current branch master has no upstream branch. To push the curr ...