700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > SpringBoot——实现WebService接口服务端以及客户端开发

SpringBoot——实现WebService接口服务端以及客户端开发

时间:2023-02-19 06:15:13

相关推荐

SpringBoot——实现WebService接口服务端以及客户端开发

文章目录

一、服务端代码开发1、pom依赖2、接口类3、接口实现类4、webservice配置文件2、客户端开发(1)pom依赖(2)封装客户端方法clientUtil(3)调用接口类(4)运行结果

我们经常需要在两个系统之间进行一些数据的交互,这时候我们就需要开发数据交互接口。

一般来说,遇到比较多的接口有HTTP接口、WebService接口、FTP文件传输。今天我要来学习一下在SpringBoot框架下进行简单的webservice接口的开发。

一、服务端代码开发

创建了两个wbservice接口TestService和CatService。

1、pom依赖

导入相关的依赖包。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web-services</artifactId></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-frontend-jaxws</artifactId><version>3.1.6</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-transports-http</artifactId><version>3.1.6</version></dependency>

2、接口类

import javax.jws.WebMethod;import javax.jws.WebParam;import javax.jws.WebResult;import javax.jws.WebService;import javax.xml.ws.WebServiceProvider;@WebService(name = "TestService", // 暴露服务名称targetNamespace = "http://server.webservice."// 命名空间,一般是接口的包名倒序)public interface TestService {@WebMethodpublic String sendMessage(@WebParam(name = "username") String username);@WebMethodpublic boolean getFlag(@WebParam(name = "username") String username);}

import javax.jws.WebMethod;import javax.jws.WebParam;import javax.jws.WebService;@WebService(name = "CatService", // 暴露服务名称targetNamespace = "http://server.webservice."// 命名空间,一般是接口的包名倒序)public interface CatService {@WebMethodpublic String message(@WebParam(name = "name") String name);}

3、接口实现类

import com.admin.Bag.webservice.server.TestService;import org.ponent;import javax.jws.WebService;@WebService(serviceName = "TestService", // 与接口中指定的name一致targetNamespace = "http://server.webservice.", // 与接口中的命名空间一致,一般是接口的包名倒endpointInterface = "com.admin.Bag.webservice.server.TestService"// 接口地址)@Componentpublic class TestServiceImpl implements TestService {@Overridepublic String sendMessage(String username) {return "=====Hello! " + username + "=====";}@Overridepublic boolean getFlag(String username) {//return true;}}

import com.admin.Bag.webservice.server.CatService;import org.ponent;import javax.jws.WebService;@WebService(serviceName = "CatService", // 与接口中指定的name一致targetNamespace = "http://server.webservice.", // 与接口中的命名空间一致,一般是接口的包名倒endpointInterface = "com.admin.Bag.webservice.server.CatService"// 接口地址)@Componentpublic class CatServiceImpl implements CatService {@Overridepublic String message(String name) {//return "一只小猫猫";}}

4、webservice配置文件

import com.admin.Bag.webservice.server.impl.CatServiceImpl;import com.admin.Bag.webservice.server.impl.TestServiceImpl;import org.apache.cxf.Bus;import org.apache.cxf.bus.spring.SpringBus;import org.apache.cxf.jaxws.EndpointImpl;import org.apache.cxf.transport.servlet.CXFServlet;import org.springframework.boot.web.servlet.ServletRegistrationBean;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import javax.xml.ws.Endpoint;@Configurationpublic class cxfConfig {@Beanpublic ServletRegistrationBean disServlet() {ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new CXFServlet(), "/webService/*");return servletRegistrationBean;}@Bean(name = Bus.DEFAULT_BUS_ID)public SpringBus springBus() {return new SpringBus();}@Beanpublic Endpoint endpoint() {EndpointImpl endpoint = new EndpointImpl(springBus(), new TestServiceImpl());endpoint.publish("/TestService");return endpoint;}@Beanpublic Endpoint endpoint2() {EndpointImpl endpoint = new EndpointImpl(springBus(), new CatServiceImpl());endpoint.publish("/CatService");return endpoint;}}

启动项目。我的项目端口号是8080。浏览器访问地址:http://localhost:8082/webService

可见接口信息CatService和TestService,点进链接可以看每个接口的wsdl文档。

2、客户端开发

客户端是一个单独的项目。

(1)pom依赖

不同的SpringBoot版本对应的依赖版本也不一样,我也是试了好久终于成了。我的SpringBoot版本号是2.3.0.RELEASE。

<!-- 进行jaxes 服务开发 --><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-frontend-jaxws</artifactId><version>3.0.1</version></dependency><!-- 内置jetty web服务器 --><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-transports-http-jetty</artifactId><version>3.0.1</version></dependency>

(2)封装客户端方法clientUtil

import org.apache.cxf.endpoint.Client;import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;public class clientUtil {public static String callWebSV(String wsdUrl, String operationName, String... params) throws Exception {JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();Client client = dcf.createClient(wsdUrl);//client.getOutInterceptors().add(new ClientLoginInterceptor(USER_NAME, PASS_WORD));Object[] objects;// invoke("方法名",参数1,参数2,参数3....);objects = client.invoke(operationName, params);return objects[0].toString();}}

(3)调用接口类

使用定时调用webservice接口。

import com.admin.webAppoint.webservice.client.clientUtil;import org.springframework.scheduling.annotation.Scheduled;import org.ponent;import org.springframework.web.bind.annotation.RestController;@RestController@Componentpublic class TestController {//在一个方法中连续调用多次WebService接口,每次调用前需要重置上下文。ClassLoader classLoader = Thread.currentThread().getContextClassLoader();@Scheduled(cron="*/15 * * * * ?")public String getMessage() {Thread.currentThread().setContextClassLoader(classLoader);//在获取连接之前 还原上下文System.out.println("======开始调用webservice接口=====");String url = "http://localhost:8082/webService/CatService?wsdl";String methodName = "message";System.out.println("Calling" + url);String result="";try {result=clientUtil.callWebSV(url, methodName, "name");} catch (Exception e) {System.err.println("接口调用失败!!!!");return "失败";}System.out.println("===Finished!===恭喜你啊!!!CatService接口调用成功!!!===获得的数据是:"+result);return "Finished!";}@Scheduled(cron="*/5 * * * * ?")public String getMessage2() {Thread.currentThread().setContextClassLoader(classLoader);//在获取连接之前 还原上下文System.out.println("======开始调用webservice接口=====");String url = "http://localhost:8082/webService/TestService?wsdl";String methodName = "sendMessage";System.out.println("Calling" + url);String result="";try {result=clientUtil.callWebSV(url, methodName, "username");} catch (Exception e) {System.err.println("接口调用失败!!!!");return "失败";}System.out.println("===Finished!===恭喜你啊!!!TestService接口调用成功!!!===获得的数据是:"+result);return "Finished!";}}

(4)运行结果

首先启动服务端。启动客户端。

遇到过报错:

报错——使用cxf时报错:org.apache.cxf.interceptor.Fault: Marshalling Error: XXX is not known to this context

最终成功调用服务端的webservice接口:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。