Java请求webservice踩过的坑

news2024/12/26 23:41:30

最近项目对接过程中,因为对方系统比较旧,我们和对方进行交互使用webservice方式进行,对方给出相关文档,

接口地址:http://ip:port/abc/def/xxxService?wsdl

接口名称:methodA

1-springboot配合CXF使用

由于接口的ip是内网地址,我们业务服务器出去,我们必须中转到一台可以打通内网ip的机器A上才能请求。首先我们使用内网穿透工具(ngfork),在A上部署一个中转应用。

大概流程如下:

 

Java核心代码如下:

pom引入依赖

  <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.1.RELEASE</version>
        <relativePath/>
    </parent>


<dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.18</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.8</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.sun.xml.ws/jaxws-ri -->
        <dependency>
            <groupId>com.sun.xml.ws</groupId>
            <artifactId>jaxws-ri</artifactId>
            <version>2.3.3</version>
            <type>pom</type>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>6.2.0.Final</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web-services -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web-services</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-spring-boot-starter-jaxws -->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
            <version>3.4.3</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-transports-http -->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>3.4.3</version>
        </dependency>


        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>2.0.30</version>
        </dependency>


    </dependencies>

核心java代码如下:

JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient("接口地址");
Object[] objects = client.invoke("接口名称", reqStr);

objects就是对方返回的结果。

这种情况直接使用ip,完全没有问题,如下使用域名会出现如下错误:

org.apache.cxf.interceptor.Fault: Response was of unexpected text/html ContentType.  Incoming portion of HTML stream: <html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx/1.22.1</center>
</body>
</html>

 

2-使用AXIS请求

上面使用frps进行时,使用域名会出现以上错误,我们更换一种请求方式,就可以获取到结果。方式二直接需要一台公网服务器部署frps,需要域名;然后在中转机上不是frpc客户端,配置相关内容,不需要部署一个服务,直接域名穿透过去。

pom依赖:

 <dependency>
            <groupId>org.apache.axis</groupId>
            <artifactId>axis</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.axis</groupId>
            <artifactId>axis-jaxrpc</artifactId>
            <version>1.4</version>
        </dependency>

        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>

        <dependency>
            <groupId>commons-discovery</groupId>
            <artifactId>commons-discovery</artifactId>
            <version>0.5</version>
        </dependency>

        <dependency>
            <groupId>wsdl4j</groupId>
            <artifactId>wsdl4j</artifactId>
            <version>1.5.2</version>
        </dependency>

核心java代码:

//服务地址
        String url = "https://xxx.com/abc/def/xxxService?wsdl";
        //命名空间
        String namespaceURI = XMLConstants.NULL_NS_URI;
        //方法名
        String method = "yourMethod";
        try {
            Service service = new Service();
            Call call = (Call) service.createCall();
            call.setTargetEndpointAddress(url);
            //设置要调用的方法
            call.setOperationName(new QName(namespaceURI, method));
            //设置要返回的数据类型
            call.setReturnType(new QName(namespaceURI, method), String.class);
            call.setUseSOAPAction(true);
            call.setSOAPActionURI(namespaceURI + method);
            //设置入参
            call.addParameter(new QName(namespaceURI, "params"), Constants.XSD_STRING, javax.xml.rpc.ParameterMode.IN);

            //调用方法并传递参数
            String resultStr = (String) call.invoke(new Object[]{"{\"name\":\"zhangsan\",\"pwd\":\"abc123456\"}"});
            System.out.println("服务调用结果:" + resultStr);
        } catch (Exception e) {
            e.printStackTrace();
        }

使用方式二就没有出现方式一的301错误。问题解决。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/913370.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智慧水务建设项目可研报告-222页【可研报告】

导读&#xff1a;原文《智慧水务建设项目可研报告-222页【可研报告】》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 部分内容&#xff1a; 业务需求分析 3.3.1业…

CentOS7中使用Docker进行MySQL主从复制【论文式教程】

1、安装Docker 卸载docker sudo yum remove docker*安装 yum-utils 工具集&#xff0c;它提供了一些额外的命令和功能&#xff0c;帮助你更好地管理 YUM 软件包管理器。其中包含了一个工具叫做 yum-config-manager&#xff0c;它用于管理 YUM 配置&#xff0c;包括软件仓库源…

计算机视觉:比SAM快50倍的分割一切视觉模型FastSAM

目录 引言 1 FastSAM介绍 1.1 FastSAM诞生 1.2 模型算法 1.3 实验结果 2 FastSAM运行环境构建 2.1 conda环境构建 2.2 运行环境安装 2.3 模型下载 3 FastSAM运行 3.1 命令行运行 3.1.1 Everything mode 3.1.2 Text prompt 3.1.3 Box prompt (xywh) 3.1.4 Points p…

Docker容器学习:部署安装Docker基础使用

目录 1、安装Docker-CE 1&#xff09;参考阿里云的yum安装 2&#xff09;二进制安装docker&#xff08;推荐、生产环境使用较多&#xff09; 3&#xff09;配置Docker镜像加速 2、下载系统镜像&#xff08;Ubuntu、 centos&#xff09; 1&#xff09;先查看我们所需的镜像…

如何通过人工智能和自动化提高供应链弹性?

全球供应链中的数字化转型已经引起了广泛关注&#xff0c;尽管在过去的十年中&#xff0c;这一话题被广泛讨论&#xff0c;但许多公司仍然对如何实现这一不明确的目标感到困惑。人们普遍认识到这种转变的重要性&#xff0c;而新冠疫情及其带来的巨大影响也为行业向数字化转型方…

数字生意,经九长兴 | 带您一起回顾秦丝9年成长历程

