WebService详解

news2024/11/6 0:37:24

WebService 是一种跨编程语言和跨操作系统平台的远程调用技术。所谓跨编程语言和跨操作平台,就是说服务
端程序采用 java 编写,客户端程序则可以采用其他编程语言编写,反之亦然!跨操作系统平台则是指服务端程序和客户端程序可以在不同的操作系统上
WebService 是一种标准化的网络服务,允许不同平台和应用程序之间通过网络进行通信。它使得不同语言和平台的应用能够互操作。以下是 WebService 的详细介绍,包括基本概念、类型、工作原理以及应用场景。
WebService 是实现不同系统和应用之间互操作的重要工具,选择合适的类型(SOAP 或 REST)以及开发工具,可以帮助开发人员高效地构建和集成网络服务。
SOAP: 基于 HTTP 协议,采用 XML 格式,用来传递信息的格式。
WSDL: 用来描述如何访问具体的服务。
UDDI: 用户自己可以按 UDDI 标准搭建 UDDI 服务器,用来管理,分发,查询
WebService 。其他用户可以 自己注册发布 WebService 调用。
WebService的话,估计定位问题需要现场抓包。

  1. 基本概念
    WebService:是一种能够通过网络提供特定功能或数据的服务,通常使用标准协议(如 HTTP、SOAP、REST)进行通信。
    协议:WebService 通常使用 XML 或 JSON 作为数据格式,使用 HTTP 或 HTTPS 作为传输协议。
  2. WebService 的类型
    WebService 主要有两种类型:
    SOAP WebService:
    基于 XML 的协议,用于交换结构化信息。
    使用 WSDL(Web Services Description Language)描述服务的接口和方法。
    具有较强的标准化和安全性,支持 WS-Security 等规范。
    RESTful WebService:
    基于 REST(Representational State Transfer)架构风格,通常使用 JSON 或 XML 格式。
    通过 HTTP 方法(GET、POST、PUT、DELETE)进行操作。
    轻量级,易于使用,适合移动应用和云服务。

工作原理

SOAP WebService 工作原理
服务发布:
使用 WSDL 文件描述服务的接口。
WSDL 文件定义了可用的操作、输入和输出参数、数据类型等。
客户端请求:
客户端生成 SOAP 消息,包含调用操作所需的数据。
通过 HTTP POST 将 SOAP 消息发送到服务端。
服务处理:
服务端接收请求,解析 SOAP 消息。
处理请求并生成 SOAP 响应消息。
响应返回:
服务端将响应消息通过 HTTP 返回给客户端。
RESTful WebService 工作原理
服务设计:
定义资源(例如,用户、订单)及其 URI。
使用 HTTP 方法对资源进行操作。
客户端请求:
客户端通过 URL 请求资源,通常使用 GET 获取数据,POST 创建数据。
服务处理:
服务端接收请求,处理相关业务逻辑。
响应返回:
服务端将处理结果(通常是 JSON 或 XML)返回给客户端。
4. 应用场景
跨平台应用:不同操作系统或编程语言的应用可以通过 WebService 进行数据交互。
移动应用:手机应用常通过 RESTful API 获取数据和服务。
企业服务:企业内部不同系统之间通过 WebService 进行集成。
云计算:云服务提供商提供的 API 通常都是 WebService,以便用户通过网络访问。
5. 开发与工具
SOAP WebService 开发工具:
Apache CXF、JAX-WS、Microsoft WCF。
RESTful WebService 开发工具:
Spring Boot、JAX-RS、Express.js(Node.js)。
6. 安全性
SOAP:支持 WS-Security,可以实现消息级别的安全性。
REST:通常通过 HTTPS 进行传输安全,使用 OAuth、JWT 等技术进行身份验证和授权。
7. 优缺点
SOAP 优点:
强类型、安全性高、支持事务。
SOAP 缺点:
复杂性高、开销大、学习曲线陡峭。
REST 优点:
简单、灵活、性能高、易于缓存。
REST 缺点:
缺乏标准化(安全、协议等),不适合需要复杂事务的场景。

调用webService接口的方式

