WebService服务端和客户端

WebService服务端和客户端

1.WebService简介

Web服务(Web Service)是在Web中使用的一种技术,它是一种平台独立、语言无关、网络传输可靠且基于服务的软件组件,可通过互联网使用。Web服务使用标准化的XML消息格式,实现应用程序之间的通信,它们可以按照客户端-服务器的形式工作,也可以真正地使用基于对等的面向服务的架构来处理分布式计算问题。Web服务的主要目的是促进各种应用程序之间的互操作,并推动基于Web的软件、网站和系统的互联互通。Web服务通常由三个主要组件构成:WSDL(Web服务描述语言)、SOAP(简单对象访问协议)和XML编码规则(XML文档)

2.相关依赖

<dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-core</artifactId>
            <version>3.1.11</version>
        </dependency>

        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>3.1.11</version>
        </dependency>

        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>3.1.11</version>
        </dependency>

        <!-- 加入cxf-restful依赖包 -->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxrs</artifactId>
            <version>3.1.11</version>
        </dependency>

        <!-- cxf:serve client  -->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
            <version>3.1.12</version>
        </dependency>

3.服务端接口定义

@WebService(name = "TestService",targetNamespace = "http://地址倒序")
public interface WebService {

    @WebMethod
    String getInfo(@WebParam(name = "name") String name);
}

@WebService:标注webService服务   name:暴露出来的webServiec名称  targetNamespace:命名空间
@WebMethod:webService方法   @WebParam:参数名称

4.服务端方法实现

@WebService(name = "TestService",targetNamespace = "http://命名空间")
@Component
public class WebServiceImpl implements WebService {
 @Override
    public String getInfo(String name) {
        EntitylVo vo = JSONObject.parseObject(vo, EntitylVo.class);
        System.out.println(vo.getId());
        System.out.println(vo.getDictLabel());
        return resultParam;
    }
}

@WebService 标识是webService服务的实现类   name:暴露出来的服务名称  targetNamespace:命名空间

5.配置服务端webServiec服务发布

@Configuration
public class cxfConfig {
    @Bean
    public ServletRegistrationBean disServlet() {
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new CXFServlet(), "/webService/*");
        return servletRegistrationBean;
    }
    @Bean(name = Bus.DEFAULT_BUS_ID)
    public SpringBus springBus() {
        return new SpringBus();
    }
    @Bean
    public Endpoint endpoint() {
        EndpointImpl endpoint = new EndpointImpl(springBus(), new WebServiceImpl());
        endpoint.publish("/TestService");
        return endpoint;
    }
}

6.查看webService服务接口

通过拼接 本地ip + 端口 + 发布时的配置信息,进行拼接查看wsdl接口文档
如:http://localhost:8082/webService

在这里插入图片描述

7.客户端调用工具类

public class ClientUtil {

    public static Object callWebSV(String wsdUrl, String operationName, String... params) throws Exception {
        JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
        Client client = dcf.createClient(wsdUrl);
        //client.getOutInterceptors().add(new ClientLoginInterceptor(USER_NAME, PASS_WORD));
        Object[] objects;
        // invoke("方法名",参数1,参数2,参数3....);
        objects = client.invoke(operationName, params);
        if (objects != null && objects.length > 0) {
            return objects[0];
        }
        return null;
    }
}

8.客户端调用服务端接口

    @Test
    public void test() throws Exception {
        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
        Thread.currentThread().setContextClassLoader(classLoader);
        String url = "http://localhost:8082/oak/webService/TestService?wsdl";
        String methodName = "getInfo";

        HashMap<String, Object> map = new HashMap<String, Object>();
        map.put("id",1L);
        map.put("dictLabel","参数");
        Object o = ClientUtil.callWebSV(url, methodName, JSON.toJSONString(map));
        if (o != null) {
            Map returnMap = JSONObject.parseObject(JSON.toJSONString(o), Map.class);
            if (returnMap.get("code").equals(200)) {
                System.out.println("调用成功");
            }else {
                System.out.println("调用失败");
            }
        }
    }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值