Java代码实现SOAP和REST接口工具类_使用java实现soap接口调用的工具类-程序员宅基地

技术标签: jvm  java  开发语言  

SOAP(Simple Object Access Protocol)和REST(Representational State Transfer)是两种不同的Web服务通信协议,因此它们的接口工具类实现也有一些差异。

以下是一个简单的Java代码实现SOAP接口工具类的示例:

import javax.xml.namespace.QName;
import javax.xml.soap.*;

public class SoapClientUtil {

    private final String endpoint;
    private final String namespace;
    private boolean validate = false;

    public SoapClientUtil(String endpoint, String namespace) {
        this.endpoint = endpoint;
        this.namespace = namespace;
    }

    public void setValidate(boolean validate) {
        this.validate = validate;
    }

    public SOAPMessage sendMessage(String methodName, Object... params) throws Exception {
        
        // Create a SOAP message
        MessageFactory factory = MessageFactory.newInstance();
        SOAPMessage soapMessage = factory.createMessage();

        // Add SOAP envelope, header, and body elements
        SOAPEnvelope envelope = soapMessage.getSOAPPart().getEnvelope();
        if (validate) {
            envelope.addNamespaceDeclaration("xsd", "http://www.w3.org/2001/XMLSchema");
            envelope.addNamespaceDeclaration("xsi", "http://www.w3.org/2001/XMLSchema-instance");
            envelope.addNamespaceDeclaration("SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/");
            envelope.setAttributeNS("http://www.w3.org/2001/XMLSchema-instance", "noNamespaceSchemaLocation", "uss.xsd");
        }
        SOAPHeader header = envelope.getHeader();
        SOAPBody body = envelope.getBody();

        // Create the SOAP body message
        QName bodyName = new QName(namespace, methodName);
        SOAPBodyElement bodyElement = body.addBodyElement(bodyName);

        if (params != null) {
            for (Object param : params) {
                QName paramName = new QName(param.getClass().getName());
                SOAPElement soapElement = bodyElement.addChildElement(paramName);
                soapElement.setTextContent(param.toString());
            }
        }

        // Send the SOAP message to the endpoint and receive a response
        SOAPConnectionFactory connectionFactory = SOAPConnectionFactory.newInstance();
        SOAPConnection connection = connectionFactory.createConnection();
        SOAPMessage response = connection.call(soapMessage, endpoint);
        connection.close();

        return response;
    }
}

以下是一个简单的Java代码实现REST接口工具类的示例:

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

public class RestClientUtil {

    private final String endpoint;

    public RestClientUtil(String endpoint) {
        this.endpoint = endpoint;
    }

    public String sendRequest(String method, String... params) throws Exception {
        
        // Build the request URL
        StringBuilder urlBuilder = new StringBuilder(endpoint);
        if (params != null && params.length > 0) {
            urlBuilder.append("?");
            for (int i = 0; i < params.length; i += 2) {
                urlBuilder.append(params[i]);
                urlBuilder.append("=");
                urlBuilder.append(params[i+1]);
                if (i < params.length - 2) {
                    urlBuilder.append("&");
                }
            }
        }
        URL url = new URL(urlBuilder.toString());

        // Open a connection using the specified HTTP method
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod(method);

        // Read the response from the server
        StringBuilder response = new StringBuilder();
        BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String line;
        while ((line = rd.readLine()) != null) {
            response.append(line);
        }
        rd.close();

        // Close the HTTP connection
        conn.disconnect();

        return response.toString();
    }
}

需要注意的是,这些示例代码只实现了最基本的功能,实际使用时可能需要根据具体情况进行修改和扩展。同时还需要注意安全性和性能等方面的问题,例如SSL证书验证、连接池管理和结果缓存等。

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/MAOZEXIJR/article/details/130642591

智能推荐

BS架构与CS架构的区别(最详细)-程序员宅基地

文章浏览阅读10w+次,点赞121次,收藏777次。BS架构与CS架构的区别引言特点C/S系统结构B/S系统结构CS与BS的比较C/S 与 B/S 区别:现状与趋势(转自知乎)引言C/S结构,即Client/Server(客户机/服务器)结构,是大家熟知的软件系统体系结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,可以充分利用两端硬件环境的优势。早期的软件系统多以此作为首选设计标准。B/S结构,即Browse..._bs架构

2023深圳杯数学建模D题思路分析_2023深圳杯d题-程序员宅基地

文章浏览阅读1.1k次。主成分分析是对于原先提出的所有变量,将重复的变量(关系紧密的变量)删去多余,建立尽可能少的新变量,使得这些新变量是两两不相关的,而且这些新变量在反映课题的信息方面尽可能保持原有的信息。灰色预测是就灰色系统所做的预测。将相同本质的变量归入一个因子,可减少变量的数目,还可检验变量间关系的假设。它的基本原理是:为了从总体上把握两组指标之间的相关关系,分别在两组变量中提取有代表性的两个综合变量U1和V1(分别为两个变量组中各变量的线性组合),利用这两个综合变量之间的相关关系来反映两组指标之间的整体相关性。_2023深圳杯d题

