java webservice 根据wsdl文件生成客户端代码;webservice可视化测试工具SOAPUI;

背景

最近要对接HIS系统,对方提供的接口是webservice的(有点古老),对方是webservice的提供方,提供了wsdl文件,我方需要根据wsdl文件生成java代码,intellij idea生成webservice客户端代码支持的不是很好,研究得知,可通过wsimport命令来生成,

  • wsimport 根据wsdl文件生成java代码;
  • wsgen 根据源码生成wsdl描述文件,具体来说就是根据endpoint implementation class生成必要的文件,包括但不限于wsdl文件。

这两个命令在%JAVA_HOME%\bin下。

根据wsdl生成java代码

wsimport -encoding utf8 -p 包名 -wsdllocation http://somedomain/some/path/some.wsdl  wsdl文件路径
  • -encoding,指定生成的java文件的编码
  • -p,指定生成的java包名
  • -wsdllocation,指定生成的java中wsdl的路径
  • wsdl文件路径,通常会将wsdl保存为本地文件

注意的点

@WebServiceClient的类

生成后的文件,先找到一个注解有javax.xml.ws.WebServiceClient的类,这个类对应着wsdl文件中的service元素

<service name="service_name">
</service>

这个类通常指定了wsdl的位置及namespaceURI,

import javax.xml.ws.Service;

@WebServiceClient(name = "SomeService", targetNamespace = "http://some.domain", wsdlLocation = "http://domain.com/path/some.wsdl")
public class SomeService
    extends Service
{

    private final static URL PREFIX_WSDL_LOCATION;

    static {
        URL url = null;
        WebServiceException e = null;
        try {
            url = new URL("http://domain.com/path/some.wsdl");
        } catch (MalformedURLException ex) {
            e = new WebServiceException(ex);
        }
        PREFIX_WSDL_LOCATION= url;
    }
   }

@WebService的类

找到注解有 javax.jws.WebService的类,这个类对应着wsdl文件中的portType元素。

<portType name="SomePortType">
 <operation name="operation_name">
    <documentation>Service definition of function ns__operation_name</documentation>
    <input message="输入参数"/>
    <output message="输出参数"/>
  </operation>
</portType>

这个类中通常会定义了很多方法,

@WebService(name = "SomePortType", targetNamespace = "http://some.domain")
@XmlSeeAlso({
    com.package.ObjectFactory.class
})
public interface SomePortType {


    @WebMethod(operationName = "someOperation")
    @WebResult(name = "someResult", targetNamespace = "")
   //省略
    public String someOperation(
        @WebParam(name = "输入参数1", targetNamespace = "")
        String someInput,
        @WebParam(name = "输入参数2", targetNamespace = "")
        String someInput2);

ObjectFactory

还有一个ObjectFactory类,但

import javax.xml.bind.annotation.XmlRegistry;
@XmlRegistry
public class ObjectFactory {}

基本用法

