使用wsimport命令将wsdl文件生成服务端以及客户端

背景介绍

最近在做一项目,内部系统之间的调用通过ESB系统进行连接的,由于需要作为客户端对接第三方服务端系统,也需要自己系统作为服务端让其他系统调用,所以所有的服务端都需要将服务(接口)发布到ESB上。为了更方便客户端的调用,根据接口文档生成WSDL文件,让其客户端能快速的开发使用。把使用后的流程以及使用总结给与大家分享。

WSDL文件介绍

WSDL 文档仅仅是一个简单的XML文档。它包含一系列描述某个 web service 的定义。

APACHE.CXF介绍

Apache CXF = Celtix + XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF。CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用。Apache CXF已经是一个正式的Apache顶级项目。

soapui介绍

soapui提供一个工具通过soap/http来检查,调用,实现web service和web service的功能/负载/符合性测试。该工具既可作为一个桌面应用软件使用,也可利用插件集成到Eclipse,maven2.X,netbeans 和intellij中使用。我们这里是使用软件进行单独测试的,安装部署以及使用情况请自行查阅资料。

自身系统作为客户端

当我们作为客户端,去调用第三方服务端时,先拿到wsdl文件,可以使用soapUI来检查是否wsdl文件正确性,正确无误可进行后续操作。

流程

在这里插入图片描述

验证WSDL文件有效

使用soapui可以进行验证
在这里插入图片描述

命令生成java代码

wsimport的用法
wsimport [options] <WSDL_URI>
比较常用的[options]有:

  1. -d
    在指定的目录生成class文件
  2. -clientjar
    在当前目录生成jar文件,结合-d 可以在指定的目录生成jar文件
  3. -s
    在指定的目录生成java源文件
  4. -p
    指定生成文件的包结构
  5. -keep
    在生成class文件,或者jar包时,同时保留java源文件
    例如:wsimport -s D:\temp -p com.yyy xxx.wsdl
    yyy最好与你生成代码后存放的服务包名一致,xxx为你的wsdl文件名称。
    在这里插入图片描述

将代码存放到系统指定位置

在这里插入图片描述
在这里插入图片描述
注意2点:
1、代码中的wsdl文件存放目录需要修改为程序存放wsdl的目录。
2、wsdl文件中的地址请修改为正确地址。

Apache CXF引用

在这里插入图片描述
版本根据实际情况而定。

代码整合

在这里插入图片描述

自身作为webService服务端

当第三方系统调用自身系统的api接口时,需要自身系统来做webService服务,将API发布到ESB系统。

流程

在这里插入图片描述

发布webService服务

其他的流程和作为客户端流程一致,就不用多说了,详细的介绍一下发布webService服务的步骤。
1、实现类编写,用于业务逻辑处理,处理客户端发来的请求。
在这里插入图片描述
2、配置类编写,用于发布服务。

package com.vrv.servers.config;
 
import com.sun.org.apache.bcel.internal.generic.IUSHR;
import com.vrv.servers.impi.UserServiceImpi;
import com.vrv.servers.service.IUserService;
import org.apache.cxf.Bus;
import org.apache.cxf.bus.spring.SpringBus;
import org.apache.cxf.jaxws.EndpointImpl;
import org.apache.cxf.transport.servlet.CXFServlet;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
import javax.xml.ws.Endpoint;
 
@Configuration
public class CxfConfig {
   @Autowired
   private Bus bus;
 
   @Autowired
   IUserService userService;
 
   /**
    * 此方法作用是改变项目中服务名的前缀名,此处127.0.0.1或者localhost不能访问时,请使用ipconfig查看本机ip来访问
    * 此方法被注释后:wsdl访问地址为http://127.0.0.1:8080/services/user?wsdl
    * 去掉注释后:wsdl访问地址为:http://127.0.0.1:8080/soap/user?wsdl
    *
    * @return
    */
   @Bean
   public ServletRegistrationBean disServlet() {
      ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new CXFServlet(), "/UserServiceImpi/*");
      return servletRegistrationBean;
   }
   @Bean(name = Bus.DEFAULT_BUS_ID)
   public SpringBus springBus() {
      return new SpringBus();
   }
 
   /** JAX-WS
    * 站点服务
    * **/
   @Bean
   public Endpoint endpoint() {
      EndpointImpl endpoint = new EndpointImpl(bus, userService);
      endpoint.publish("/ces");
      return endpoint;
   }
}

访问 http://127.0.0.1:服务端口/UserServiceImpi/ces?wsdl
该请求是可以获取得到wsdl文档的
http://127.0.0.1:服务端口/UserServiceImpi 即可访问到你发布的webService服务提供的接口。

总结

本人使用的是springboot+webService实现的,也存在其他办法实现,在此不做过多的介绍,大致流程基本一致,需要掌握的知识点:wsdl+soapui+webService+cxf+springboot+以及jdk的wsimport命令。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值