如何在没有代码生成的情况下生成来自 WSDL 的完全填充请求的 SOAP 消息
2022-09-02 04:15:02
我想问您如何基于 WSDL 文件生成 XML 格式的 SOAP 请求/响应。目标平台是JVM,因此可以使用广泛的语言集(例如Java,Scala,Groovy,JRuby,Jython等)。SOAP 请求/响应生成应该纯粹在 XML 级别上完成,而不进行任何类生成和类加载(在这种情况下,WSDL2Java、JAXB 或类似方法不合适)。生成应以编程方式使用开源组件来完成。生成技术应支持文档文本、rpc 编码和 rpc 文本风格,因此生成器应处理参数的正确编码。请求/响应消息应完全填充 - >即使对于空/空值,也应生成空节点。
长话短说>我想以编程方式做SoapUI IDE中可行的事情。我已经看过不同的Java相关库/框架(SAAJ,WSDL4J)或Ruby(Savon),但我正在努力进一步发展它。
我正在处理的示例 Web 服务定义(WSDL 和 XSD)是 和 。stockquote-ws.wsdl
stockquote-schema.xsd
我想做的是:
SoapMessageGenerator generator = new SoapMessageGenerator("stockquote-ws.wsdl");
String request = generator.generateSoapRequest();
String response = generator.generateSoapResponse();
在这种情况下,请求应如下所示:
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:stoc="http://centeractive.com/stockquote.wsdl" xmlns:stoc1="http://centeractive.com/stockquote.xsd">
<soapenv:Header/>
<soapenv:Body>
<stoc:GetLastTradePrice soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<stoc1:TradePriceRequest>
<tickerSymbol xsi:type="xsd:string">?</tickerSymbol>
</stoc1:TradePriceRequest>
</stoc:GetLastTradePrice>
</soapenv:Body>
</soapenv:Envelope>
...而响应应如下所示:
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:stoc="http://centeractive.com/stockquote.wsdl" xmlns:stoc1="http://centeractive.com/stockquote.xsd">
<soapenv:Header/>
<soapenv:Body>
<stoc:GetLastTradePriceResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<stoc1:TradePrice>
<price xsi:type="xsd:float">?</price>
</stoc1:TradePrice>
</stoc:GetLastTradePriceResponse>
</soapenv:Body>
</soapenv:Envelope>