java调用WebService(一)

您所在的位置:网站首页 cxf调用axis发布的接口 java调用WebService(一)

java调用WebService(一)

2023-06-01 21:42| 来源: 网络整理| 查看: 265

文章目录

目录

文章目录

背景:

通过一个实例来认识webservice

服务端

客户端

WebService的一些概念

踩坑之旅

务必保证提供方的wsdl可以通过浏览器打开

sap提供的wsdl

wsdl鉴权问题

wsimport使用authfile

方法重名

解决方案

参数问题

鉴权:

参数:

注意点

背景:

因工作需要和一个Sap相关系统以WebService的方式进行接口联调,之前仅听过这种技术,但并没有实操过,所以将本次开发相关的踩坑进行记录

通过一个实例来认识webservice 服务端

首先我们先写一个简单的接口,不同于一般的接口就是我们要使用@WebService,以及需要将这个接口进行发布

public interface ExampleService { String sayHi(String request); } @WebService public class ExampleServiceImpl implements ExampleService{ @Override public String sayHi(String request) { return "request:"+request+"response:hi"; } } public class ExampleServe { public static void main(String[] args) { //接口发布的地址 Endpoint.publish("http://localhost:8080/example",new ExampleServiceImpl()); //查看WebService服务是否启动 url+?wsdl //http://localhost:8080/example?wsdl是否能显示 System.err.println("服务发布成功"); } }

然后,通过请求http://localhost:8080/example?wsdl我们可以看到下面这个xml结构的文档

客户端

接下来我们通过jdk自带的wsimport命令自动将wsdl解析为我们熟悉的java调用类

执行下述命令,wsimport具体参数见附录

wsimport -s ./src/main/java/ -p com.webservice.summary.client -encoding utf-8 http://localhost:8080/example\?wsdl

写一个客户端类,在确保上面编写的server启动的情况下,执行就会获得调用结果

public class ExampleClient { public static void main(String[] args) { ExampleServiceImplService exampleServiceImplService=new ExampleServiceImplService(); ExampleServiceImpl exampleServiceImplPort = exampleServiceImplService.getExampleServiceImplPort(); String result = exampleServiceImplPort.sayHi("这是参数"); System.out.println(result); } }

总的来说,其实很简单,甚至具体业务中我们作为调用方并不需要编写和发布service,只需要将服务方暴露的wsdl文件或者地址进行转换,进行调用就好了。

WebService的一些概念

官方的概念感兴趣的可以自己了解

https://en.wikipedia.org/wiki/Web_service

https://baike.baidu.com/item/Web%20Service/1215039?fromtitle=webservice&fromid=2342584&fr=aladdin

在我看来,其实就是一种通信的解决方案,如Dubbo一样,处理应用通信的问题。核心包含wsdl和soap;

wsdl文件其实就是xml格式的文件,它定义了服务的相关信息,而soap目前我只清楚是一种协议,包含soap1.1和soap1.2版本,这两个版本影响了我们服务发布和调用的版本

踩坑之旅

这次对接的系统,使用的sap管理和发布webservice服务的,由于我是初次应用webservice,加之他们内网鉴权限制、WSDL鉴权以及接口鉴权,中间一度很不美妙,

务必保证提供方的wsdl可以通过浏览器打开 sap提供的wsdl

sap提供的wsdl不是普通的以?wsdl结尾的链接,而是一个结构类似于下面这个链接的格式http://*******.com:8001/sap/bc/srt/wsdl/flv_10002A111AD1/bndg_url/sap/bc/srt/rfc/sap/yws_get_str/200/yws_get_str/yws_get_str?sap-client=200(网上随便找的)

当时我直接拿着这个链接替换了上面wsimport命令最后的链接,结果竟然报错了;不过好在对方还提供了wsdl文件,结果我将链接替换为文件仍然还是这个错

无法读取 WSDL 文档:******* 原因为 1) 找不到文档; 2) 无法读取文档; 3) 文档的根元素不是 。 [ERROR] failed.noservice=在提供的 WSDL 中找不到 wsdl:service: 需要至少提供一个 WSDL, 该 WSDL 至少具有一个服务定义。

在我将自己的文件和他们给的文件多次对比后发现,他们所提供的文件,很多



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3