SpringBoot整合使用WebService

本文介绍如何在Spring Boot项目中使用CXF框架搭建WebService服务。主要内容包括引入依赖、定义WebService接口及其实现类、创建请求响应对象、配置CXF并测试服务访问。

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

一、引入jar包

通过maven导入 org.apache.cxf

		<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
			<version>3.2.4</version>
		</dependency>

二、WebService接口与实现类

1. WebService服务端接口创建

package cn.ty.start.webService;

import cn.ty.start.vo.*;

import javax.jws.WebMethod;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.ws.ResponseWrapper;


@WebService(name = "RmsPort", // 暴露服务名称
        targetNamespace = "http://webService.start.ty.cn"// 命名空间,一般是接口的包名倒序
)
public interface RmsPort {

    @WebMethod
    public @WebResult(name = "result") String sayHello(String user);

    @WebMethod
    @ResponseWrapper(targetNamespace = "http://webService.start.ty.cn")
    public InfoResultResponse info(InfoRequest infoRequest);

    @WebMethod
    @ResponseWrapper(targetNamespace = "http://webService.start.ty.cn")
    public JobResultResponse job(JobRequest jobRequest);

    @WebMethod
    @ResponseWrapper(targetNamespace = "http://webService.start.ty.cn")
    public CancelResultResponse cancel(CancelRequest cancelRequest);

    @WebMethod
    @ResponseWrapper(targetNamespace = "http://webService.start.ty.cn")
    public StatusResultResponse status(StatusRequest statusRequest);
}

2. 创建服务端接口实现类

package cn.ty.start.webService.impl;

import cn.ty.start.vo.*;
import cn.ty.start.webService.RmsPort;
import org.springframework.stereotype.Component;

import javax.jws.WebService;

@WebService(targetNamespace = "http://webService.start.ty.cn", // 与接口中的命名空间一致,一般是接口的包名倒
        endpointInterface = "cn.ty.start.webService.RmsPort"// 接口地址
)
@Component
public class RmsPortImplEx implements RmsPort {

    @Override
    public String sayHello(String user) {
        return "123123";
    }

    @Override
    public InfoResultResponse info(InfoRequest infoRequest) {
        return null;
    }

    @Override
    public JobResultResponse job(JobRequest jobRequest) {
        JobResultResponse jobResultResponse = new JobResultResponse();
        return jobResultResponse;
    }

    @Override
    public CancelResultResponse cancel(CancelRequest cancelRequest) {
        return null;
    }

    @Override
    public StatusResultResponse status(StatusRequest statusRequest) {
        return null;
    }
}

3. 创建服务端接口访问Vo类

/**
 * 接口请教类
 */
public class InfoRequest {
    public String params;
}

/**
 * 接口返回类
 */
public class InfoResultResponse {
    public String result;
}

4. 创建CXF配置类

WebService地址默认会在 endpoint.publish("/rms") 前加上 /services/,如下配置 /rms ,则访问地址为http://172.16.98.145:8080/RCS_Simulation/services/rms?wsdl

package cn.ty.start.webService;

import org.apache.cxf.Bus;
import org.apache.cxf.jaxws.EndpointImpl;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.annotation.Resource;
import javax.xml.ws.Endpoint;

@Configuration
public class CxfConfig {

    @Resource
    private Bus bus;

    @Resource
    private RmsPort rmsPort;

    /*
     * 发布endpoint
     */
    @Bean
    public Endpoint endpoint() {
        EndpointImpl endpoint = new EndpointImpl(bus, rmsPort);
        endpoint.publish("/rms");// 发布地址
        return endpoint;
    }
}

5. 启动服务后,在浏览器访问WebService地址,成功则搭建完成

在这里插入图片描述

6. 编写Demo测试访问

package cn.ty.start.webService;
 
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import org.apache.cxf.transport.http.HTTPConduit;
import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;

public class CxfClient {
    public static void main1(String[] args) {

        //创建动态客户端
        JaxWsDynamicClientFactory factory = JaxWsDynamicClientFactory.newInstance();
        Client client = factory.createClient("http://172.16.98.145:8080/RCS_Simulation/services/rms?wsdl");

        // 需要密码的情况需要加上用户名和密码
        //client.getOutInterceptors().add(new ClientLoginInterceptor(USER_NAME,PASS_WORD));
        HTTPConduit conduit = (HTTPConduit) client.getConduit();
        HTTPClientPolicy httpClientPolicy = new HTTPClientPolicy();
        httpClientPolicy.setConnectionTimeout(2000); //连接超时
        httpClientPolicy.setAllowChunking(false); //取消块编码
        httpClientPolicy.setReceiveTimeout(120000); //响应超时
        conduit.setClient(httpClientPolicy);
        //client.getOutInterceptors().addAll(interceptors);//设置拦截器
        try {
            Object[] objects = new Object[0];
            // invoke("方法名",参数1,参数2,参数3....);
            objects = client.invoke("sayHello", "sujin");
            System.out.println("返回数据:" + objects[0]);
        } catch (Exception e) {
            e.printStackTrace();

        }
    }

}
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值