牛叔叔 的笔记

好好学习

2025-04-17 11:01

在SpringBoot项目中调用WebService

牛叔叔

Java后端

(54)

(0)

收藏

在Spring Boot项目中创建Web Service客户端可以通过以下步骤实现,这里以使用Apache CXF为例,因为它与Spring Boot集成较为方便:


步骤1:添加依赖


在Maven项目的pom.xml中添加Apache CXF和Spring Boot Starter依赖:

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
    <version>3.5.5</version> <!-- 使用最新版本 -->
</dependency>
<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>3.5.5</version>
    <scope>provided</scope>
</dependency>


步骤2:生成客户端代码


使用Maven插件从WSDL生成客户端存根:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-codegen-plugin</artifactId>
            <version>3.5.5</version>
            <executions>
                <execution>
                    <id>generate-sources</id>
                    <phase>generate-sources</phase>
                    <configuration>
                        <wsdlOptions>
                            <wsdlOption>
                                <wsdl>http://example.com/your-service?wsdl</wsdl>
                                <packagename>com.example.client</packagename>
                            </wsdlOption>
                        </wsdlOptions>
                    </configuration>
                    <goals>
                        <goal>wsdl2java</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>


运行mvn clean install生成代码到target/generated-sources目录。


步骤3:配置客户端Bean


创建配置类WebServiceClientConfig.java:

import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.example.client.YourServicePort; // 生成的接口

@Configuration
public class WebServiceClientConfig {

    @Bean
    public YourServicePort yourServiceClient() {
        JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
        factory.setServiceClass(YourServicePort.class);
        factory.setAddress("http://example.com/your-service");
        return (YourServicePort) factory.create();
    }
}


步骤4:使用客户端调用服务


在Service类中注入并使用客户端:

import com.example.client.YourServicePort;
import org.springframework.stereotype.Service;

@Service
public class YourServiceClient {

    private final YourServicePort yourServicePort;

    public YourServiceClient(YourServicePort yourServicePort) {
        this.yourServicePort = yourServicePort;
    }

    public void callWebService() {
        Object response = yourServicePort.yourOperation("requestParam");
        // 处理响应
    }
}


可选配置:调整CXF路径


在application.properties中自定义CXF Servlet路径:

cxf.path=/services/*


注意事项:

WSDL位置‌:确保生成代码时使用的WSDL地址正确,且可访问。

包名管理‌:生成代码时指定合理的Java包名,避免与其他代码冲突。

异常处理‌:建议添加对SOAP Fault和网络异常的捕获处理。

性能优化‌:对于高频调用,考虑使用CXF的异步调用或连接池配置。

安全配置‌:若服务需要WS-Security,需添加cxf-rt-ws-security依赖并配置策略。


替代方案:如果使用JAX-WS原生方式,可以通过@WebServiceRef注解注入:

@WebServiceRef
private YourService yourService;

public void callService() {
    YourPort port = yourService.getYourPort();
    port.yourMethod(...);
}


但需要确保应用服务器支持JAX-WS(Tomcat需要额外配置)。


建议根据实际服务复杂度选择合适的方式,Apache CXF在Spring Boot生态中集成度较好,推荐使用。


0条评论

点击登录参与评论