webservice(springboot)

WebService在SpringBoot下的使用
因项目需要,要做一套webservice的服务端和客户端,从介绍开始吧。
简单的说,WebService就是一种跨编程语言和跨操作系统平台的远程调用技术。所谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程序则可以采用其他编程语言编写,反之亦然。跨操作系统平台则是指服务端程序和客户端程序可以在不同的操作系统上运行。 远程调用,就是一台计算机的应用可以调用其他计算机上的应用。例如:支付宝,支付宝并没有银行卡等数据,它只是去调用银行提供的接口来获得数据。还有天气预报等,也是气象局把自己的系统服务以webservice服务的形式暴露出来,让第三方网站和程序可以调用这些服务功能。

一、webservice客户端

在springboot的pom文件里配置一下

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

<dependency>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
  <version>3.2.7</version>
</dependency>

先找一个公开的wsdl试一下,这个博客里面罗列了很多
公开的wsdl
或者用天气预报这个试一下:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl
用浏览器打开后保存成.wsdl文件。
在工程中创建一个package,点击idea里面的tools(2019版以后在这里,之前的在file目录下)找到webservice,用wsdl生成webservice客户端。在这里插入图片描述点击Generate Java Code From Wsdl。
在这里插入图片描述根据自己的框架选择对应的websevice框架,点击ok。
期间可能会报错,如果是提示找不到Class:ws.Wsimport
那么可能是jdk版本的问题,务必是jdk1.6以上。

在这里插入图片描述
如果报有找不到ref=“s:schema” 的错误,就是因为这个wsdl是.net编译的,需要把wsdl文件里面所有的s:schema和下面那行换成<s:any minOccurs=“2” maxOccurs=“2”/>。在这里插入图片描述
然后再试一次,如果生成了很多java文件就ok了。

二、webservice服务端

首先加入依赖。

 <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
            <version>3.3.3</version>
 </dependency>

然后创建接口。

package cn.asiic.port.web.webservice.erp;


import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService(name = "AyPortService", // 暴露服务名称
        targetNamespace = "http://erp.webservice.web.port.asiic.cn"// 命名空间,一般是接口的包名倒序
)
public interface AyPortService {
    @WebMethod
    void load();

}

然后创建接口实现类。

package cn.asiic.port.web.webservice.impl;

import cn.asiic.port.web.repository.TaskRepository;
import cn.asiic.port.web.webservice.erp.AyPortService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.jws.WebService;

@WebService(serviceName = "AyPortService", // 与接口中指定的name一致
        targetNamespace = "http://erp.webservice.web.port.asiic.cn", // 与接口中的命名空间一致,一般是接口的包名倒
        endpointInterface = "cn.asiic.port.web.webservice.erp.AyPortService",// 接口地址
        portName = "10000"
)
@Component
public class AyPortServiceImpl implements AyPortService {
    @Autowired
    TaskRepository taskRepository;
    //wsdl地址:    http://localhost:8081/api/ws/ayPortService?wsdl
    @Override
    public void load() {
       taskRepository.test();
    }
}

然后在shiro配置文件里面修改一下,防止webservice被拦截。
在这里插入图片描述
运行程序,在浏览器输入wsdl地址,发现已经可以看到wsdl了,用soapui测试一下,成功。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值