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服务发布与调用就是这样,即可完成。如有疏漏欢迎交流。