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

时间:2012-01-25 00:20:26

标签: soap service wsdl web

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

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

有人说要尝试 JAXWS - 我看了很多关于这个以及 Axis 的教程,这些教程将WSDL转换为Java类绑定,你使用那些测试Web服务的方法。我真的想自己生成HTTP请求,这样我就可以操作请求并发送自己的测试。

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

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

1 个答案:

答案 0 :(得分:2)

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

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

使用动态调用,您可以在运行时读取WSDL,并根据从WSDL获得的信息确定如何调用Web服务。为它提供多个WSDL,客户端适应。

动态调用是SoapUI用于生成样本请求和响应的内容。

它读取您提供的WSDL,从types部分提取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 
    }
}

您应该看到的消息(对于Calculator WS的Add操作)将是这样的:

<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>

希望这有助于您超越第一步。