java调用WebService(一) |
您所在的位置:网站首页 › cxf调用axis发布的接口 › java调用WebService(一) |
文章目录
目录 文章目录 背景: 通过一个实例来认识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提供的wsdlsap提供的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 |