tom*_*jok 20 java soap wsdl web-services
我想问你如何在WSDL文件的基础上以XML格式生成SOAP请求/响应.目标平台是JVM,因此可以使用多种语言(例如Java,Scala,Groovy,JRuby,Jython等).SOAP请求/响应生成应该完全在XML级别上完成,而不需要任何类生成和类加载(在这种情况下,WSDL2Java,JAXB或类似方法是不合适的).应该使用开源组件以编程方式完成生成.生成技术应该支持document-literal,rpc-encoded和rpc-literal风格,因此生成器应该处理参数的正确编码.请求/响应消息应该是完全填充的 - >即使对于空/空值,也应生成空节点.
长话短说 - >我想以编程方式完成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();
Run Code Online (Sandbox Code Playgroud)
在这种情况下,请求应如下所示:
<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>
Run Code Online (Sandbox Code Playgroud)
......而响应应如下所示:
<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>
Run Code Online (Sandbox Code Playgroud)
tom*_*jok 18
好.我设法完全解决了这个问题.我从soapUI中提取了一些代码,并启动了一个开源项目,以Java中的纯XML方式支持SOAP.类提取背后的主要原因是将负责生成SOAP消息的代码与其他soapUI代码分开,这些代码与其他模块紧密耦合,例如soapUIs图形用户界面等.您可以找到项目在这里:https://github.com/reficio/soap-ws它不仅能够生成SOAP消息,还提供SOAP客户端和服务器.更多细节:http://www.reficio.org/projects
小智 6
SOAPUI图书馆怎么样:
package com.bbog.soap;
import com.eviware.soapui.impl.wsdl.WsdlInterface;
import com.eviware.soapui.impl.wsdl.WsdlOperation;
import com.eviware.soapui.impl.wsdl.WsdlProject;
import com.eviware.soapui.impl.wsdl.support.wsdl.WsdlImporter;
import com.eviware.soapui.model.iface.Operation;
public class WsdlAnalyzer {
public static void main(String[] args) throws Exception {
WsdlProject project = new WsdlProject();
WsdlInterface[] wsdls = WsdlImporter.importWsdl(project, "http://localhost:7000/Solicitud?wsdl");
WsdlInterface wsdl = wsdls[0];
for (Operation operation : wsdl.getOperationList()) {
WsdlOperation op = (WsdlOperation) operation;
System.out.println("OP:"+op.getName());
System.out.println(op.createRequest(true));
System.out.println("Response:");
System.out.println(op.createResponse(true));
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
58945 次 |
| 最近记录: |