【Java】soap协议发送webservice请求工具类

目前常用的跨应用跨平台之间的数据交互,通常采用webapi接口,双方约定请求地址、请求方式、请求参数、响应数据格式、传输数据的加解密方式等进行数据交互,目前做项目遇到一个上游数据提供方提供的接口是webservice的方式以soap协议进行数据交互,这个使用Java的库类封装了一个基于soap协议调用webservice请求返回数据的工具类,记录以作备忘。

导入依赖

 <!--httpclient-->
 <dependency>
     <groupId>org.apache.httpcomponents</groupId>
     <artifactId>httpclient</artifactId>
     <version>4.5.3</version>
 </dependency>
 <!--nutz 使用了其中的 base64的工具类,可替换为其他base64的工具类-->
 <dependency>
     <groupId>org.nutz</groupId>
     <artifactId>nutz</artifactId>
     <version>1.r.67</version>
 </dependency>

封装工具类

import org.apache.http.HttpEntity;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;
import org.nutz.repo.Base64;

import java.nio.charset.StandardCharsets;

/**
 * soap 协议发送webservice请求
 *
 * @author aaa
 * @date 2022/3/24 10:05
 */
public class WebServicePostSoapUtils {

    /**
     * 使用SOAP1.1发送消息
     *
     * @param postUrl webservice的URL
     * @param username Authorization 验证的用户名(根据webservice接口的验证规则决定是否添加)
     * @param password Authorization 验证的密码(根据webservice接口的验证规则决定是否添加)
     * @param soapXml 请求参数
     * @param soapAction 默认为空字符串
     * @return
     */
    public static String doPostSoap(String postUrl, String username, String password, String soapXml, String soapAction) {
        String retStr = "";
        // 创建HttpClientBuilder
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        // HttpClient
        CloseableHttpClient closeableHttpClient = httpClientBuilder.build();
        HttpPost httpPost = new HttpPost(postUrl);
        // 设置请求和传输超时时间
        RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(6000)
                .setConnectTimeout(6000).build();
        httpPost.setConfig(requestConfig);
        try {
            httpPost.setHeader("Authorization", "Basic " + Base64.encodeToString((username + ":" + password).getBytes(), false));
            httpPost.setHeader("Content-Type", "text/xml;charset=UTF-8");
            httpPost.setHeader("SOAPAction", soapAction);
            StringEntity data = new StringEntity(soapXml, StandardCharsets.UTF_8);
            httpPost.setEntity(data);
            CloseableHttpResponse response = closeableHttpClient.execute(httpPost);
            HttpEntity httpEntity = response.getEntity();
            if (httpEntity != null) {
                // 打印响应内容
                retStr = EntityUtils.toString(httpEntity, "UTF-8");
//                System.out.println("response:" + retStr);
            }
            // 释放资源
            closeableHttpClient.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return retStr;
    }
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Java EE常用框架 WebService 介绍 基于Web的服务。它使用Web(HTTP)方式,接收和响应外部系统的某种请求。从而实现远程调用 术语 XML. Extensible Markup Language -扩展性标记语言 WSDL – WebService Description Language – Web服务描述语言。 SOAP-Simple Object Access Protocol(简单对象访问协议) SOA(Service-Oriented Architecture) :面向服务的架构 它是一种思想,IBM大力倡导是即插即用的,IBM大力提倡,希望以组装电脑的方式来开发应用 它是目录服务,通过该服务可以注册和发布webservcie,以便第三方的调用者统一调用 使用: 二、我们可以使用Java自带的WsImport来实现本地代理。这种方法会将WebService翻译成Java类,我们使用类一样去访问WebService就行了。非常好用。 三、除了调用别人发布的webService,也可以自己发布WebService服务 四、CXF框架可以与spring无缝连接,就不用我们自己Endpoint了。它还能记录日志之类的 五、我们还可以使用Idea下的webservice,能够使用图形画面的方式获取本地代理和生成WSDL文件。 Activiti 介绍 Activiti5是一个业务流程管理(BPM)框架 如果我们的业务是比较复杂的话,我们才会用到工作流! 使用Activiti的步骤 定义工作流 画一个BPMN图就可以了 部署工作流 执行工作流-->按照我们定义的工作流来执行 工作流在执行的过程中肯定会涉及到很多数据,Activiti是默认提供数据库表给我们使用的 Activiti工作流框架快速入门: 定义工作流,使用插件来把我们的流程图画出来。这个流程图就是我们定义的工作流。 工作流引擎是工作流的核心,能够让我们定义出来的工作流部署起来。 由于我们使用工作流的时候是有很多数据产生的,因此Activiti是将数据保存到数据库表中的。这些数据库表由Actitviti创建,由Activiti维护。 部署完的工作流是需要手动去执行该工作流的。 根据由谁处理当前任务,我们就可以查询出具体的任务信息。 根据任务的id,我们就可以执行任务了。 细节 流程定义:涉及到了四张数据库表 我们可以通过API把我们的流程定义图读取出来 可以根据查询最新版本的流程定义 删除流程定义 部署流程定义的时候也可以是ZIP文件 流程运行:涉及到两个对象,四张数据库表: 流程实例 获取流程实例和任务的历史信息 判断流程实例是否为空来判断流程是否结束了 查看正在运行服务的详细信息 通过流程实例来开启流程 流程变量:它涉及到了两张表。 流 程变量实际上就是我们的条件。 作用 我们可以在流程开始的时候设置流程变量,在任务完成的时候设置流程变量。 运行时服务和流程任务都可以设置流程变量。 连线 通过连线我们可以在其中设置条件,根据不同的条件流程走不同的分支 排他网关 SpringData JPA 简介 API Repository接口 PagingAndSortingRepository JpaRepository JpaSpecificationExecutor 过滤条件查询接口 注解 nameQuery注解 SQL命名,调用的时候根据名称调用 查询注解 1,targetEntity 属性表示默认关联的实体类型,默认为当前标注的实体类。 2,cascade属性表示与此实体一对一关联的实体的级联样式类型。 3,fetch属性是该实体的加载方式,默认为即时加载EAGER 4,optional属性表示关联的该实体是否能够存在null值,默认为ture,如果设置为false,则该实体不能为null, 5, mapperBy属性:指关系被维护端 1,@JoinColumn注释是保存表与表之间关系的字段 2,如果不设置name,默认name = 关联表的名称+”-“+关联表
要使用Java发出请求WebService,你可以按照以下步骤进行操作: 1. 导入必要的库文件:在Java项目中,你需要导入相应的库文件,以便能够使用WebService相关的类和方法。具体的库文件取决于你使用的WebService框架,例如JAX-WS或Apache Axis等。 2. 创建客户端代理:使用WebService提供的WSDL(Web服务描述语言)文件,通过客户端代理工具生成客户端代码。这个代理类将充当与WebService进行交互的中间层。 3. 初始化WebService客户端:在Java代码中,你需要实例化WebService客户端类,并进行相应的配置。这包括设置WebService的地址、命名空间和其他参数。 4. 调用WebService方法:通过客户端代理类的实例,你可以直接调用WebService提供的方法。根据WebService的定义,可能需要提供相应的参数,并接收返回值。 5. 处理返回结果:根据具体需要,你可以对返回结果进行处理和解析。这可能涉及到XML解析、数据转换等操作。 下面是一个简单示例,用于展示如何使用Java发送SOAP请求到一个Web服务: ```java import javax.xml.namespace.QName; import javax.xml.soap.*; import java.io.ByteArrayOutputStream; public class WebServiceClient { public static void main(String[] args) { try { // 创建SOAP消息 SOAPMessage soapMessage = MessageFactory.newInstance().createMessage(); // 创建SOAP请求 SOAPPart soapPart = soapMessage.getSOAPPart(); SOAPEnvelope envelope = soapPart.getEnvelope(); envelope.addNamespaceDeclaration("web", "http://example.com/webservice"); SOAPBody soapBody = envelope.getBody(); QName operationName = new QName("http://example.com/webservice", "getHelloWorld"); SOAPBodyElement soapBodyElement = soapBody.addBodyElement(operationName); // 设置请求参数(如果有) QName parameterName = new QName("http://example.com/webservice", "name"); SOAPElement parameterElement = soapBodyElement.addChildElement(parameterName); parameterElement.setValue("John"); // 发送请求 SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance(); SOAPConnection soapConnection = soapConnectionFactory.createConnection(); String url = "http://example.com/webservice"; SOAPMessage response = soapConnection.call(soapMessage, url); // 处理响应 ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); response.writeTo(outputStream); String responseString = outputStream.toString(); // 打印响应结果 System.out.println("Response:\n" + responseString); // 关闭连接 soapConnection.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 这只是一个基本示例,实际上,你需要根据具体的WebService和框架进行相应的配置和参数设置。希望这能帮到你!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值