springBoot项目调用Webservice接口过程

本文详细介绍了如何在Spring Boot项目中调用WebService接口。首先,基于wsdl文件利用maven-jaxb2-plugin插件生成相关代码,并将生成的文件整合到项目中。接着,编写客户端代码,包括引入依赖、配置类和客户端调用方法。最后,介绍了在接口调试阶段如何使用SoapUI工具创建soap项目并验证入参出参的准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.基于wsdl文件生成相关代码

生成代码需要借助插件,这里选用的是maven插件(gradle也有对应的,没整的起来)maven-jaxb2-plugin

创建一个maven项目,引入插件
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.longnows</groupId>
    <artifactId>wsdl-to-java-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.jvnet.jaxb2.maven2</groupId>
                <artifactId>maven-jaxb2-plugin</artifactId>
                <version>0.15.2</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <generatePackage>cn.longnows.wsdl2java.generate</generatePackage>
                    		                   <generateDirectory>${project.basedir}/src/main/java</generateDirectory>
                    <schemaDirectory>${project.basedir}/src/main/resources</schemaDirectory>
                    <schemaIncludes>
                        <include>*.wsdl</include>
                    </schemaIncludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

在这里插入图片描述

wsdl文件放到指定目录下

在这里插入图片描述

生成代码

这时候你的maven插件中应该就有刚刚引入的插件了,没有的刷新一下maven
在这里插入图片描述

运行结束后,可以看到所需的入参出参等文件都已经自动生成了,搬到自己项目中即可
在这里插入图片描述

注:webservice接口中的命名跟java命名规范可能不太一样,需要修改的自行修改即可。

在这里插入图片描述

2.编写客户端代码

引入依赖
    implementation 'org.springframework.boot:spring-boot-starter-web-services:2.6.3'
    implementation 'org.glassfish.jaxb:jaxb-runtime:4.0.2'
    implementation 'javax.annotation:javax.annotation-api:1.3.2'
增加配置类
@Configuration
public class MarshallerConfig {

    /**
     * 转换器
     * @return
     */
    @Bean
    public Jaxb2Marshaller marshaller() {
        Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
        marshaller.setContextPath("cn.longnows.刚刚生成的代码你所放的目录");
        return marshaller;
    }
}

client代码
@Component
public class KiaWsClient extends WebServiceGatewaySupport {

    /**
     * marshaller
     */
    @Autowired
    private Jaxb2Marshaller marshaller;

    /**
     * 默认uri,wsdl文件中会有一个<soap:address>标签,里面的location属性就是这个
     */
    @Value("${kia.ws.default-uri")
    private String defaultUrl;

    /**
     * 发送请求
     * @param request 生成的入参对象
     * @return
     */
    public KiaBackFillResponse sendRequest(KiaBackFillReq request) {
        setMarshaller(marshaller);
        setUnmarshaller(marshaller);

        // 父类方法,获取WebServiceTemplate
        WebServiceTemplate webServiceTemplate = getWebServiceTemplate();
        // 创建消息发送器
        HttpComponentsMessageSender messageSender = new HttpComponentsMessageSender();
        // 设置连接超时时间为2秒
        messageSender.setConnectionTimeout(2000);
        // 设置读取超时时间为2秒
        messageSender.setReadTimeout(2000);
        webServiceTemplate.setMessageSender(messageSender);

        // 发送消息,泛型是你生成的出参对象
        JAXBElement<KiaBackFillResponse> responseElement =
                (JAXBElement<KiaBackFillResponse>) webServiceTemplate.marshalSendAndReceive(defaultUrl, request);

        return responseElement.getValue();
    }
}
调用方法
@Service
public class KiaEntryBackFillService {

    /**
     * 日志
     */
    private static final Logger logger = LoggerFactory.getLogger(KiaEntryBackFillService.class);

    /**
     * ws客户端
     */
    @Autowired
    private KiaWsClient wsClient;

    /**
     * 发送请求
     * @param inList
     */
    public void send(InputDataEntity inList) {
        // 创建请求对象
        KiaBackFillReq request = new KiaBackFillReq();
        InputData inData = new InputData();
        inData.getInputDataList().add(inList);
        request.setInputData(inData);

        // 发送请求并获取响应
        try {
            wsClient.sendRequest(request);
        } catch (Exception e) {
            if (logger.isErrorEnabled()) {
                logger.error("xxx", e);
            }
        }
    }
}

然后在你需要的地方调用这个service的send方法即可。

SoapUI使用

对接初期没有写好代码,但是又需要确认双方的出参入参准确性的时候,可以使用SoapUI工具进行接口调用。

创建一个soap项目,它会根据wsdl文件替你生成入参

在这里插入图片描述

填好参数,点击左上角箭头即可发送请求

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值