由于业务需求对接一个比较老的平台使用到了webService接口,这里记录一下调用方法。
一般有三种方式调用webService接口,
1.以HttpURLConnection的方式调用
2、使用apache-cxf生成java类调用
3、使用AXIS调用WebService
1,直接AXIS调用远程的web service
2,直接SOAP调用远程的webservice
3.HttpURLConnection调用方式
webService WSDL 工具类
WebService和HTTP接口
技术协议:WebService是基于Web服务技术的通信协议,使用SOAP(Simple Object Access Protocol)作为消息格式,并使用WSDL(Web Services Description Language)描述服务接口。而HTTP接口是基于HTTP协议进行通信的接口。
消息格式:WebService使用XML作为消息格式,而HTTP接口可以使用多种数据格式,如JSON、XML、文本等。
传输方式:WebService通常使用HTTP或HTTPS协议作为传输方式,但也可以使用其他协议如SMTP、TCP等。而HTTP接口仅使用HTTP协议。
功能复杂度:WebService支持更复杂的功能,例如应用层的安全认证、事务处理、可靠的消息传输等。而HTTP接口通常用于简单的数据传输和资源操作。
接口描述:WebService使用WSDL来定义和描述服务接口,包括接口方法、参数、返回值等信息。而HTTP接口通常通过文档或约定来描述接口的使用方式。
使用场景:WebService通常用于构建分布式、跨平台的系统集成,适用于大型企业级应用。而HTTP接口更适合用于构建轻量级、简单的服务,适用于小型应用或移动端应用。
需要注意的是,WebService可以在HTTP协议上实现,因此某些WebService和HTTP接口可能在技术实现上有一定的重叠,但它们仍然属于不同的概念和使用场景。开发者在选择使用哪种方式时,应根据具体需求和系统规模来进行评估和选择。

银行的接口使用 Web Service 技术的主要原因

跨平台互操作性强:Web Service 基于 XML 和 HTTP 协议实现,在不同平台之间具有很好的兼容性和互操作性,因此可以方便地与各种语言和操作系统交互,能够为银行业务系统提供有效的跨平台支持。
标准化程度高:Web Service 采用的是一系列标准化协议和规范,如SOAP、WSDL、UDDI等,这些协议和规范为银行业务系统提供了一致的接口规范,简化了系统集成过程。
安全性能高:Web Service 支持安全性较好的 SOAP 协议,同时还可以使用基于 HTTPS 的传输安全措施,保障了通信过程中的保密性、完整性和可靠性。
可扩展性强:Web Service 基于 XML 技术,使得接口消息可以轻松地增加、修改和删除,同时支持多种数据格式和协议,为银行业务系统的可扩展性提供了有力保障。
综上所述,采用 Web Service 技术可以为银行业务系统提供稳定、可靠、安全、高效的接口服务,满足银行在多平台、多系统、多语言、大用户量等方面的需求。

HttpURLConnection 类进行 WebService

使用 HttpURLConnection 类进行 WebService 调用并将数据对象转换为 XML,通常可以通过 JAXB 或手动拼接 XML 字符串来实现。以下是一个简单的示例。

  1. 数据对象定义

首先,定义一个数据对象,例如 MyRequest

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = "MyRequest")
public class MyRequest {
    private String name;

    public MyRequest() {}

