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>

结束语

结束,本人小菜鸟一枚,内容有什么问题欢迎大家指出哦。嘻嘻

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值