使用 java 向 WebService 发出 SOAP 请求

2023-11-27

我对如何通过 java 向 Web 服务发出请求有点困惑。

目前我唯一了解的是 Web 服务使用 xml 结构化消息,但我仍然不太明白如何构建我的请求。

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <getProductDetails xmlns="http://magazzino.example.com/ws">
      <productId>827635</productId>
    </getProductDetails>
  </soap:Body>
</soap:Envelope>

基本上我必须向网络服务发送 2 个参数,作为回报,我期望另外两个参数。

我想有一些罐子可以完成大部分工作,但我在网上没有找到。 有人可以向我解释一下依据吗?


SOAP 请求是一个 XML 文件,由您发送到服务器的参数组成。

SOAP 响应同样是一个 XML 文件,但现在包含服务想要为您提供的所有内容。

WSDL 基本上是一个 XML 文件,它解释了这两个 XML 的结构。


要在 Java 中实现简单的 SOAP 客户端,您可以使用 SAAJ 框架(它随 JSE 1.6 及更高版本一起提供):

用于 Java 的带有附件 API 的 SOAP (SAAJ)主要用于直接处理任何 Web 服务 API 中幕后发生的 SOAP 请求/响应消息。它允许开发人员直接发送和接收soap消息,而不是使用JAX-WS。

请参阅下面使用 SAAJ 进行 SOAP Web 服务调用的工作示例(运行它!)。它调用这个网络服务.

import javax.xml.soap.*;

public class SOAPClientSAAJ {

    // SAAJ - SOAP Client Testing
    public static void main(String args[]) {
        /*
            The example below requests from the Web Service at:
             http://www.webservicex.net/uszip.asmx?op=GetInfoByCity


            To call other WS, change the parameters below, which are:
             - the SOAP Endpoint URL (that is, where the service is responding from)
             - the SOAP Action

            Also change the contents of the method createSoapEnvelope() in this class. It constructs
             the inner part of the SOAP envelope that is actually sent.
         */
        String soapEndpointUrl = "http://www.webservicex.net/uszip.asmx";
        String soapAction = "http://www.webserviceX.NET/GetInfoByCity";

        callSoapWebService(soapEndpointUrl, soapAction);
    }

    private static void createSoapEnvelope(SOAPMessage soapMessage) throws SOAPException {
        SOAPPart soapPart = soapMessage.getSOAPPart();

        String myNamespace = "myNamespace";
        String myNamespaceURI = "http://www.webserviceX.NET";

        // SOAP Envelope
        SOAPEnvelope envelope = soapPart.getEnvelope();
        envelope.addNamespaceDeclaration(myNamespace, myNamespaceURI);

            /*
            Constructed SOAP Request Message:
            <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:myNamespace="http://www.webserviceX.NET">
                <SOAP-ENV:Header/>
                <SOAP-ENV:Body>
                    <myNamespace:GetInfoByCity>
                        <myNamespace:USCity>New York</myNamespace:USCity>
                    </myNamespace:GetInfoByCity>
                </SOAP-ENV:Body>
            </SOAP-ENV:Envelope>
            */

        // SOAP Body
        SOAPBody soapBody = envelope.getBody();
        SOAPElement soapBodyElem = soapBody.addChildElement("GetInfoByCity", myNamespace);
        SOAPElement soapBodyElem1 = soapBodyElem.addChildElement("USCity", myNamespace);
        soapBodyElem1.addTextNode("New York");
    }

    private static void callSoapWebService(String soapEndpointUrl, String soapAction) {
        try {
            // Create SOAP Connection
            SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
            SOAPConnection soapConnection = soapConnectionFactory.createConnection();

            // Send SOAP Message to SOAP Server
            SOAPMessage soapResponse = soapConnection.call(createSOAPRequest(soapAction), soapEndpointUrl);

            // Print the SOAP Response
            System.out.println("Response SOAP Message:");
            soapResponse.writeTo(System.out);
            System.out.println();

            soapConnection.close();
        } catch (Exception e) {
            System.err.println("\nError occurred while sending SOAP Request to Server!\nMake sure you have the correct endpoint URL and SOAPAction!\n");
            e.printStackTrace();
        }
    }

