Spring-boot整合Webservice服务端
Spring Boot整合Webservice服务端
本文是基于前辈一顿吃不饱的文章SpringBoot整合WebService(服务端+客户端)-CSDN博客,由于工作需要用.NET调用其他系统发布的WebService服务,尝试用java搭建一个WebService服务端测试一下,在此记录。
- pom.xml
注意springboot版本和CXF可能会存在版本不兼容
· Spring Boot 3.x:使用CXF的Jakarta版本
· Spring Boot 2.x:使用CXF的Java EE版本
本文是基于Spring Boot 2.7.9参考博主构建的,完整依赖如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.9</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>org.cqw</groupId>
<artifactId>WebService</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>WebService</name>
<description>WebService</description>
<url/>
<licenses>
<license/>
</licenses>
<developers>
<developer/>
</developers>
<scm>
<connection/>
<developerConnection/>
<tag/>
<url/>
</scm>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- lombok: 日志 + 实体操作 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- 以下包和 webservice 相关 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web-services</artifactId>
</dependency>
<!-- CXF -->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-core</artifactId>
<version>3.3.5</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.2.4</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
- 创建WebService接口
package org.cqw.webservice.service;
import javax.jws.WebService;
@WebService(name = "UserService", // 暴露服务名称
targetNamespace = "http://service.webservice.cqw.org"// 命名空间,一般是接口的包名倒序
)
public interface UserService {
String testWebService();
}
- 创建接口实现类
package org.cqw.webservice.service;
import javax.jws.WebService;
@WebService(serviceName = "UserService", // 与接口中@WebService指定的name一致
targetNamespace = "http://service.webservice.cqw.org", // 与接口中的命名空间一致,一般是接口的包名倒序
endpointInterface = "org.cqw.webservice.service.UserService"// 接口地址
)
@Slf4j
public class UserServiceImpl implements UserService {
public String testWebService() {
log.info("我被调用了");
return "Hello";
}
}
- 在项目路径(本文是/src/main/java/org/cqw)下创建config文件夹,创建配置类
package org.cqw.webservice.config;
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.cqw.webservice.service.UserService;
import org.cqw.webservice.service.UserServiceImpl;
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 StartClas {
@Bean(name = Bus.DEFAULT_BUS_ID)
public SpringBus springBus() {
return new SpringBus();
}
@Bean(name = "wsBean")
public ServletRegistrationBean dispatcherServlet() {
ServletRegistrationBean wbsServlet = new ServletRegistrationBean(new CXFServlet(), "/ws/*");
return wbsServlet;
}
@Bean
public UserService userService() {
return new UserServiceImpl();
}
@Bean
public Endpoint endpointPurchase(SpringBus springBus, UserService userService) {
EndpointImpl endpoint = new EndpointImpl(springBus(), userService());
endpoint.publish("/api");
log.info("服务发布成功!地址为:http://localhost:8081/ws/api?wsdl");
return endpoint;
}
}
- 运行项目,结果如下
浏览器访问:http://localhost:8080/ws/api?wsdl
原文地址:https://blog.csdn.net/weixin_55797790/article/details/144078827
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!