Spring Boot之搭建WebSerice服务

W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计。Web Service服务通常被定义为一组模块化的API,它们可以通过网络进行调用,来执行远程系统的请求服务。简而言之,就是可作为远程通信使用,是一种远程调用技术。
现在怎么在spring boot框架中搭建个webService服务:
一.注入相关依赖

         <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>3.1.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>3.1.6</version>
        </dependency>

二.编写配置类

/**
 * @ClassName: CxfConfig.java
 * @Description: webservice配置类
 * @author liangxu
 * @create 2018年5月8日下午7:25:36
 * @version 1.0
 * 
 */

@Configuration
public class CxgConfig {
    @SuppressWarnings({ "rawtypes", "unchecked" })
    @Bean
    public ServletRegistrationBean dispatcherServlet() {
        return new ServletRegistrationBean(new CXFServlet(), "/wsTest/*");
    }
    @Bean(name = Bus.DEFAULT_BUS_ID)
    public SpringBus springBus() {
        return new SpringBus();
    }
    @Bean
    public WsTestService wsTestService() {
        return new WsTestServiceImpl();
    }
    @Bean
    public Endpoint endpoint() {
        EndpointImpl endpoint = new EndpointImpl(springBus(), wsTestService());
        endpoint.publish("/wsTest");
        return endpoint;
    }
}

三.编写webServie服务接口及实现类

接口


@WebService
public interface WsTestService {

    @WebMethod
    String getString(String name);
}

实现类

//注解里加上targetNamespace及endpointInterface以防实现业务类和接口不在同一包下导致查询不到相关方法的报错。
//targetNamespace命名为接口所在包的反向命名赋值
//endpointInterface则为接口所在包名
@WebService(targetNamespace = "http://service.wsDemo.example.com/",serviceName="getString", endpointInterface = "com.example.wsDemo.service.WsTestService")
public class WsTestServiceImpl implements WsTestService {
    @Override
    @WebMethod
    public String getString(String name) {
        return "hello,"+name;
    }   
}

大功告成,webService服务已经编写完成,那怎么确定这个服务正常呢,如下即可测试:启动服务,在浏览器访问服务地址 ,并在地址后加上”?wsdl”,确认能否访问到如下信息,可以则服务发布成功,否则需要好好检查服务配置是否有问题再重新启动咯

例如我刚发布的服务,报文地址为:http://localhost:8080/wsTest/wsTest?wsdl,访问地址后,会有如下信息:
这里写图片描述

四.调用webService服务
那我再来远程调用下这个webService服务试一下咯,再另一个项目上的controller层 写如下接口方法,当然这个项目的依赖也要加上之前的两项依赖。(或者自己在webservice项目中写个测试类,用mian()方法调用也可以):

    @ApiOperation(value="webservice测试",notes="webservice测试")
    @RequestMapping(value="/wsTest.json", method= RequestMethod.GET)
    @ResponseBody
    public String wsTest(String a) throws Exception{
        JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
        Client client = dcf.createClient("http://localhost:8080/wsTest/wsTest?wsdl");
        Object[] objects = client.invoke("getString",a);
        //输出调用结果
        System.out.println(objects[0].toString());
        return objects[0].toString();
    }

输入参数”liangxu”,调用接口方法,可看到控制台打印的信息:“hello,liangxu”,说明调用webService服务成功。

webservice服务发布与调用就是这样,即可完成。如有疏漏欢迎交流。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值