Java请求webservice踩过的坑

最近项目对接过程中,因为对方系统比较旧,我们和对方进行交互使用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.mzph.cn/news/50190.shtml

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

相关文章

PostgreSQL+SSL链路测试

SSL一个各种证书在此就不详细介绍了&#xff0c;PostgreSQL要支持SSL的前提需要打开openssl选项&#xff0c;包括客户端和服务器端。 测试过程。 1. 生成私钥 root用户&#xff1a; mkdir -p /opt/ssl/private mkdir -p /opt/ssl/share/ca-certificateschmod 755 -R /opt/ss…

java判断ip是否为指定网段

具体网络知识原理请看这个博文 /**** param address servletRequest.getRemoteAddr();* param host servletRequest.getRemoteHost();* return* Description 检验IP是否符合安全限定*/private boolean ipIsInNet(String address, String host){Set<String> iPset allow…

缓存优化--使用Redis将项目进行优化

缓存优化–使用Redis 文章目录 缓存优化--使用Redis1、环境搭建2、缓存短信验证码2.1、实现思路2.2、代码改造 3、缓存菜品数据3.1、实现思路3.2、代码改造 问题描述&#xff1a; 用户数量多&#xff0c;系统访问量大的时候&#xff0c;用户发送大量的请求&#xff0c;导致频繁…

Laravel 框架构造器的查询表达式构造器的 Where 派生查询 ⑥

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; THINK PHP &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &#x1f44…

中文医学知识语言模型:BenTsao

介绍 BenTsao&#xff1a;[原名&#xff1a;华驼(HuaTuo)]: 基于中文医学知识的大语言模型指令微调 本项目开源了经过中文医学指令精调/指令微调(Instruction-tuning) 的大语言模型集&#xff0c;包括LLaMA、Alpaca-Chinese、Bloom、活字模型等。 我们基于医学知识图谱以及医…

ansible-playbook yml 查看进程

- name: 查看 sshd 进程hosts: your_hoststasks:- name: 运行 pgrep 命令查找 sshd 进程shell: pgrep sshdregister: command_result- name: 打印进程输出debug:var: command_result.stdout_linesansible-playbook process.yml stdout_lines 是变量的一个属性&#xff0c;变量结…

2023Spring之八股文——面试题

Spring概述(10) 1. 什么是spring? Spring是一个轻量级Java开发框架&#xff0c;最早由Rod Johnson创建&#xff0c;目的是为了解 决企业级应用开发的业务逻辑层和其他各层的耦合问题。它是一个分层的 JavaSE/JavaEE full-stack&#xff08;一站式&#xff09;轻量级开源框架…

swc-loader Segmentation fault “$NODE_EXE“ “$NPM_CLI_JS“ “$@“

webpack swc swc还不是很稳定。 在swcrc 中有配置plugins 时&#xff0c;swc 转换 /node_modules/ 会报错。 环境 swc/cor1.3.62swc-loader0.2.3swc-plugin-vue-jsx0.2.5 解决 配两套rule,一套处理项目代码&#xff0c;一套处理node_modules webpack.config.js rules:…

Mongodb 更新集合的方法到底有几种 (下) ?

更新方法 Mongodb 使用以下几种方法来更新文档 &#xff0c; Mongodb V5.0 使用 mongosh 客户端&#xff1a; db.collection.updateOne(<filter>, <update>, <options>) db.collection.updateMany(<filter>, <update>, <options>) db.c…

Java8 实现批量插入和更新,SpringBoot实现批量插入和更新,Mybatis实现批量插入和更新

前言 基于mybatis实现的批量插入和更新 由于直接执行批量所有数据可能会出现长度超出报错问题&#xff0c;使用如下方式即可解决 实现 原理还是分配执行&#xff0c;这里的100就是设定每次执行最大数 /*** 封装使用批量添加或修改数据库操作* * param list 集合* param inse…

dnsmasq-dhcp DHCPDISCOVER “no address available“ 问题解决方法

问题现象 在Centos7.5系统中已安装dnsmasq组件并开启DHCP服务功能&#xff0c;然而客户端无法通过DHCP的方式获取IP&#xff0c;通过查看系统日志/var/log/messages发现日志中存在以下两个关键信息&#xff1a; dnsmasq-dhcp DHCPDISCOVER “no address available”DHCPNAK 1…

什么是神经网络

什么是神经网络 什么是神经网络&#xff1f;CNN、RNN、GNN&#xff0c;这么多的神经网络&#xff0c;有什么区别和联系&#xff1f; 既然我们的目标是打造人工智能&#xff0c;拥有智慧的大脑无疑是最好的模仿对象&#xff0c;人脑中有约860亿个神经元&#xff0c;这被认为是…

量化开发学习入门-概念篇

1.网格交易法 网格交易法&#xff08;Grid Trading&#xff09;是一种基于价格波动和区间震荡的交易策略。它适用于市场处于横盘或震荡的情况下。 网格交易法的基本思想是在设定的价格区间内均匀地建立多个买入和卖出水平&#xff08;网格&#xff09;&#xff0c;并在价格上…

设计模式-责任链

在现代的软件开发中&#xff0c;程序低耦合、高复用、w易拓展、易维护 什么是责任链 责任链模式是一种行为设计模式&#xff0c; 允许你将请求沿着处理者链进行发送。收到请求后&#xff0c; 每个处理者均可对请求进行处理&#xff0c; 或将其传递给链上的下个处理者。 使用场景…

ModaHub魔搭社区:WinPlan企业经营垂直大模型数据建模(二)

目录 维度模版管理 录入维度数据 经营指标 创建经营指标 经营指标管理 维度模版管理 创建维度后,可在维度库的左侧栏展示全部启用中的维度,你也可以再次编辑维度模版;如不再需要该维度,可停用,停用后可在停用管理里重新启用或删除。 1)停用:维度停用后,不会出现在…

LAMP架构

这里写目录标题 LAMP架构一.LAMP架构的组成二.CGI和fastcgi1.CGI2.fastcgi3.比较4.PHP4.2**的** **Opcode** **语言**4.3PHP 配置 三.编译安装Apache http服务1.环境准备2.安装环境依赖包3.解压软件包4.移动apr包 apr-util包到安装目录中&#xff0c;并切换到 httpd-2.4.29目录…

拓扑排序Topological sorting/DFS C++应用例题P1113 杂务

拓扑排序 拓扑排序可以对DFS的基础上做变更从而达到想要的排序效果。因此&#xff0c;我们需要xy准备&#xff0c;vis数组记录访问状态&#xff0c;每一个任务都可以在dfs的过程中完成。 在使用拓扑排序方法时一些规定&#xff1a; 通常使用一个零时栈不会直接输出排序的节点…

压缩包安装mysql

删除 MySQL sc delete mysql 安装mysql mysqld -install

EasyExcel实现多sheet文件导出

文章目录 EasyExcel引入依赖表结构学生表课程表教师表 项目结构下载模板实体类StudentVoCourseVoTeacherVo ControllerServiceEasyExcelServiceStudentServiceCourseServiceTeacherService ServiceImplEasyExcelServiceImplStudentServiceImplCourseServiceImplTeacherServiceI…

Ubuntu 配置国内源

配置国内源 因为众所周知的原因&#xff0c;国外的很多网站在国内是访问不了或者访问极慢的&#xff0c;这其中就包括了Ubuntu的官方源。 所以&#xff0c;想要流畅的使用apt安装应用&#xff0c;就需要配置国内源的镜像。 市面上Ubuntu的国内镜像源非常多&#xff0c;比较有…