    private static SOAPMessage createSOAPRequest(String soapAction) throws Exception {
        MessageFactory messageFactory = MessageFactory.newInstance();
        SOAPMessage soapMessage = messageFactory.createMessage();

        createSoapEnvelope(soapMessage);

        MimeHeaders headers = soapMessage.getMimeHeaders();
        headers.addHeader("SOAPAction", soapAction);

        soapMessage.saveChanges();

        /* Print the request message, just for debugging purposes */
        System.out.println("Request SOAP Message:");
        soapMessage.writeTo(System.out);
        System.out.println("\n");

        return soapMessage;
    }

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 java 向 WebService 发出 SOAP 请求 的相关文章

  • 当同级滚动到达末尾时打开底部工作表吗?

    有没有办法将滚动事件从一个滚动视图 转发 到我的底部工作表 以便当我过度滚动第一个滚动视图时我的底部工作表开始展开 考虑这个小应用程序 public class MainActivity extends AppCompatActivity
  • 展开字符串中的环境变量

    是否有一些 java 实用程序 可以扩展 和 env 字符串中的变量 就像 bin MY PATH gt home john bin dev null 谢谢 基本上 您想要使用环境变量进行字符串插值并扩展主目录 我不知道执行后者的简单方法
  • 模拟匿名函数

    我正在编写 jUnits 但被 Lambda 表达式困住了 有没有办法模拟匿名函数 return retryTemplate execute retryContext gt return mockedResponse 在上面的代码中 我试图
  • Twitter4j - 超出速率限制

    我想让追随者使用getFollowersIds 在 Twitter4j 中 但我得到 连接错误异常 超过限速 public static void main String args try Twitter twitter TwitterFa
  • 最好的 Java 集合线程安全锁定机制?

    在 Java 中控制对集合的多次访问的最慢的线程安全机制是什么 我正在将对象添加到集合的顶部 但我非常不确定什么是性能最佳的集合 它是一个向量还是一个队列 我最初认为 ArrayList 会很快 但我进行了一些实验 发现它非常慢 编辑 在我
  • CompletableFuture:几个任务

    如何使用 5 个 CompletableFutures 异步执行 20 个 Runnable 任务 或 1 个任务 20 次 这就是我所拥有的 Runnable task gt long startTime System currentTi
  • 关于访问说明符

    我定义了一个类基 class Base private int i Base int i this i i 所以基类的对象可以访问私有变量 class BaseDemo public static void main String args
  • 对 Java 安全性和 BouncyCastle API 感到茫然和困惑

    我一直在尝试理解 Java 的 BouncyCastle 加密 API 不幸的是 我发现 Java 密码学总体上被服务提供者接口和术语所掩盖 以至于我无法理解任何东西的实际作用 我已经尝试反复阅读必要的文档 但它仍然难以理解 引入了许多远远
  • Java / Scala Future 由回调驱动

    简洁版本 我怎样才能创建一个Promise
  • Java中如何保存DOM文档?

    我在用DOM解析器和XPATH解析我的XML文件 我改变了一个节点的值Document Object 然而当我打开我的XML文件 它没有向我显示任何反射 我的DOM解析器代码如下 private void setPortNumber int
  • ScrollPane滚动到底部问题

    我的 Java 应用程序中有 TextArea 并且我附加了很多文本行 我需要 ScrollPane 滚动到最后附加的 到 TextArea 的底部 我怎样才能做到这一点 您可以通过将插入符号位置移动到底部来做到这一点 这会自动滚动 Tex
  • IBM Websphere JPA 配置 - 如何更新 persistence.xml

    我是 EJB 3 和 JPA 的新手 我在应用程序服务器中创建了一个数据源 它是jdbc AppDataSource 默认持久性提供程序保留为com ibm websphere persistence PersistenceProvider
  • 使用超类创建构建器时,父类无法返回子类的实例[重复]

    这个问题在这里已经有答案了 如果我使用构建器模式来配置新对象 我可能有两个类 例如Game and HockeyGame 如下所示 当我想创建一个新的HockeyGame 我得到它的构建器并开始调用方法来根据需要配置对象 我遇到的问题显示在
  • 在Java中执行.lnk文件

