Springboot集成Axis2——通过wsdl生成webService

背景介绍

客户方需要通过WebService进行消息交互,并且文档中规定了wsdl格式。由于目前Springboot对cxf框架支持较好,并没对axis进行较好的集成,但是客户放所规定的wsdl又使用到了仅axis支持的rpc模式,因此不得不使用axis作为Webservice框架进行服务的服务端和客户端的搭建。由于涉及到业务环境,所以代码暂不提供,仅以此文作为搭建流程的记录。

下载Axis2

Axis2提供了wsdl2java的工具包,首先需要现在Axis2至本地目录(不用是项目目录)。官网下载地址,本人下载的版本为axis2-1.7.9。

下载完成后解压,进入bin目录会发现wsdl2java.sh (windows使用 wsdl2java.bat)
在这里插入图片描述

使用wsdl2java工具执行代码生成

服务端代码生成命令

命令格式为:

wsdl2java.sh -uri [wsdl文件路径] -d adb -s -ss -sd -ssi -o [代码生成路径]

例如:

wsdl2java.sh -uri ~alistair/notify-response.wsdl -d adb -s -ss -sd -ssi -o ~alistair/Projects/ws/server/notify

客户端代码生成命令

命令格式为:

wsdl2java.sh -uri [wsdl文件路径] -d adb -o [代码生成路径]

例如:

wsdl2java.sh -uri ~alistair/notify_response.wsdl -d adb -o ~alistair/Projects/ws/client

生成服务端代码

使用wsdl2java生成服务端代码,生成结果如下:
在这里插入图片描述
查看生成的resources/services.xml,该文件是服务的配置文件,可以看出ResultNotify为红色,是因为代码生成是大小写有无,将其改为小写resultNotify即可(目前是笔者遇到的这个问题,有可能只是个例)
在这里插入图片描述
代码生成完成后,对代码结构进行调整
在这里插入图片描述
将生成的配置文件放置resouces下,注意文件夹的路径,其中servicesPath后面会用到
在这里插入图片描述
修改pom,引入axis2相关包:

	<dependency>
	  <groupId>org.apache.axis2</groupId>
	  <artifactId>axis2-transport-http</artifactId>
	  <version>1.7.7</version>
	</dependency>
	<dependency>
	  <groupId>org.apache.axis2</groupId>
	  <artifactId>axis2-transport-local</artifactId>
	  <version>1.7.7</version>
	</dependency>
	<dependency>
	  <groupId>org.apache.axis2</groupId>
	  <artifactId>axis2-adb</artifactId>
	  <version>1.7.7</version>
	</dependency>

修改ServiceSkeleton类,增加服务端的业务处理逻辑:

public class CSPResponseServiceSkeleton
    implements CSPResponseServiceSkeletonInterface {
    /**
     * Auto generated method signature
     *
     * @param resultNotify0
     * @return resultNotifyResponse1
     */
    @Override
    public ResultNotifyResponse resultNotify(ResultNotify resultNotify0) {
        ResultNotifyResponse resultNotifyResponse = new ResultNotifyResponse();

        CSPResult result = new CSPResult();
        result.setResult(0);

        String errorDescription = new String();
        errorDescription.setString("this is alistair.chow's web service");
        result.setErrorDescription(errorDescription);

        resultNotifyResponse.setResultNotifyReturn(result);

        return resultNotifyResponse;
    }
}

增加severlet配置:

@Configuration
public class AxisConfig {

    @Bean
    public ServletRegistrationBean axisServlet(){
        ServletRegistrationBean axisServlet = new ServletRegistrationBean();
        axisServlet.setServlet(new AxisServlet());
        axisServlet.addUrlMappings("/services/*");
        // 设置服务路径,主要用于读取生成的services.xml文件,注意这里的serviesPath为保持和resouse下文件名一致
        String path = this.getClass().getResource("/servicesPath").getPath();
        axisServlet.addInitParameter("axis2.repository.path", path);
        axisServlet.setLoadOnStartup(1);

        return axisServlet;
    }
}

执行run,查看服务是否能正常运行:
在这里插入图片描述

生成客户端代码

使用wsdl2java生成客户端代码,生成结果如下:
在这里插入图片描述
调整代码位置,并新建一个客户端测试类ServiceClient,用户向服务端测试发送请求:
在这里插入图片描述
代码如下:

public class CSPResponseServiceClient {

    public static void main(String[] args) throws Exception{
        CSPResponseServiceStub stub = new CSPResponseServiceStub();
        CSPResponseServiceStub.ResultNotify resultNotify = new CSPResponseServiceStub.ResultNotify();
        org.apache.axis2.databinding.types.soapencoding.String cspId = new org.apache.axis2.databinding.types.soapencoding.String();
        cspId.setString("a");
        resultNotify.setCSPID(cspId);
        CSPResponseServiceStub.ResultNotifyResponse notifyResponse = stub.resultNotify(resultNotify);
        System.out.println(notifyResponse.getResultNotifyReturn().getResult());
        System.out.println(notifyResponse.getResultNotifyReturn().getErrorDescription());
    }
}

执行该main方法,可以看到为服务端处理后的消息:
在这里插入图片描述

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 20
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值