今年是秦丝科技成立的第9年&#xff0c;9年前我国90%以上的商家处于原始手工记账状态&#xff0c;急需SaaS软件实现数字化转型&#xff0c;高效管理门店&#xff0c;秦丝科技创始人主动扛起了帮中小商家数字化转型的重任。 经过9年的发展&#xff0c;秦丝目前已经成功帮助200万…

drools8尝试

drools7升级到drools8有很大很大的变更.几乎不能说是一个项目了. 或者说就是名字相同的不同项目, 初看下来变化是这样 两个最关键的东西都retired了 https://docs.drools.org/8.42.0.Final/drools-docs/drools/migration-guide/index.html business central变成了一个VS code…

回归预测 | MATLAB实现WOA-RF鲸鱼优化算法优化随机森林算法多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现WOA-RF鲸鱼优化算法优化随机森林算法多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现WOA-RF鲸鱼优化算法优化随机森林算法多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览…

【计算机网络】日志与守护进程

文章目录 日志日志的创建logmessage 函数日志左边部分实现日志右边部分实现 完整代码log.hpp(整体实现)err.hpp (错误信息枚举&#xff09; 守护进程PGID SID TTY 的介绍shell中控制进程组的方式结论 为什么要有守护进程存在&#xff1f;守护进程的创建使用守护进程的条件守护进…

centos7.6安装、卸载openssh

1.卸载openssh 执行 rpm -qa openssh*查看是否已经安装过了。 rpm -qa openssh* 依次卸载&#xff1a; yum remove openssh-server-7.4p1-23.el7_9.x86_64 yum remove openssh-7.4p1-23.el7_9.x86_64 或者使用&#xff1a;yum remove openssh-* 全部卸载掉 yum remove opens…

客户案例:中圣科技—CAC2.0防范盗号威胁,加固安全防线

客户背景 中圣科技&#xff08;江苏&#xff09;股份有限公司&#xff08;以下简称“中圣科技”&#xff09;&#xff0c;是一家以技术研发为驱动&#xff0c;以清洁能源核心成套装备和节能环保工程服务为支撑的科技创新型企业。其以南京为核心运营基地&#xff0c;与当地政府…

【云原生】3分钟快速在Kubernetes1.25部署Prometheus2.42+Grafana9.5.1+Alertmanager0.25

文章目录 1、简介2、GitHub地址3、环境信息4、安装5、访问Grafana1、简介 Prometheus-operator帮助我们快速创建Prometheus+Grafana+Alertmanager等服务,而kube-prometheus更加完整的帮助我们搭建全套监控体系,这包括部署多个 Prometheus 和 Alertmanager 实例, 指标导出器…

Ubuntu20 安装 libreoffice

1 更新apt-get sudo apt-get update2 安装jdk 查看jdk安装情况 Command java not found, but can be installed with:sudo apt install default-jre # version 2:1.11-72, or sudo apt install openjdk-11-jre-headless # version 11.0.138-0ubuntu1~20.04 sud…

发布 net 项目 到 Docker

背景 因为发布到 centOS8 使用 screen -S 可以&#xff0c;想开机自启 使用 nohup 命令有启动不起来。环境问题不好找&#xff0c;就想尝试用 docker 运行 步骤 在生成的 Dockerfile 文件里增加修改时区指令 因为我们用的都是北京时间所以 创建镜像的时候就调整好 #设置时间…

SQLSTATE[IMSSP]: The active result for the query contains no fields.

我的是SQL server 报错场景&#xff0c;代码&#xff1a; $psendmx_sql"SET IDENTITY_INSERT PSENDMX ON;INSERT INTO psendmx (DJBH,MIBH,MXBH,SPDM,GG1DM,GG2DM,SL,SL_2,CKJ,ZK,DJ,DJ_1,JE,HH) VALUES {$mx_values};SET IDENTITY_INSERT PSENDMX OFF;"; $a$db_er…

算法通关村第九关——透彻理解二分查找

1.前言 常见的查找算法有顺序查找、二分查找、插值查找、斐波那契查找、树表查找、分块查找、哈希查找等。如果进行归类&#xff0c;那么二分查找、插值查找&#xff08;一种查找算法&#xff09;以及斐波那契查找都可以归为插值查找&#xff08;大类&#xff09;。而插值查找…

macOS上编译obs-studio

前言 最近基于obs的1个二开程序&#xff0c;需要移植到macOS平台上&#xff0c;由于遇到些问题&#xff0c;本文记录下如何在macOS上配置&编译&运行obs程序完整过程。 下载 首先下载cmake-gui工具&#xff0c;下载CMAKE&#xff0c;选择对应macOS平台的cmake版本&…

过来人经验,PMP考试第七版要怎么学?

第七版没有大家说的那么难&#xff0c;根据考纲来看&#xff0c;一半内容将考查预测型项目管理方法&#xff0c;一半考查敏捷或混合型方法 &#x1f308;备考建议是&#xff1a;先学第六版和敏捷&#xff0c;再来学第七版&#xff0c;第七版其实可以理解为第六版的升级&#xf…

java八股文面试[JVM]——垃圾回收

参考&#xff1a;JVM学习笔记&#xff08;一&#xff09;_卷心菜不卷Iris的博客-CSDN博客 GC垃圾回收面试题&#xff1a; JVM内存模型以及分区&#xff0c;需要详细到每个区放什么 堆里面的分区&#xff1a;Eden&#xff0c;survival from to&#xff0c;老年代&#xff0c;各…

7-模板过滤器

一. 过滤器 过滤器: 过滤器本质就是函数 # 模板语法中过滤器: {{ 变量名| 过滤器 }} {{ 变量名| 过滤器(*args) }}二. 常见的过滤器 str 过滤器的相关操作: safe :禁用转义 capitalize: 单词的首字母大写 lower 和 upper: 大小转换 title : 一句话中的每个单词的首字母大写 r…