    我需要在java中执行 lnk文件 指向exe文件的lnk文件 我能怎么做 在 VB net 中我做 Process Start path 它有效 谢谢你的帮助 Use a 流程构建器 http download oracle com ja
  • 如何在java中模拟SHIFT+鼠标按键

    我想将鼠标指针移动到特定位置并执行 SHIFT 鼠标右键单击 我可以将鼠标移动到某个位置 但无法模拟鼠标单击 Robot r new Robot r mouseMove x1 y1 我应该做什么来模拟预期的鼠标点击 我认为您只需要一点额外的
  • 与嵌套泛型集合的混淆

    请帮助我理解为什么add1 and add4 报告错误以及原因add2 and add3 不 具体来说 请举例说明如果编译器允许其中每一个进行编译 则会产生不良后果的示例 class InnerTypeConfusion interface
  • 使用 Elmah 进行异常处理

    我用 Elmah 记录异常 想知道我使用的技术是否是好的设计 现在 我捕获并重新抛出各种类和方法中发生的异常 并将它们记录到程序的主 try catch 块中的 Elmah 主程序 try Some code that fires off
  • 用于只读 DB 的 java ORM

    我了解 hibernate 但我想知道是否有一个更轻的 ORM 引擎只读数据库 我的意思是 我不需要一些事务查询或更新一些记录 另一方面 我需要处理一些大的记录列表 List
  • Java 1.4 有泛型吗?

    查看 Java 1 4 中的一些旧代码 但我对 Java 不熟悉 Java 1 4 有泛型吗 我一直在查看代码 没有发现泛型的任何用途 但这并不一定意味着它们不受支持 不 那是 1 5 的介绍 即 Java 2 发行版 1 5 really
  • 逆变方法参数类型

    wiki 逆变方法参数类型 https en wikipedia org wiki Covariance and contravariance 28computer science 29 Contravariant method argum

随机推荐

  • 如何为 kubernetes (v1.11.2) 集群设置代理设置(http_proxy 变量)?

    我设置了一个 Kubernetes 集群 但由于组织政策的原因 该集群无法连接互联网 现在有一些服务需要通过互联网进行通信 为了解决这个问题 我设置了一个位于 K8s 集群外部的转发代理 Squid 我的 K8s 集群的所有节点都可以使用正
  • 页面关闭前提醒:如何更改 Chrome 的默认消息?

    我使用以下代码片段在页面关闭之前触发警报 但 Chrome 似乎忽略该消息并显示其默认消息 您想离开此网站吗 您所做的更改可能不会保存 如何让 chrome 显示我的消息而不是默认消息 window onbeforeunload funct
  • iTunes 连接阿拉伯语本地化

    我正在尝试为我的应用程序使用阿拉伯语描述和元数据 在iTunes connect中它规定这些数据必须是英文的 所以我确实把它们放在英文中 然后我找到了本地化功能 但发现它不支持阿拉伯语 然而 我在沙特阿拉伯应用程序商店中发现许多应用程序的名
  • SQL 语句 - SELECT 该查询的逆操作

    我有这个查询 我想选择与所选内容相反的查询 SELECT Guide id FROM Guide INNER JOIN GuideAvailability ON Guide id GuideAvailability guideId WHER
  • 如何在小部件/今日扩展上打开特定视图控制器单击

    我正在尝试在小部件单击上打开特定的视图控制器 但无法打开它 我可以使用 url 模式打开应用程序 但我想打开特定的视图控制器 我该怎么做 这里是使用打开应用程序的代码网址架构 IBAction func open app sender An
  • 在Tensorflow中,获取图中所有Tensors的名称

    我正在创建神经网络Tensorflow and skflow 由于某种原因 我想获取给定输入的一些内部张量的值 所以我使用myClassifier get layer value input tensorName myClassifier成
  • 如何更改 Delphi TGrid Firemonkey 组件中单元格的颜色?

    我使用 TGrid 列中的单元格示例作为示例 组件选项中没有颜色属性 颜色只能通过代码访问 该代码必须放在 绘制列单元格 事件中 但是什么代码是做什么的呢 我尝试使用与 VCL 组件中相同的过程 但 FMX 中的 Tcanvas 不包含画笔
  • 运行 git archive 时忽略 .gitignore

