将WSDL转换为其各自的HTTP绑定

ste*_*eve 5 service soap wsdl web

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

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

有人说要尝试JAXWS - 我在这个和Axis上查看了许多教程,这些教程将WSDL转换为Java类绑定,并使用这些方法来测试Web服务.我真的想自己生成HTTP请求,这样我就可以操作请求并发送自己的测试.

我开始使用wsdl4j开始自己解析WSDL,但是在我完全确定我没有重新发明轮子之前,我宁愿不要走这条路.在我看来,过去一直需要这个吗?但是使用WSDL4J和其他所有库我都没有看到SoDL消息转换的WSDL.

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

Bog*_*dan 2

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

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

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

SoapUI使用动态调用来生成示例请求和响应。

它读取您提供给它的 WSDL,从类型部分提取 XML 模式并生成 XML 实例。为此,它在底层使用了Wsdl4j和XmlBeans 。

使用 Wsdl4j 的决定是好的,因为它可以让您在解析 WSDL 时进行控制。但还要看看 XmlBeans;它还有一些您可能会觉得有用的其他工具,例如实例类的架构。

如果您需要查看它的运行情况(也许调试它以查看发生了什么),您可以使用 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 
    }
}
Run Code Online (Sandbox Code Playgroud)

您应该看到打印的消息(对于计算器 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>
Run Code Online (Sandbox Code Playgroud)

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