杂学(考试前抱抱佛脚记录的东西)_a给b发1000块钱,手一抖打了10000,这个钱已经打到b的户口,但是事务还没有提交,-程序员宅基地

文章浏览阅读197次。【举例】:A去消费,花了1千元,A的妻子去查看他今天的消费记录(全表扫描FTS,妻子事务开启),看到确实是花了1千元,就在这时,A又花了1千元买了一个机械键盘,即新增INSERT了一条消费记录,并提交。【举例】:A给B发1000块钱,手一抖打了10000,这个钱已经打到B的户口,但是事务还没有提交,这时B查下卡,发现多了9000,兴奋坏了,但是A及时发现,马上回滚差点提交的事务,将数字改回1000再提交。(2)流图G的环形复杂度V(G)=E-N+2,其中,E是流图中边的条数,N是结点数。_a给b发1000块钱,手一抖打了10000,这个钱已经打到b的户口,但是事务还没有提交,

UUID介绍与生成的方法-程序员宅基地

文章浏览阅读337次。什么是UUID?UUID是Universally Unique Identifier的缩写,它是在一定的范围内(从特定的名字空间到全球)唯一的机器生成的标识符。UUID具有以下涵义:经由一定的算法机器生成为了保证UUID的唯一性,规范定义了包括网卡MAC地址、时间戳、名字空间(Namespace)、随机或伪随机数、时序等元素,以及从这些元素生成UUI..._时间戳生成uuid

【MaxCompute季报】MaxCompute新功能发布 2018Q4-程序员宅基地

文章浏览阅读57次。2018年Q4 MaxCompute发布了一系列新功能。 本文对主要新功能和增强功能进行了概述。SQL功能增强:Grouping Sets 多维聚合分析 (CUBEand ROLLUP)GROUPING 和 GROUPING_ID 函数UDF和外表功能增强SQL语言支持:数据集交集和补集Java UDX类型系统增强SQL性能优化..._maxcompute grouping sets 限制

linux中用xshell工具vim编辑文件不能鼠标右键粘贴复制问题_linux 不能右键-程序员宅基地

文章浏览阅读1k次。【代码】linux中用vim编辑文件不能鼠标右键粘贴复制问题。_linux 不能右键

随便推点

【noVNC】使用noVNC实现浏览器网页访问vnc(基于web的远程桌面)_网页 vnc-程序员宅基地

文章浏览阅读1.4k次,点赞14次,收藏21次。vnc novnc_网页 vnc

python爬取网页数据步骤,python爬取网页详细教程_python爬贴吧数据-程序员宅基地

文章浏览阅读970次,点赞20次,收藏25次。大家好,小编来为大家解答以下问题,利用python爬取简单网页数据步骤,怎么用python爬取网站上的数据,今天让我们一起来看看吧!下面就按这个路线逐一讲讲各部分的内容;HTTP协议是一个应用层面向对象协议,也叫超文本传输协议。是基于TCP协议的可靠传输,采用客户端/服务器端模式,指定了客户端可能发送给服务器什么样的消息,以及服务端给出什么样的响应。HTTP协议请求由状态行、请求头和请求正文三部分组成;请求端的HTTP报文叫做请求报文,响应端的叫做响应报文,通常,并不一定要有报文主体。_python爬贴吧数据

去除jQuery中DataGrid的滚动条_jqgrid滚动条-程序员宅基地

文章浏览阅读138次。在编程中,使用jQuery的DataGrid插件可以方便地展示和管理数据。然而,默认情况下,DataGrid会显示一个滚动条,以便在数据超出可见区域时进行滚动查看。为了去除DataGrid的滚动条,我们需要通过CSS样式来修改它的外观。接下来,我们需要初始化DataGrid并应用上述的CSS样式。通过以上步骤,你已经成功去除了jQuery中DataGrid的滚动条。现在,你可以根据自己的需求进行进一步的定制和样式修改。如果需要进一步配置DataGrid,你可以在初始化代码中添加适当的选项。_jqgrid滚动条

基于空洞卷积DCNN与长短期时间记忆模型LSTM的dcnn-lstm的回归预测模型-程序员宅基地

文章浏览阅读738次。基于空洞卷积DCNN与长短期时间记忆模型LSTM的dcnn-lstm的回归预测模型_dcnn-lstm

CentOS 7.0编译安装Nginx1.6.0+MySQL5.6.19+PHP5.5.14方法分享-程序员宅基地

文章浏览阅读92次。一、配置防火墙,开启80端口、3306端口CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙。1、关闭firewall:systemctl stop firewalld.service #停止firewallsystemctl disable firewalld.service #禁止firewall开机启动2、安装iptables防火墙...

Bing Maps进阶系列六:使用Silverlight剪切(Clip)特性实现Bing Maps的迷你小地图-程序员宅基地

文章浏览阅读25次。Bing Maps进阶系列六:使用Silverlight剪切(Clip)特性实现Bing Maps的迷你小地图  Bing Maps Silverlight Control虽然为我们提供了简洁、方面的开发模型,但也有许多不足之处,比如我们想实现一个迷你小地图功能,Bing Map Silverlight Control就没有这样的内置控件,要想实现这一功能就需要我们自己想办法。...