java调用webservice接口 三种方法

2023-11-17

摘自其它:webservice的 发布一般都是使用WSDL(web service descriptive language)文件的样式来发布的,在WSDL文件里面,包含这个webservice暴露在外面可供使用的接口。今天搜索到了非常好的 webservice provider列表

http://www.webservicex.net/WCF/default.aspx

这上面列出了70多个包括很多方面的free webservice provider,utilities->global weather就可以获取全球的天气预报。

直接粘贴代码:

方法一:直接AXIS调用远程的web service

public void doSelectRiskReportForm(HttpServletRequest request,
				HttpServletResponse response){
			//调用接口		
			//方法一:直接AXIS调用远程的web service
			try {  				
	            String endpoint = "http://localhost:8080/platform-jxcx-service/services/settlementServiceImpl?wsdl";  	            
	            Service service = new Service();  
	            Call call = (Call) service.createCall();
	            call.setTargetEndpointAddress(endpoint);
	            String parametersName = "settle_num"; 		// 参数名//对应的是 public String printWord(@WebParam(name = "settle_num") String settle_num); 
//	            call.setOperationName("printWord");  		// 调用的方法名//当这种调用不到的时候,可以使用下面的,加入命名空间名
	            call.setOperationName(new QName("http://jjxg_settlement.platform.bocins.com/", "printWord"));// 调用的方法名
	            call.addParameter(parametersName, XMLType.XSD_STRING, ParameterMode.IN);//参数名//XSD_STRING:String类型//.IN入参
	            call.setReturnType(XMLType.XSD_STRING); 	// 返回值类型:String
	            String message = "123456789";  
	            String result = (String) call.invoke(new Object[] { message });// 远程调用
	            System.out.println("result is " + result);  
	        } catch (Exception e) {  
	            System.err.println(e.toString());  
	        }  
			
			
		} 

 方法二:直接SOAP调用远程的webservice

这个方法我没有试验,需要下载jar,SOAP 使用 HTTP 传送 XML,尽管HTTP 不是有效率的通讯协议,而且 XML 还需要额外的文件解析(parse),两者使得交易的速度大大低于其它方案。但是XML 是一个开放、健全、有语义的讯息机制,而 HTTP 是一个广泛又能避免许多关于防火墙的问题,从而使SOAP得到了广泛的应用。但是如果效率对你来说很重要,那么你应该多考虑其它的方式,而不要用 SOAP。

import org.apache.soap.util.xml.*;  
import org.apache.soap.*;  
import org.apache.soap.rpc.*;  
  
import java.io.*;  
import java.net.*;  
import java.util.Vector;  
  
public class caService {  
    public static String getService(String user) {  
        URL url = null;  
        try {  
            url = new URL(  
                    "http://192.168.0.100:8080/ca3/services/caSynrochnized");  
        } catch (MalformedURLException mue) {  
            return mue.getMessage();  
        }  
        // This is the main SOAP object  
        Call soapCall = new Call();  
        // Use SOAP encoding  
        soapCall.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);  
        // This is the remote object we're asking for the price  
        soapCall.setTargetObjectURI("urn:xmethods-caSynrochnized");  
        // This is the name of the method on the above object  
        soapCall.setMethodName("getUser");  
        // We need to send the ISBN number as an input parameter to the method  
        Vector soapParams = new Vector();  
  
        // name, type, value, encoding style  
        Parameter isbnParam = new Parameter("userName", String.class, user,  
                null);  
        soapParams.addElement(isbnParam);  
        soapCall.setParams(soapParams);  
        try {  
            // Invoke the remote method on the object  
            Response soapResponse = soapCall.invoke(url, "");  
            // Check to see if there is an error, return "N/A"  
            if (soapResponse.generatedFault()) {  
                Fault fault = soapResponse.getFault();  
                String f = fault.getFaultString();  
                return f;  
            } else {  
                // read result  
                Parameter soapResult = soapResponse.getReturnValue();  
                // get a string from the result  
                return soapResult.getValue().toString();  
            }  
        } catch (SOAPException se) {  
            return se.getMessage();  
        }  
    }  
}  

方法三:直接使用eclipse生成客户端.idea类同

以天气预报的为例:

http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl

在页面上直接Ctrl+s保存文件,把xml改成wsdl就行

