gpt4 book ai didi

java - 如何在没有代码生成的情况下使用来自 WSDL 的完全填充的请求生成 SOAP 消息

转载 作者:IT老高 更新时间:2023-10-28 20:53:11 28 4
gpt4 key购买 nike

我想问您如何在 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.wsdlstockquote-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>

最佳答案

好的。我设法完全解决了这个问题。我从soapUI 中提取了一些代码,并启动了一个开源项目,以Java 中纯XML 方式支持SOAP。类提取背后的主要原因是将负责生成 SOAP 消息的代码与与其他模块(例如soapUIs 图形用户界面等)紧密耦合的其余soapUIs 代码分开。您可以找到项目在这里:https://github.com/reficio/soap-ws它不仅能够生成 SOAP 消息,还提供 SOAP 客户端和服务器。更多详情:http://www.reficio.org/projects

关于java - 如何在没有代码生成的情况下使用来自 WSDL 的完全填充的请求生成 SOAP 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7487699/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com