SpringBoot整合WebService(实用版)

SpringBoot整合WebService

简介

WebService就是一种跨编程语言和跨操作系统平台的远程调用技术

此处就不赘述WebService相关概念和原理了,可以参考:https://blog.csdn.net/c99463904/article/details/76018436

代码示例

此处共分两个端,客户端和服务端,一个负责调用接口,一个负责创建接口并实现

首先创建一个Maven父项目,在pom.xml文件中引入SpringBoot坐标

<parent>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-parent</artifactid>
    <version>2.5.0</version>
    <relativepath> <!-- lookup parent from repository -->
</relativepath></parent>

Server搭建

在父项目中创建服务端(Server)子项目,

pom.xml文件,引入以下坐标

<dependencies>
    <dependency>
        <groupid>org.apache.cxf</groupid>
        <artifactid>cxf-spring-boot-starter-jaxws</artifactid>
        <version>3.2.5</version>
    </dependency>
    <!--    不引入会报错  报接口未实现  -->
    <dependency>
        <groupid>org.hibernate</groupid>
        <artifactid>hibernate-validator</artifactid>
        <version>6.0.18.Final</version>
    </dependency>

    <dependency>
        <groupid>org.projectlombok</groupid>
        <artifactid>lombok</artifactid>
    </dependency>
</dependencies>

启动类(引导类)

@SpringBootApplication
public class ServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ServerApplication.class,args);
    }

}

User.java

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class User {

    private String name;

    private Integer age;

}

UserService接口

@WebService(targetNamespace = "wsdl.aerfazhe.com",name = "userPortType")
public interface UserService {

    @WebMethod
    User getUserName(@WebParam(name = "name") String name);

}

UserService实现类

@WebService(
        targetNamespace = "wsdl.aerfazhe.com", //&#x547D;&#x540D;&#x7A7A;&#x95F4; &#x6307;&#x5B9A;wsdl&#x8BF4;&#x660E;&#x4E66;&#x5728;Client&#x7AEF;&#x6240;&#x5B58;&#x653E;&#x7684;&#x5305;&#x8DEF;&#x5F84;&#x4E3A;com.aerfazhe.wsdl&#x5305;&#x4E0B;
        name = "userPortType",
        serviceName = "userService", //&#x670D;&#x52A1;Name&#x540D;&#x79F0;
        portName = "userPortName",
        endpointInterface = "com.aerfazhe.service.UserService" // &#x6307;&#x5B9A;webService&#x7684;&#x63A5;&#x53E3;&#x7C7B;&#xFF0C;&#x6B64;&#x7C7B;&#x4E5F;&#x9700;&#x8981;&#x63A5;&#x5165;@WebService&#x6CE8;&#x89E3;
)
public class UserServiceImpl implements UserService {

    @Override
    public User getUserName(String name) {
        User user = new User(name, 28);
        return user;
    }

}

配置类

@Configuration
public class CxfWebServiceConfig {

    @Bean("cxfServletRegistration")
    public ServletRegistrationBean<cxfservlet> dispatcherServlet() {
        return new ServletRegistrationBean<>(new CXFServlet(),"/ws/*");
    }

    @Bean(name = Bus.DEFAULT_BUS_ID)
    public SpringBus springBus() {
        return new SpringBus();
    }

    @Bean
    public UserService userService() {
        return new UserServiceImpl();
    }

    @Bean
    public Endpoint endpoint(UserService userService) {
        EndpointImpl endpoint = new EndpointImpl(springBus(), userService);
        endpoint.publish("/user");
        return endpoint;
    }

}</cxfservlet>

启动后访问wsdl说明书

http:localhost:8080/ws/user?wsdl

SpringBoot整合WebService(实用版)

Client搭建

pom.xml

<dependencies>
    <dependency>
        <groupid>org.apache.cxf</groupid>
        <artifactid>cxf-spring-boot-starter-jaxws</artifactid>
        <version>3.2.5</version>
    </dependency>
    <!--    不引入会报错  报接口未实现  -->
    <dependency>
        <groupid>org.hibernate</groupid>
        <artifactid>hibernate-validator</artifactid>
        <version>6.0.18.Final</version>
    </dependency>

    <dependency>
        <groupid>org.projectlombok</groupid>
        <artifactid>lombok</artifactid>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupid>org.apache.cxf</groupid>
            <artifactid>cxf-codegen-plugin</artifactid>
            <version>3.2.5</version>
            <executions>
                <execution>
                    <id>generate-sources</id>
                    <phase>generate-sources</phase>
                    <configuration>
                        <sourceroot>src/main/resources/cxf</sourceroot>
                        <wsdloptions>
                            <wsdloption>
                                <wsdl>http://localhost:8080/ws/user?wsdl</wsdl>
                            </wsdloption>
                        </wsdloptions>
                    </configuration>
                    <goals>
                        <goal>wsdl2java</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

配置类

@Configuration
public class CxfClientConfig {

    private final static String SERVICE_ADDRESS = "http://localhost:8080/ws/user";

    @Bean("cxfProxy")
    public UserPortType createUserPortTypeProxy() {
        JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new JaxWsProxyFactoryBean();
        jaxWsProxyFactoryBean.setAddress(SERVICE_ADDRESS);
        jaxWsProxyFactoryBean.setServiceClass(UserPortType.class);
        return (UserPortType) jaxWsProxyFactoryBean.create();
    }
}

编译转换

