springBoot项目调用Webservice接口过程

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

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

创建一个maven项目,引入插件

<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.0modelVersion>

    <groupId>cn.longnowsgroupId>
    <artifactId>wsdl-to-java-demoartifactId>
    <version>1.0-SNAPSHOTversion>

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

    <build>
        <plugins>
            <plugin>
                <groupId>org.jvnet.jaxb2.maven2groupId>
                <artifactId>maven-jaxb2-pluginartifactId>
                <version>0.15.2version>
                <executions>
                    <execution>
                        <goals>
                            <goal>generategoal>
                        goals>
                    execution>
                executions>
                <configuration>
                    <generatePackage>cn.longnows.wsdl2java.generategeneratePackage>
                    		                   <generateDirectory>${project.basedir}/src/main/javagenerateDirectory>
                    <schemaDirectory>${project.basedir}/src/main/resourcesschemaDirectory>
                    <schemaIncludes>
                        <include>*.wsdlinclude>
                    schemaIncludes>
                configuration>
            plugin>
        plugins>
    build>

project>

springBoot项目调用Webservice接口过程_第1张图片

wsdl文件放到指定目录下

springBoot项目调用Webservice接口过程_第2张图片

生成代码

这时候你的maven插件中应该就有刚刚引入的插件了,没有的刷新一下maven
springBoot项目调用Webservice接口过程_第3张图片

运行结束后,可以看到所需的入参出参等文件都已经自动生成了,搬到自己项目中即可
springBoot项目调用Webservice接口过程_第4张图片

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

springBoot项目调用Webservice接口过程_第5张图片

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文件中会有一个标签,里面的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文件替你生成入参

springBoot项目调用Webservice接口过程_第6张图片

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

springBoot项目调用Webservice接口过程_第7张图片

你可能感兴趣的:(spring,boot,后端,java,web)