springboot+ApacheCXF实现WebService服务发布
一.先创建一个springboot项目
1.IDEA操作步骤:File -> New -> Project
2.进入如下界面后,选择“spring initializr”,点击next
3.进入如下界面,然后 next -> next -> finish,即可成功创建springboot项目。
二.导入需要的依赖
1.导入web依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2.引入使用CXF所需的依赖
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.5.1</version>
</dependency>
三.代码块
1.编写webservice实现类
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService(targetNamespace = "http://service.webservice_demo.hou.com")
public class HelloWebserviceImpl {
@WebMethod
public String sayHello(@WebParam(name = "personName") String personName){
System.out.println("获取的参数为:" + personName);
String string = "hello " + personName + ",this is my test webservice.";
return string;
}
}
2.编写WebService配置类
import javax.xml.ws.Endpoint;
@Configuration
public class WebServiceConfig {
/**
*配置webservice服务的统一前缀路径
*/
@Bean
public ServletRegistrationBean registrationBean() {
ServletRegistrationBean rsb = new ServletRegistrationBean(new CXFServlet(),"/webservice/*");
return rsb;
}
@Bean(name = Bus.DEFAULT_BUS_ID)
public SpringBus springBus(){
return new SpringBus();
}
@Bean
public HelloWebserviceImpl helloWebserviceImpl(){
return new HelloWebserviceImpl();
}
@Bean
public Endpoint endpoint(){
EndpointImpl endpoint = new EndpointImpl(springBus(),new HelloWebserviceImpl());
// //可选择通过getInInterceptors方法,为WebService服务添加拦截器。
// endpoint.getInInterceptors().add(new WebServiceInterceptor());
// 配置路径后缀
endpoint.publish("/hello");
System.out.println("--------------------------Webervice服务发布成功-------------------------");
return endpoint;
}
}
四.发布服务
1.启动springboot项目即可发布服务
2.查验WebService服务是否成功发布,浏览器访问输入“http://localhost:8080/webservice/hello?wsdl”,访问wsdl文件,如出现以下界面,即代表服务发布成功!
五.测试服务
方式一:通过idea生成客户端代码进行测试
1.file -> new -> project
2.进入以下界面,依次选择红框内容,然后点击“next”
2.给自己的客户端项目起个名字,然后点击“finish“”
3.新的项目打开之后,会自动弹出以下内容。上面红框输入访问wsdl文件时浏览器输入的地址,下面红框选择“client”,点击“ok”。
4.如下为自动生成的客户端代码,删除生成的example包(暂时不知道有什么用,里面的类有问题,不删除会影响测试)。
5.创建测试类,进行main方法测试
import javax.xml.rpc.ServiceException;
import java.rmi.RemoteException;
public class ClientTest {
public static void main(String[] args) throws ServiceException, RemoteException {
HelloWebserviceImplServiceLocator locator = new HelloWebserviceImplServiceLocator();
HelloWebserviceImpl helloWebservice = locator.getHelloWebserviceImplPort();
String message = helloWebservice.sayHello("小明");
System.out.println(message);
}
}
6.运行main方法,服务端和客户端控制台分别打印出以下信息。测试成功!
(服务端)
(客户端)
方式二:通过postman访问服务测试
2.
(请求参数样例)
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pm="http://service.webservice_demo.hou.com">
<soapenv:Header/>
<soapenv:Body>
<pm:sayHello>
<personName>小红</personName>
</pm:sayHello>
</soapenv:Body>
</soapenv:Envelope>
3.发送请求,服务端和客户端(posman)分别获得以下响应。测试成功
(服务端)
(postman)
【其他补充】
如果想要将xml文件格式的字符串作为参数进行传输,需要在将其放在“<![CDATA[参数内容]]>”中,如:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pm="http://service.webservice_demo.hou.com">
<soapenv:Header/>
<soapenv:Body>
<pm:sayHello>
<personName>
<![CDATA[
<student_req xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<name>小红</name>
<age>16</age>
<banji>高一七班</banji>
</student_req>
]]>
</personName>
</pm:sayHello>
</soapenv:Body>
</soapenv:Envelope>
结束语
结束,本人小菜鸟一枚,内容有什么问题欢迎大家指出哦。嘻嘻