    我有一个包含一堆源代码的 git 存储库 当编译时会生成一堆二进制文件 这些二进制文件都列在相应的 gitignore 文件中 但不包含在存储库中 但是 我想分发我的存储库的源 二进制文件快照 zip 文件 其中包含所有二进制文件 但不包含
  • OpenAI ChatGPT (GPT-3.5) API 错误 429:“您超出了当前配额,请检查您的计划和账单详细信息”[已关闭]

    Closed 这个问题是与编程或软件开发无关 目前不接受答案 我正在制作一个 Python 脚本以通过其 API 使用 OpenAI 但是 我收到此错误 openai error RateLimitError 您超出了当前配额 请检查您的计
  • 为什么默认情况下不启用“downlevelIteration”?

    当针对 ES5 使用扩展运算符时 转换一个Iterator to an Array 它显示使用错误 downlevelIteration编译器选项 一旦启动 点差运算符似乎就可以完美地工作 我想知道为什么需要指定这一点 除了从 tslib
  • 将 PreferenceFragment 添加到 FragmentPagerAdapter

    我正在尝试添加一个PreferenceFragment to a FragmentPagerAdapter 我的班级延长了FragmentActivity 我努力了FragmentTransaction 如下所示以及尝试添加到容器中 但似乎
  • Discord 机器人阅读反应

    我需要实现一些功能 其中之一是实现民意调查类型功能 由于某些政策 无法使用公共不和谐机器人 因此我们必须自己实施一些措施 昨天做了一些研究 能够使用以下命令制作基本的机器人python3 and commandsapi来自discord e
  • ARM NEON:比较 128 位值

    我感兴趣的是找到比较 Cortex A9 内核 允许使用 VFP 指令 上 NEON 寄存器 例如 Q0 和 Q3 中存储的值的最快方法 最低周期数 到目前为止我有以下内容 1 使用VFP浮点比较 vcmp f64 d0 d6 vmrs A
  • 在Java中,如何删除float中的所有0?

    我想这样改变浮动 10 5000 gt 10 5 10 0000 gt 10 如何删除小数点后的所有零 并将其更改为浮点数 如果有非零 或整数 如果只有零 提前致谢 为什么不尝试正则表达式呢 new Float 10 25000f toSt
  • 制作多语言android应用程序

    我创建了多语言 英语 俄语 乌兹别克语 应用程序 我将 4 个字符串资源放入 4 个文件夹 values values en values ru values uz 中docs 当我更改应用程序语言时 会更新应用程序控制器中的资源配置 如下
  • 在现有文档的特定位置插入 XML 节点

    我有一个包含一些可选节点的现有 XML 文档 我想插入一个新节点 但在某个位置 该文档看起来像这样
  • 自动映射器和不变性

    是否可以将 AutoMapper 与不可变类型一起使用 例如 我的域类型是不可变的 我想将我的视图类型映射到此 我相信不是 但只是想确认这一点 此外 由于最佳实践是让域类型不可变 因此将视图类型映射到域类型时的最佳实践是什么 我通常会手动进
  • Webpack:大小超出建议限制 (244 KiB)

    这是有问题的分支和存储库 https github com Futuratum moon holdings tree dev 您好 我遇到了这个问题 因为我有一个包含大量图像的资产文件夹 我不在乎大小 这对于现代网络用户来说应该是正常的 我
  • PHP 命令行界面出现奇怪的 5 秒停顿(与 mysql/mysqli 扩展有关)

    从命令行 PHP 客户端 Windows 上的 PHP 5 2 执行 PHP 脚本时 我遇到了奇怪的 5 到 7 秒的暂停 在此暂停期间 PHP 脚本似乎 冻结 了一段时间 然后返回到命令提示符 它没有使用任何重要的 CPU 时间 就好像它
  • 使用 java 向 WebService 发出 SOAP 请求

    我对如何通过 java 向 Web 服务发出请求有点困惑 目前我唯一了解的是 Web 服务使用 xml 结构化消息 但我仍然不太明白如何构建我的请求