 注解有WebServiceClient的类 someService = new 注解有WebServiceClient的类;
 final SomePortType  somePortType = someService.getSome();
 final String 输出参数 = somePortType.目标方法(输入参数)

好用的SOAP ui测试工具

我们先直观的感受下wsdl文件,wsdl文件用来描述一个webservice提供了哪些服务;比如天气webservice,http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl,浏览器中打开如下
在这里插入图片描述
最重要的是wsdl:service节点,提供了4个端口,2个webservice、2个http的。

<wsdl:service name="WeatherWebService">
	<wsdl:documentation xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">.....</wsdl:documentation>
	<wsdl:port name="WeatherWebServiceSoap" binding="tns:WeatherWebServiceSoap">
		<soap:address location="http://www.webxml.com.cn/WebServices/WeatherWebService.asmx"/>
	</wsdl:port>
	<wsdl:port name="WeatherWebServiceSoap12" binding="tns:WeatherWebServiceSoap12">
		<soap12:address location="http://www.webxml.com.cn/WebServices/WeatherWebService.asmx"/>
	</wsdl:port>
	<wsdl:port name="WeatherWebServiceHttpGet" binding="tns:WeatherWebServiceHttpGet">
		<http:address location="http://www.webxml.com.cn/WebServices/WeatherWebService.asmx"/>
	</wsdl:port>
	<wsdl:port name="WeatherWebServiceHttpPost" binding="tns:WeatherWebServiceHttpPost">
		<http:address location="http://www.webxml.com.cn/WebServices/WeatherWebService.asmx"/>
	</wsdl:port>
</wsdl:service>

就像postman是http的ui客户端,SoapUI是web service的ui客户端,用来测试非常方便,注意下载开源版。
在这里插入图片描述
新建SOAP project,输入wsdl地址,http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl,点击能看到定义服务的URI和SOAP版本等信息,WeatherWebServiceSoap是SOAP 1.1版本,WeatherWebServiceSoap12是SOAP 1.2版本。
在这里插入图片描述

在这里插入图片描述
双击Request 1,点击绿色箭头就可以执行了,右侧是执行结果。
在这里插入图片描述

webservice仍然是使用的http来通信的,只是发送的内容遵循SOAP格式要求,这一点可通过http log查看。
在这里插入图片描述
http的请求体

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://WebXml.com.cn/">
   <soapenv:Header/>
   <soapenv:Body>
      <web:getSupportCity>
         <!--Optional:-->
         <web:byProvinceName>?</web:byProvinceName>
      </web:getSupportCity>
   </soapenv:Body>
</soapenv:Envelope>

http响应体

<?xml version="1.0" encoding="utf-8"?>
<soap:envelope
	xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:xsd="http://www.w3.org/2001/XMLSchema">
	<soap:body>
		<getsupportcityresponse
			xmlns="http://WebXml.com.cn/">
			<getsupportcityresult>
				<string>........</string>
			</getsupportcityresult>
		</getsupportcityresponse>
	</soap:body>
</soap:envelope>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/784623.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

复分析——第10章——Θ函数应用(E.M. Stein R. Shakarchi)

第10章 Θ函数的应用 (Applications of Theta Functions) The problem of the representation of an integer n as the sum of a given number k of integral squares is one of the most celebrated in the theory of numbers. Its history may be traced back to Diopha…

列表渲染 v-for

列表渲染v-for 使用v-for指令基于数组渲染一个列表&#xff0c;v-for指令的值需要使用item in/of items形式的特殊语法&#xff0c;其中items是源数据的数组&#xff0c;而item是迭代的别名。 代码实例&#xff1a; <template> <div><p v-for"item in na…

Java基础概念

1.注释和关键字 &#xff08;1&#xff09;注释 什么是注释&#xff1f;注释就是对代码进行解释说明的文字 注释的分类&#xff1f;单行注释&#xff0c;多行注释&#xff0c;文档注释 注释的使用细节&#xff1f; 注释的内容不会参与编译和运行&#xff0c;仅仅是对代码的…

使用vllm部署大语言模型

vLLM是一个快速且易于使用的库&#xff0c;用于LLM&#xff08;大型语言模型&#xff09;推理和服务。通过PagedAttention技术&#xff0c;vLLM可以有效地管理注意力键和值内存&#xff0c;降低内存占用和提高计算效率。vLLM能够将多个传入的请求进行连续批处理&#xff0c;从而…

智能视频监控如何助力体育场馆安全管理:安防监控EasyCVR视频综合管理方案

近期有新闻报道&#xff0c;6月30日&#xff0c;17岁的中国国家羽毛球运动员在亚洲青年羽毛球锦标赛中&#xff0c;突然晕倒并抽搐&#xff0c;尽管被送往医院抢救&#xff0c;该运动员仍在当晚不幸离世。运动猝死不仅发生于职业运动员身上&#xff0c;在普通健身者中也时有发生…

nodejs + vue3 模拟 fetchEventSouce进行sse流式请求

先上效果图: 前言: 在GPT爆发的时候,各项目都想给自己的产品加上AI,蹭上AI的风口,因此在最近的一个需求,就想要给项目加入Ai的功能,原本要求的效果是,查询到对应的数据后,完全展示出来,也就是常规的post请求,后来这种效果遇到了一个很现实的问题:长时间的等待。我…

4个方法帮助你解决RAR解压文件时提示密码错误问题

在日常工作和学习中&#xff0c;我们经常需要处理各种压缩文件&#xff0c;这些文件有时为了保护内容安全&#xff0c;会被设置密码。然而&#xff0c;在解压这些文件时&#xff0c;如果遇到“密码错误”的提示&#xff0c;可能会让人感到十分棘手。今天&#xff0c;我们就来探…

[ICS] Modbus未授权攻击S7协议漏洞利用

工业控制系统历史 在可编程逻辑控制器(plc)成为标准之前&#xff0c;工厂车间自动化是通过机架和机架的工业继电器&#xff0c;气动柱塞计时器和电磁计数器来控制电机的启动和停止&#xff0c;阀门的打开以及其他与控制相关的过程交互。运行这种设置的控制程序根本不是程序&am…

如何使用 pytorch 创建一个神经网络

我已发布在&#xff1a;如何使用 pytorch 创建一个神经网络 SapientialM.Github.io 构建神经网络 1 导入所需包 import os import torch from torch import nn from torch.utils.data import DataLoader from torchvision import datasets, transforms2 检查GPU是否可用 dev…

Vue3基础知识:组合式API中的provide和inject,他们作用是什么?如何使用?以及案例演示

1.provide和inject相较于父子传递的不同在于provide,inject可以用于跨层级通信&#xff08;通俗易懂的讲就是可以实现爷孙之间的直接信息传递&#xff09;。 1.跨层级传递数据 1.在顶层组件通过provide函数提供数据 2.底层组件通过inject函数获取数据 演示一&#xff1a;跨…

Linux安装Jmeter及简单使用教程

Linux安装Jmeter 首先需要java环境 java --version官网 下载二进制包 #创建文件夹 sudo mkdir /usr/local/jmeter #解压 sudo tar zxvf apache-jmeter-5.6.3.tgz -C /usr/local/jmeter编辑配置文件 sudo vim /etc/profile&#xff0c;添加以下内容 export JMETER_HOME/usr/l…

【Linux系列2】Cmake安装记录

方法一 1. 查看当前cmake版本 [rootlocalhost ~]# cmake -version cmake version 2.8.12.22. 进行卸载 [rootlocalhost ~]# yum remove -y cmake3. 进行安装包的下载&#xff0c;也可以下载好安装包后传至相应的目录 [rootlocalhost ~]# mkdir /opt/cmake [rootlocalhost ~…

安防监控/视频汇聚平台EasyCVR设备录像回看请求播放时间和实际时间对不上,是什么原因?

安防监控EasyCVR视频汇聚平台可提供多协议&#xff08;RTSP/RTMP/国标GB28181/GAT1400/海康Ehome/大华/海康/宇视等SDK&#xff09;的设备接入、音视频采集、视频转码、处理、分发等服务&#xff0c;系统具备实时监控、云端录像、回看、告警、平台级联以及多视频流格式分发等视…

二手闲置平台小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;卖家管理&#xff0c;商品分类管理&#xff0c;商品信息管理&#xff0c;商品购买管理&#xff0c;商品配送管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;商品信息&a…

Xilinx FPGA:vivado关于IIC的一些零碎知识点

一、简介 IlC(inter-Integrated circuit)总线是一种由NXP(原PHILIPS)公司开发的两线式串行总线&#xff0c;用于连接微控制器及其外围设备。多用于主控制器和从器件间的主从通信&#xff0c;在小数据量场合使用&#xff0c;传输距离短&#xff0c;任意时刻只能有一个主机等特性…

RoPE旋转位置编码从复数到欧拉公式

第二部分 从复数到欧拉公式 先复习下复数的一些关键概念 我们一般用表示复数&#xff0c;实数a叫做复数的实部&#xff0c;实数b叫做复数的虚部 复数的辐角是指复数在复平面上对应的向量和正向实数轴所成的有向角 的共轭复数定义为&#xff1a;&#xff0c;也可记作&#xff0…

鸿蒙开发:Universal Keystore Kit(密钥管理服务)【密钥使用介绍及通用流程】

密钥使用介绍及通用流程 为了实现对数据机密性、完整性等保护&#xff0c;可使用生成/导入的密钥&#xff0c;对数据进行密钥操作&#xff0c;比如&#xff1a; [加密解密][签名验签][密钥协商][密钥派生]开发前请熟悉鸿蒙开发指导文档&#xff1a;gitee.com/li-shizhen-skin…

前端面试题28(Vue3的Teleport功能在什么场景下特别有用?能给个例子吗?)

Vue 3 的 Teleport 功能在需要将组件的渲染结果放置在 DOM 树中与当前组件位置无关的任意位置时特别有用。这通常涉及到需要将某些UI元素&#xff08;如模态框、弹出菜单、通知、工具提示等&#xff09;从其逻辑上的父级组件中“提取”出来&#xff0c;放置到页面的更高层级或完…

OpenAI Gym Atari on Windows

题意&#xff1a;在Windows系统上使用OpenAI Gym的Atari环境 问题背景&#xff1a; Im having issues installing OpenAI Gym Atari environment on Windows 10. I have successfully installed and used OpenAI Gym already on the same system. It keeps tripping up when t…

2024已过半,还没试过在vue3中使用ioc容器吗?

Vue3 已经非常强大和灵活了&#xff0c;为什么还要引入 IOC 容器呢&#xff1f;IOC 容器离不开 Class&#xff0c;那么我们就从 Class 谈起 Class的应用场景 一提起 Class&#xff0c;大家一定会想到这是 Vue 官方不再推荐的代码范式。其实&#xff0c;更确切的说&#xff0c…