将XML格式的wsdl说明书转化为Java对象格式

在Client客户端项目根路径下调出控制台,如下

SpringBoot整合WebService(实用版)

使用maven命令进行转换,生成的Java代码在Client客户端下的src/main/resources/cxf目录下

mvn generate-sources

查看src/main/resources/cxf 下的文件,如下

创建com/aerfazhe/wsdl包路径,将这些JavaObject剪切到该包路径下,如下

Controller

@RestController
public class UserController {

    @Resource(name = "cxfProxy")
    private UserPortType userPortType;

    @GetMapping("/getUserName")
    public User getUserName(String name) {
        User user = userPortType.getUserName(name);
        return user;
    }

}

启动类

@SpringBootApplication
public class ClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(ClientApplication.class,args);
    }
}

application.yml

server:
  port: 8081

在当前项目根目录下,输入以下命令,将xml类型的wsdl说明书转化为Java对象

mvn generate-sources

SpringBoot整合WebService(实用版)

启动后访问:http://localhost:8081/getUserName?name=张三

SpringBoot整合WebService(实用版)

此时就调用成功喽

Original: https://www.cnblogs.com/aerfazhe/p/16093653.html
Author: 阿尔法哲
Title: SpringBoot整合WebService(实用版)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/586738/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • JAVA反射参数传递

    使用Method反射调用函数时,我们通常会遇到以下几种情况: public void test(){ System.out.println(“函数参数:0”…

    Java 2023年5月29日
    067
  • 好书推荐之《JAVA编程思想》

    名人推荐 真是一本透着编程思想的书。上面的书让你从微观角度了解 Java,而这本书则可以让你从一个宏观角度了解 Java。这本书和 Java 核心技术的厚度差不多,但这本书的信息密…

    Java 2023年6月15日
    080
  • 【Java开发基础】生成两个正数之间的随机数

    java;gutter:true; int rangeStart = 99; int rangeEnd = 180;</p> <pre><code&g…

    Java 2023年5月29日
    0105
  • 监控平台SkyWalking9入门实践

    简便快速的完成对分布式系统的监控; 一、业务背景 微服务作为当前系统架构的主流选型,虽然可以应对复杂的业务场景,但是随着业务扩展,微服务架构本身的复杂度也会膨胀,对于一些核心的业务…

    Java 2023年6月15日
    081
  • Spring Boot整合RabbitMQ

    Spring Boot整合RabbitMQ Spring Boot整合RabbitMQ 写在开头 整合流程 配置文件 RabbitMQ配置 RabbitMQ生产者 RabbitMQ…

    Java 2023年6月5日
    072
  • java 从oss上下载多个图片,压缩并返回给前端下载

    controller层 /** * 下载图片–>创建文件夹 * @param params * @return * @throws Exception */ @PostMa…

    Java 2023年6月9日
    096
  • HBase二级索引

    Phoenix 二级索引 可以将全表扫描优化为范围扫描 全局索引 将全表扫描转化为范围扫描。额外创建一个表,作为索引表。当创建了全局索引,先去利用算法找所要查询的列, 默认的索引格…

    Java 2023年6月8日
    092
  • FaaS 基于多租户技术 SaaS平台设计

    多租户技术(英语:multi-tenancy technology)或称多重租赁 技术,是一种软件架构 技术,它是在探讨与实现如何于 多用户的环境下共用相同的系统或程序组件,并且仍…

    Java 2023年5月29日
    088
  • 用户管理

    用户管理 添加用户 基本语法 useradd 用户名 示例:添加一个用户名为tom的用户 useradd tom 细节说明 当创建用户成功后,会自动的创建和用户名同名的家目录 也可…

    Java 2023年6月5日
    0102
  • Convert Set to array in Java

    This post will discuss how to convert a set to an array in plain Java, Java 8, and the Gua…

    Java 2023年5月29日
    071
  • InnoDB体系架构

    后台线程的主要作用是负责刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据,此外将已修改的数据文件刷新到磁盘文件,同时保证在数据库发生异常的情况下InnoDB能恢复到正常运行…

    Java 2023年6月8日
    079
  • 查看 java 进程占用内存[转]

    $ ps -p ${pid} -o rss,vsz RSS VSZ 7152568 17485844 VSZ是虚拟内存,RSS是实际使用的内存,单位KB。你会发现,RSS会远远超过…

    Java 2023年5月29日
    0109
  • nginx学习

    https://www.cnblogs.com/tinywan/tag/Nginx/ https://www.xuliangwei.com/bgx/category/nginx/p…

    Java 2023年5月30日
    087
  • 为大势趋,驭势者胜:引迈信息三周年回顾与展望

    三年的风雨兼程,三年的创新研发,自福建引迈信息技术有限公司成立以来,始终坚持以创新为引领发展的第一动力,坚持”以客户为中心,以产品为导向”的发展理念,不断进…

    Java 2023年6月5日
    081
  • Log4j2详解——XML配置详解

    Log4j2详解——XML配置详解 找到了个很详细的文章链接 https://www.jianshu.com/p/bfc182ee33db Original: https://ww…

    Java 2023年6月7日
    088
  • 阅读笔记一

    这两天又读了一遍《程序员修炼之道——从小工到专家》感觉这次收获挺大的,比第一次读的时候收获大多了(如果第一次那样读算是读的话),先从整体上说说这本书吧,我记着第一次阅读的时候,当时…

    Java 2023年6月7日
    090
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球