    public MyRequest(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
  1. 数据对象转 XML

使用 JAXB 将对象转换为 XML:

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import java.io.StringWriter;

public class XmlUtils {
    public static String objectToXml(MyRequest request) throws JAXBException {
        JAXBContext context = JAXBContext.newInstance(MyRequest.class);
        Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);

        StringWriter writer = new StringWriter();
        marshaller.marshal(request, writer);
        return writer.toString();
    }
}
  1. 使用 HttpURLConnection 调用 WebService

然后,使用 HttpURLConnection 发送请求:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class WebServiceClient {
    public static void main(String[] args) {
        try {
            MyRequest request = new MyRequest("World");
            String xmlRequest = XmlUtils.objectToXml(request);

            URL url = new URL("http://localhost:8080/ws/myEndpoint");
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Content-Type", "application/xml; charset=UTF-8");
            connection.setDoOutput(true);

            // 发送请求
            try (OutputStream os = connection.getOutputStream()) {
                os.write(xmlRequest.getBytes("UTF-8"));
            }

            // 读取响应
            BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            StringBuilder response = new StringBuilder();
            String inputLine;
            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();

            System.out.println("Response: " + response.toString());
        } catch (IOException | JAXBException e) {
            e.printStackTrace();
        }
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

若依框架-添加测试类-最新

1、在【ruoyi-admin】的pom.xml下添加依赖 <!-- 单元测试--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-test</artifactId><scope>test</scope></dependency><dependency>…

CSS基础概念:什么是 CSS ? CSS 的组成

什么是 CSS&#xff1f; CSS&#xff08;层叠样式表&#xff0c;Cascading Style Sheets&#xff09;是一种用于控制网页外观的样式表语言。通过定义样式规则&#xff0c;CSS 可以指定 HTML 页面中各个元素的显示方式&#xff0c;包括颜色、布局、字体、间距等。 与 HTML 专注…

解密RFID技术提升应急消防管理效率的过程

一、部署RFID消防应急解决策略的具体步骤 &#xff08;1&#xff09;需求探讨与战略规划阶段 深入探究&#xff1a;全面、深刻地理解消防领域在资源分配、人员跟踪、应急救援等方面的实际需求。与消防机构紧密合作&#xff0c;共同确定RFID技术的应用提升和具体实施范围。 细…

国内短剧源码短剧系统搭建小程序部署H5、APP打造短剧平台

​在当今的互联网时代&#xff0c;短剧作为一种新兴的娱乐形式&#xff0c;受到了越来越多用户的喜爱。为了提供更好的用户体验和满足用户需求&#xff0c;一个好的短剧系统需要具备多元化的功能和优质的界面设计。 本文将介绍国内短剧源码短剧系统搭建小程序部署H5、APP所需的…

使用docker安装zlmediakit服务(zlm)

zlmediakit安装 zlmediakit安装需要依赖环境和系统配置&#xff0c;所以采用docker的方式来安装不容易出错。 docker pull拉取镜像(最新) docker pull zlmediakit/zlmediakit:master然后先运行起来 sudo docker run -d -p 1935:1935 -p 80:80 -p 8554:554 -p 10000:10000 -p …

qt QDragEnterEvent详解

1、概述 QDragEnterEvent是Qt框架中用于处理拖放进入事件的一个类。当用户将一个拖拽对象&#xff08;如文件、文本或其他数据&#xff09;拖动到支持拖放操作的窗口部件&#xff08;widget&#xff09;上时&#xff0c;系统会触发QDragEnterEvent事件。这个类允许开发者在拖拽…

HarmonyOS Next星河版笔记--界面开发(3)

属性 1.1.设计资源-svg图标 需求&#xff1a;界面中展示图标→可以使用的svg图标(任意放大缩小不失真、可以改变颜色) 使用方式&#xff1a; ①设计师提供&#xff1a;基于项目的图标&#xff0c;拷贝到项目目录使用 Image($r(app.media.ic_dianpu)) .width(40) fillColor…

查找连表的倒数第k个节点

居安思危 何解&#xff1f; 1、假如有1、2、3三个节点&#xff0c;找倒数第二个&#xff0c;实际是整数第几个&#xff1f; 3-21 2 &#xff1a; 及 length - k 1 ,所以先遍历找节点长度&#xff0c;在遍历找所需节点 // 今天这不是力扣的var findNode function(head , k){…

陪玩系统源码APP中的语音聊天直播房间有哪些功能?

陪玩系统源码APP通常采用Springboot、MybatisPlus和MySQL等后端技术栈来构建后端服务。这些技术提供了强大的数据处理能力和灵活的扩展性&#xff0c;能够满足高并发、低延迟的业务需求。 陪玩系统源码线上线下家政游戏陪玩前端开发框架如uniapp&#xff08;针对Web和小程序&am…

【python】OpenCV—findContours(4.3)

文章目录 1、功能描述2、代码实现3、完整代码4、结果展示5、涉及到的库函数5.1、cv2.Canny5.2 cv2.boxPoints 6、参考 1、功能描述 找出图片中的轮廓&#xff0c;拟合轮廓外接椭圆和外接矩阵 2、代码实现 导入必要的库&#xff0c;固定好随机种子 import cv2 as cv import …

介绍目标检测中mAP50和mAP50-95的区别

在目标检测任务中&#xff0c;mAP&#xff08;mean Average Precision&#xff09;是一个常用的性能评估指标&#xff0c;用于衡量模型在不同类别和不同IoU&#xff08;Intersection over Union&#xff09;阈值下的平均精度。mAP50和mAP50-95是mAP的两个特定版本&#xff0c;它…

三维测量与建模笔记 - 2.2 射影几何

教程中H矩阵写的有问题&#xff0c;上图中H矩阵应该是&#xff08;n1) x (m1) 共点不变性,下图中黄色方块标记的点&#xff0c;在射影变换前后&#xff0c;虽然直线的形状有所变化&#xff0c;但仍然相交于同一个点。 共线不变性&#xff0c;下图黄色标记的两个点&#xff0c;在…

【设计模式】策略模式定义及其实现代码示例

文章目录 一、策略模式1.1 策略模式的定义1.2 策略模式的参与者1.3 策略模式的优点1.4 策略模式的缺点1.5 策略模式的使用场景 二、策略模式简单实现2.1 案例描述2.2 实现代码 三、策略模式的代码优化3.1 优化思路3.2 抽象策略接口3.3 上下文3.4 具体策略实现类3.5 测试 参考资…

nuPlan最新SOTA,香港科技大学发布基于学习决策范围内的规划PlanScope

nuPlan最新SOTA&#xff0c;香港科技大学发布基于学习决策范围内的规划PlanScope Abstract 在自动驾驶的背景下&#xff0c;基于学习的方法在规划模块的开发中表现出了很大的潜力。在规划模块的训练过程中&#xff0c;直接最小化专家驾驶日志与规划输出之间的差异是一种广泛采…

String字符串 Random数字运算

Java API String 在使用String类进行字符串操作之前需要对String类进行初始化,在Java中可以通过以下两种方式对String类进行初始化 (1) 使用字符串常量 直接初始化一个String对象,具体代码如下 这是比较简化的写法 String a "abd"; (2) 使用String类的构造方法…

【Maven】——基础入门,插件安装、配置和简单使用,Maven如何设置国内源

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 引入&#xff1a; 一&#xff1a;Maven插件的安装 1&#xff1a;环境准备 2&#xff1a;创建项目 二…

王道408 DS 数据结构笔记

408 数据结构 文章目录 线性表顺序表静态分配动态分配算法设计 链表单链表双链表循环链表循环单链表循环双链表 静态链表算法设计 栈顺序栈共享栈链式栈算法设计应用 队列循环队列链队列算法设计 串顺序存储链式存储串的模式匹配 树二叉树线索二叉树树、森林树、森林的存储树和…

这款Chrome 插件,帮助任意内容即可生成二维码

前言 随着二维码的流行&#xff0c;真的是生活中越来越多的地方都有二维码了。在我们上网的时候&#xff0c;其实也可以快速的让网址生成一个二维码&#xff0c;然后我们手机扫描一下这个二维码就可以快速的在手机上打开网页了。而且&#xff0c;不仅是生成网址的二维码&#…

25届大模型秋招总结经验分享(互联网版)

个人背景&#xff1a;2硕&#xff0c;多段大厂实习&#xff0c;无a&#xff0c;学术能力拉垮 面试感受 \1. 大模型主要分为基座组和业务组&#xff0c;基座组的面试难度明显要求比业务组高&#xff0c;一般少不了各种公式推导&#xff0c;手撕源码&#xff0c;并要求对一些实…

使用Django Channels实现WebSocket实时通信

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Django Channels实现WebSocket实时通信 Django Channels 简介 环境搭建 安装 Django 和 Channels 创建 Django 项目 配置 A…