当前位置: 首页 > article >正文

WebService详解

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.kler.cn/a/379373.html

相关文章:

  • js实现blob类型转化为excel文件
  • 全!新!LLM推理加速调研
  • FastAPI中如果async def和def 路由的区别
  • 【MogDB】MogDB5.2.0重磅发布第五篇-支持部分ORACLE的HINT
  • C++_day2
  • CentOS 7系统下Redis Cluster集群一键部署脚本发布
  • 服务器数据恢复—SAN环境中LUN映射错误导致文件系统一致性出错的数据恢复案例
  • 【neo4j】 图数据库neo4j cypher单一语句 optional 可选操作的技巧
  • “代码世界的必修课:Git完整指南“(3)
  • JVM基本结构和垃圾回收机制
  • 小白从零开始学c++之继承对象的内存空间
  • nodejs入门教程8:nodejs EventEmitter
  • 《Java 实现希尔排序:原理剖析与代码详解》
  • 三维测量与建模笔记 - 2.2 射影几何
  • Hive数据库操作语法
  • Java-I/O框架10:File类、文件操作
  • docker部署Flask+Vue3项目
  • Leetcode328奇偶链表,Leetcode21合并两个有序链表,Leetcode206反转链表 三者综合题
  • C++游戏开发前景讨论
  • [算法初阶]第二集 滑动窗口(已完结)
  • 【NCRE】全国计算机一级必刷选择题(真题476道)
  • 第三十三章 Vue路由进阶路由模块封装
  • 【LeetCode:153. 寻找旋转排序数组中的最小值 + 二分】
  • sql将查到的所有id,拼接成字符串,用逗号隔开,并排序
  • 路由器中怎麼設置代理IP?
  • 微服务设计模式 - 发布订阅模式(Publisher Subscriber Pattern)