soap - 将 WSDL 转换为其各自的 HTTP 绑定(bind)

标签 soap service wsdl web

我只是试图从 WSDL 提供的数据中将 WSDl 转换为许多不同的 HTTP 请求。我已经阅读了大量类似的问题,但没有一个真正提供答案。

有人说用苏维 - 我熟悉这个应用程序并使用它。但我需要自己从 WSDL 创建这些 HTTP 请求。

有人说试试 JAXWS - 我查看了许多关于此的教程以及 这些将 WSDL 转换为 Java 类绑定(bind),然后您使用这些方法来测试 Web 服务。我真的很想自己生成 HTTP 请求,以便在某一时刻我可以操纵请求并发送我自己的测试。

我开始使用 wsdl4j 自己开始解析 WSDL,但在我完全确定我没有重新发明轮子之前,我宁愿不走这条路。在我看来,过去有必要这样做吗?但与 WSDL4J 以及我没有看到 WSDL 到 Soap 消息翻译的所有其他库。

任何建议都会非常有帮助。目标是我希望能够获取 WSDL,检查它并为 WSDL 中的每个方法创建 HTTP-SOAP 请求,并且能够测试它们的安全问题。第一步是创建这些请求!

最佳答案

调用 SOAP Web 服务时,您可以使用静态调用或动态调用。

静态调用意味着从 WSDL 创建一个 stub 并使用它来执行调用。这将为您创建所有“管道”代码,但与该 Web 服务紧密相关,您不能将其用于具有不同契约(Contract)的其他 Web 服务。对于每个 WSDL,您需要创建另一个 stub 。

通过动态调用,您可以在运行时阅读 WSDL,并根据从 WSDL 获得的信息了解如何调用 Web 服务。向它提供多个 WSDL,客户端会适应。

动态调用是SoapUI用于生成示例请求和响应。

它读取您提供给它的 WSDL,从类型部分提取 XML 模式并生成 XML 实例。为此,它使用 Wsdl4jXmlBeans在引擎盖下。

您使用 Wsdl4j 的决定很好,因为它可以让您在解析 WSDL 时进行控制。但也看看 XmlBeans;它还有一些其他tools您可能会发现有用,例如 schema to instance例如类。

如果您需要查看它的运行情况(也许调试它以查看发生了什么),您可以使用 SoapUI API 创建一个快速的脏测试:

import com.eviware.soapui.impl.wsdl.WsdlInterface;
import com.eviware.soapui.impl.wsdl.WsdlProject;
import com.eviware.soapui.impl.wsdl.support.wsdl.WsdlImporter;

public class Test {
    public static void main(String[] args) throws Exception {
        WsdlProject project = new WsdlProject();
        WsdlInterface[] wsdls = WsdlImporter.importWsdl(project, "http://www.html2xml.nl/Services/Calculator/Version1/Calculator.asmx?wsdl");
        WsdlInterface wsdl = wsdls[0];
        System.out.println(wsdl.getOperationByName("Add").createRequest(true));
        System.exit(0); // just to clear up some threads created by the project 
    }
}

您应该看到打印的消息(对于计算器 WS 的添加操作)将是这样的:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">
   <soapenv:Header/>
   <soapenv:Body>
      <tem:Add>
         <tem:a>?</tem:a>
         <tem:b>?</tem:b>
      </tem:Add>
   </soapenv:Body>
</soapenv:Envelope>

希望这可以帮助您超越第一步。

关于soap - 将 WSDL 转换为其各自的 HTTP 绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8996295/

相关文章:

xml - 使用 XSLT 更改 SOAP namespace

android - 通过提供一个扩展 Thread 并覆盖其 run() 方法的新类来实现 Thread

c# - 为什么我的 64 位服务以 32 位运行?

android - AltBeacon : BeaconConsumer in Service Not Working

ios - SOAP 和 iOS : Any guidance?

java - 未捕获的 SoapFault 异常 : [soapenv:Server] Before start of result set

soap - 使用带有 Soap v1.2 而不是默认的 v1.1 的 spring-ws 生成 SOAP Web 服务

ruby-on-rails - 这两个 SOAP 请求有什么区别?

.net - XSD 第一个合约 - WCF Soap Web 服务

java - Apache CXF 中的可交换目标命名空间