然后复制到项目里.

webservice服务是需要引入axis的jar包的,如下图:

使用eclipse自动生成WSDL客户端代码

如果没有引入saaj-*.jar,可能会报错。

右键点击WeatherWebService.wsdl文件,找到Web Service项,点击Generate Client子菜单。如下图:

使用eclipse自动生成WSDL客户端代码

在弹出的窗口中点击Next,如下图:

使用eclipse自动生成WSDL客户端代码

选择生成的代码要防止的包位置,如下图:

使用eclipse自动生成WSDL客户端代码

点击完成,稍等片刻,就能看到生成的Java代码了。如下图:

使用eclipse自动生成WSDL客户端代码

生成客户端后,只需要在使用的时候,引入这个接口即可,就好像使用本地类一样.

补充:在使用方式一时遇到几个问题

1.Message part settlementService was not recognized. 

解决方式:消息部分未被识别。

其实就是就是方法名错了,如果只输入方法名不行,就加入命名空间

// call.setOperationName("printWord");          // 调用的方法名//当这种调用不到的时候,可以使用下面的,加入命名空间名
call.setOperationName(new QName("http://jjxg_settlement.platform.bocins.com/", "printWord"));// 调用的方法名
2.Unexpected wrapper element printWord found.   Expected {http://jjxg_settlement.platform.bocins.com/}printWord.

解决方式:

Call call = (Call) service.createCall();
call.setOperationName(new QName("命名空间地址", "方法名"));

3.Unmarshalling Error: 意外的元素 (uri:"http://jjxg_settlement.platform.bocins.com/", local:"settle_num")。所需元素为<{}settle_num> 

解决方式:

call.addParameter(parametersName, XMLType.XSD_STRING, ParameterMode.IN);//参数名//XSD_STRING:String类型//.IN入参

// 参数名//对应的是 public String printWord(@WebParam(name = "settle_num") String settle_num); 

实际走过的弯路:

命名空间的名称,缺少了"/"

 call.setOperationName(new QName("http://jjxg_settlement.platform.bocins.com/", "printWord"));// 调用的方法名

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java调用webservice接口 三种方法 的相关文章

  • 【华为OD机试真题 python】报文解压缩

    题目描述 为了提升数据传输的效率 会对传输的报文进行压缩处理 输入一个压缩后的报文 请返回它解压后的原始报文 压缩规则 n str 表示方括号内部的 str 正好重复 n 次 注意 n 为正整数 0 lt n lt 100 str只包含小写
  • Dockerfile 中 CMD 为什么要避免使用 sh -c

    CSDN 中文章不一定能及时更新 欢迎点击前往我的博客查看最新版本 许盛的博客 Dockerfile 中的 CMD 命令 有 exec form 和 shell form 两种形式 具体区别可以参考 Dockerfile 中 CMD 写法的
  • CDN加速与DDOS防御

    一 目的 实现国外节点的访问加速 分区域分线路加速 防御来自竞争对手的DDos恶意攻击 常见的延缓性CC攻击和致命的大流量攻击 针对以上的加速策略和两种攻击方式进行一些防御方案的简单介绍 二 CDN加速 利用第三方的DNS智能解析分区域分线
  • Git学习之LFS

    什么是Git LFS git是程序员开发程序不可或缺的工具 有效的使用git能够极大的加快程序人员的开发效率 在开发比较轻量化的代码时 开发的速度不会受到git上传下载速度的影响 但是随着系统的复杂度增加 代码中关联到的文件越来越多 其中二
  • BGP实验(路由反射器,联邦,路由优化)

    目录 1 IP地址的规划 2 拓扑结构的搭建 3 IP地址的配置 4 静态路由的配置 5 动态路由的配置 6 EBGP的配置 7 IBGP的配置 8 路由反射器的配置 宣告 9 重发布和路由优化 10 测试 实验要求 实验步骤 1 IP地址
  • Ubuntu中调整终端terminal显示的缓冲区大小

    step1 step2 step3
  • hadoop单机版部署

    1 下载hadoop wget no check certificate https mirrors bfsu edu cn apache hadoop common hadoop 3 3 1 hadoop 3 3 1 tar gz 2 解
  • WebSocket详解

    WebSocket WebSocket是一种协议 它允许在客户端和服务器之间建立持久连接 实现双向实时通信 传统的http请求是客户端向服务器发起请求 服务器响应请求 而WebSocket解决服务器无法给客户端发送信息的问题 与HTTP协议
  • 2019年中国在线酒店预订行业发展分析报告

    核心摘要 单体酒店连锁化加速 OYO横空出世 鲶鱼效应显现 2019年以来中国单体酒店连锁化趋势加速推进 传统酒店集团锦江国际 华住 首旅如家等为应对OYO带来的挑战 大力推进轻加盟 快速扩张门店数量 此外 单体酒店快速连锁化给OTA平台的
  • geoda空间自相关分析_【方法笔记4】Geoda空间计量1 空间自相关

    以黑龙江省为例 1 导入shp格式地图 打开目标地图 点击第二行第4个数据按钮可以查看地图数据变量 2 数据合并 即将研究的各地级市数据与导入地图 捆绑 首先找到地图数据中可以唯一表征每个地级市的变量 如 其次将个人研究变量与上述可对各地级
  • Kubernetes 存活、就绪和启动探针

    Kubernetes主要有三中探针 存活 Liveness 就绪 Readiness 和启动 Startup 探针 kubelet 使用存活探针来确定什么时候要重启容器 例如 存活探针可以探测到应用死锁 应用程序在运行 但是无法继续执行后面
  • auth.log 频繁出现Cron: pam_unix (cron:session): session opened/closed for user root by (uid=0)

    This is my week of playing around with mail servers and I have been keeping an eye on the logs on a regular basis I noti
  • 面试题:说说你对闭包的理解?

    闭包 一个函数和它的词法环境的引用捆绑在一起这样的组合就形成了闭包 比如一个函数A return出去了一个函数B 那么这个函数B可以在外部访问函数A内部的变量 此时在就形成了一个函数B的变量背包 A函数执行结束 这个变量也不会被销毁 并且这
  • gzip: stdin: not in gzip format tar: Child returned status 1 tar: Error is not recoverable: exiting

    gzip stdin not in gzip format tar Child returned status 1 tar Error is not recoverable exiting now 可能是下载链接不是资源链接 而是页面

随机推荐

  • Android 构建配置文件(config.gradle)

    1 新建config gradle 在自己的项目根目录下一个文件夹下创建一个config gradle文件名的文件 和settings gradble同目录 把自己需要用到的库跟版本号写在dependencies 标签括号内 ext and
  • springboot前后端分离之node.js环境搭建

    参考自链接 https www cnblogs com zhouyu2017 p 6485265 html Node js安装及环境配置之Windows篇 一 安装环境 1 本机系统 Windows 10 Pro 64位 2 Node js
  • Nacos 单机模式部署(Windows系统)

    Nacos 下载地址 Nacos 是阿里巴巴推出来的一个项目 这是一个更易于构建云原生应用的动态服务发现 配置管理和服务管理平台 Nacos 致力于帮助您发现 配置和管理微服务 Nacos 提供了一组简单易用的特性集 帮助您快速实现动态服务
  • 区块链学习5:智能合约Smart contract原理及发展历程科普知识

    前往老猿Python博文目录 一 智能合约的定义 通俗来说 智能合约就是一种在计算机系统上 当一定条件满足的情况下可被自动执行的合约 智能合约体现为一段代码及其运行环境 例如银行信用卡的自动还款就是一种典型的智能合约 我们来看看智能合约概念
  • 三维形体投影面积

    三维形体投影面积 在 n x n 的网格 grid 中 我们放置了一些与 x y z 三轴对齐的 1 x 1 x 1 立方体 每个值 v grid i j 表示 v 个正方体叠放在单元格 i j 上 现在 我们查看这些立方体在 xy yz
  • Java格式化字符串

    String类的静态format 方法用于创建格式化的字符串 format 方法有两种重载形式 1 public static String format String format Object args 该方法使用指定的格式字符串和参数
  • Java无向图链表、邻接表实现以及深度优先遍历广度优先遍历

    概述 图的存储形式中链表是通过数组加LinkedList 不一定是LinkedList 可以自己写链 也可以选择其他的集合数据结构 邻接表采用的是二维数组的结构 链表存储形式的相关实现 数据存储结构与基础操作 初始化数据存储结构 priva
  • mysql5.7小版本升级-windows

    mysql5 7小版本升级 windows 应用场景 mysql 5 7 20升级到当前最新的5 7 31 Windows环境 官网下载链接 https dev mysql com downloads mysql 5 7 html 注意 操
  • 区间预测

    区间预测 MATLAB实现GARCH分位数时间序列预测 目录 区间预测 MATLAB实现GARCH分位数时间序列预测 效果一览 基本介绍 模型描述 程序设计 研究总结 参考文献 效果一览 基本介绍 GARCH代表广义自回归条件异方差 它是一
  • 2015~2019年教育大数据会议期刊汇总及论文总结(不再更新)

    以下论文大部分与个性化导学相关 1 数据挖掘会议 AAAI AAAI 17 Question dif culty prediction for reading problems in standard tests AAAI 18 Medic
  • ftp服务器密码为空,ftp服务器无密码设置密码

    ftp服务器无密码设置密码 内容精选 换一换 华为云帮助中心 为用户提供产品简介 价格说明 购买指南 用户指南 API参考 最佳实践 常见问题 视频帮助等技术文档 帮助您快速上手使用华为云服务 如果在创建弹性云服务器时未设置密码 或密码丢失
  • 可以自定义公式的计算器_超多的计算器 总有一个用得上

    本期为大家分享几款计算器 这几款计算器足以满足你所有需求 功能强大 你值得拥有 01 Symbolab Practice 你的私人数学导师 以步骤展示任何数学问题解决步骤 数学计算Symbolab计算器将能为你解决 1 代数 等式 不等式
  • 单链表(数组模拟:静态链表)

    单链表 实现一个单链表 链表初始为空 支持三种操作 向链表头插入一个数 删除第 kk 个插入的数后面的数 在第 kk 个插入的数后插入一个数 现在要对该链表进行 MM 次操作 进行完所有操作后 从头到尾输出整个链表 注意 题目中第 kk 个
  • MySQL 临时表与内存表的区别

    文章目录 1 临时表 2 内存表 3 区别 4 小结 在 MySQL 中 Temporary Table 临时表 和 Memory Table 内存表 是两种不同的表类型 它们有一些重要的区别和用途 1 临时表 临时表 Temporary
  • PAA介绍

    ECCV 2020 的一篇文章 论文地址 https arxiv org abs 2007 08103 目录 一 简介 摘要 整个策略流程为 二 相关背景介绍 三 提出的方法 3 1 概率Anchor分配算法 3 2 测试阶段加入预测IoU
  • 我用ChatGPT写2023高考语文作文(一):全国甲卷

    2023年 全国甲卷 适用地区 广西 贵州 四川 西藏 人们因技术发展得以更好地掌控时间 但也有人因此成了时间的仆人 这句话引发了你怎样的联想与思考 请写一篇文章 要求 选准角度 确定立意 明确文体 自拟标题 不要套作 不得抄袭 不得泄露个
  • 怎么修复老照片?给你推荐这几个修复方法

    相信大家的家里都有老照片吧 那在你们翻看这些老照片的时候 有没有发现有些老照片变得有些破旧 泛黄 模糊等情况呢 看到这些情况 大家是不是会很心疼呢 因为这些老照片都充满了各种各样的回忆 根本拍不出第二张同样的照片 但其实我们可以使用软件来修
  • 设计模式原则-开闭原则

    设计模式原则 开闭原则 1 概述 开闭原则 Open Closed Principle 是编程中最基础 最重要的设计原则 一个软件实体如类 模块和函数应该对扩展开放 对提供方 对修改关闭 对使用方 用抽象构建框架 用实现扩展细节 当软件需要
  • 8个Python实用脚本,赶紧收藏

    脚本写的好 下班下得早 程序员的日常工作除了编写程序代码 还不可避免地需要处理相关的测试和验证工作 例如 访问某个网站一直不通 需要确定此地址是否可访问 服务器返回什么 进而确定问题在于什么 完成这个任务 如果一味希望采用编译型语言来编写这
  • java调用webservice接口 三种方法

    摘自其它 webservice的 发布一般都是使用WSDL web service descriptive language 文件的样式来发布的 在WSDL文件里面 包含这个webservice暴露在外面可供使用的接口 今天搜索到了非常好的