调用 SOAP Web 服务时,您可以使用静态调用或动态调用。
静态调用意味着从 WSDL 创建存根并使用它来执行调用。这会为您创建所有“管道”代码,但与该 Web 服务紧密相关,并且您不能将其用于具有不同合同的其他 Web 服务。对于每个 WSDL,您需要创建另一个存根。
通过动态调用,您可以在运行时读取 WSDL,并根据从 WSDL 获取的信息了解如何调用 Web 服务。向其提供多个 WSDL,客户端就会进行调整。
动态调用是什么SoapUI用于生成示例请求和响应。
它读取您提供给它的 WSDL,从类型部分提取 XML 模式并生成 XML 实例。为此,它使用Wsdl4j and XmlBeans在引擎盖下。
使用 Wsdl4j 的决定是好的,因为它可以让您在解析 WSDL 时进行控制。但还要看看 XmlBeans;它还有一些其他的tools你可能会发现有用,比如模式到实例例如类。
如果您需要查看它的运行情况(也许调试它以查看发生了什么),您可以使用 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>
希望这可以帮助您超越第一步。