SpringBoot整合WebService服务的实现代码

网友投稿 469 2022-08-29


SpringBoot整合WebService服务的实现代码

目录为什么使用WebService?适用场景: 不适用场景:Axis2与CXF的区别SpringBoot使用CXF集成WebService

WebService是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,通过Internet进行基于Http协议的网络应用间的交互。 其实WebService并不是什么神秘的东西,它就是一个可以远程调用的类,或者说是组件,把你本地的功能开放出去共别人调用。

为vZnYVVCQgJ什么使用WebService?

简单解释一下WebService,比如你的项目需要查询某银行账户余额。你能直接查吗,肯定不行,因为数据库是银行的,他不可能给你权限。你想访问他的数据库获取数据,这就需要用到WebService。通过调用银行暴露的接口来得到你想要的数据。

适用场景:

软件的集成和复用,如气象局(服务端系统)、天气查询网站等。

发布一个服务(对内/对外),不考虑客户端类型,不考虑性能,建议WebService服务端已经确定使用webservice,客户端不能选择,必须使用WebService

软件集成:通过远程调用技术,将两个系统整合到一起,从而实现软件集成。

软件复用:同一个款软件的多次集成,最终实现复用。

不适用场景:

考虑性能时不建议使用WebService同构程序下不建议使用WebService

Axis2与CXF的区别

目前java开发WebService的框架主要包括Axis2和CXF,如果你需要多语言的支持,你应该选择Axis2。如果你需要把你的实现侧重java并希望和Spring集成,CXF就是更好的选择,特别是把你的WebService嵌入其他的程序中。

区别Axis2CXF简述WebService引擎简易的SOA框架,可以作为ESBspring集成不支持支持应用集成困难简单是否跨语言是否部署方式web应用嵌入式服务的管控和治理支持不支持

SpringBoot使用CXF集成WebService

1.向pom.xml中添加集成WebService的相关依赖

org.springframework.boot

spring-boot-starter-web-services

org.apache.cxf

cxf-rt-frontend-jaxws

3.1.6

org.apache.cxf

cxf-rt-transports-http

3.1.6

2.创建服务端接口

package com.primeton.mq.service;

import javax.jws.WebService;

@WebService(name = "DemoService", // 暴露服务名称

targetNamespace = "http://service.mq.primeton.com"// 命名空间,一般是接口的包名倒序

)

public interface DemoService {

public String sayHello(String user);

}

3.创建服务端接口实现类

package com.primeton.mq.service.impl;

import com.primeton.mq.service.DemoService;

import javax.jws.WebService;

import java.util.Date;

@WebService(serviceName = "DemoService", // 与接口中指定的name一致

targetNamespace = "http://service.mq.primeton.com", // 与接口中的命名空间一致,一般是接口的包名倒

endpointInterface = "com.primeton.mq.service.DemoService"// 接口地址

)

public class DemoServiceImpl implements DemoService {

@Override

public String sayHello(String user) {

return user+",现在时间:"+"("+new Date()+")";

}

}

4.创建CXF配置类

package com.primeton.mq.webServiceConfig;

import com.primeton.mq.service.DemoService;

import com.primeton.mq.service.impl.DemoServiceImpl;

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;

@Configuration

public class CxfConfig {

@Bean

public ServletRegistrationBean dispatcherServlet() {

return new ServletRegistrationBean(new CXFServlet(),"/demo/*");

}

@Bean(name = Bus.DEFAULT_BUS_ID)

public SpringBus springBus() {

return new SpringBus();

public DemoService demoService() {

return new DemoServiceImpl();

public Endpoint endpoint() {

EndpointImpl endpoint = new EndpointImpl(springBus(), demoService());

vZnYVVCQgJ endpoint.publish("/api");

return endpoint;

}

5.启动SpringBoot服务

输入http://localhost:8090/demo/api?wsdl即可,注意我设置的端口是8090,视情况而定。

6.创建客户端

在idea中进入File > New Project…菜单打开新建项目窗口,依次选择Java、WebServices,Version项选择Apache Axis,Libraries项选择 Download。然后点击Next按钮进入下一页。

在下一页中输入项目名称,然后点击Finish按钮开始下载依赖包。依赖包下载完成后进入新建的项目。

选WebServices > Generate Wsdl From Java Code,生成wsdl

然后选择服务地址

确定之后,创建一个测试类,代码如下:

package test;

import example.DemoServiceImplService;

public class demo {

public staticvZnYVVCQgJ void main(String[] args) {

DemoServiceImplService webServiceImpl = new DemoServiceImplService();

String result = webServiceImpl.getDemoServiceImplPort().sayHello("没有说");

System.out.println("===========================================");

System.out.println(result);

}

}

注意:实现WebService客户端不一定要生成客户端的代码,可以通过地址动态调用。

package com.primeton.mq.test;

import com.primeton.mq.service.DemoService;

import org.apache.cxf.endpoint.Client;

import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;

import org.apache.cxf.transport.http.HTTPConduit;

import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;

public class demo {

public static void main(String[] args) {

//创建动态客户端

JaxWsDynamicClientFactory factory = JaxWsDynamicClientFactory.newInstance();

Client client = factory.createClient("http://localhost:8090/demo/api?wsdl");

// 需要密码的情况需要加上用户名和密码

//client.getOutInterceptors().add(new ClientLoginInterceptor(USER_NAME,PASS_WORD));

HTTPConduit conduit = (HTTPConduit) client.getConduit();

HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();

httpClientPolicy.setConnectionTimeout(2000); //连接超时

httpClientPolicy.setAllowChunking(false); //取消块编码

httpClientPolicy.setReceiveTimeout(120000); //响应超时

conduit.setClient(httpClientPolicy);

//client.getOutInterceptors().addAll(interceptors);//设置拦截器

try{

Object[] objects = new Object[0];

// invoke("方法名",参数1,参数2,参数3....);

objects = client.invoke("sayHello", "sujin");

System.out.println("返回数据:" + objects[0]);

}catch (Exception e){

e.printStackTrace();

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:python init 方法 与 sql语句当前时间对比(python入门教程(非常详细))
下一篇:python 取值方法:截取字符串(python编程)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~