Как сгенерировать SOAP-сообщение с полностью заполненным запросом из WSDL без кода gen

Я хотел бы спросить, как я могу генерировать SOAP-запрос/ответ в формате XML на основе WSDL-файла. Целевой платформой является JVM, поэтому можно использовать широкий набор языков (например, Java, Scala, Groovy, JRuby, Jython и т.д.). Генерация SOAP-запросов/ответов должна осуществляться исключительно на уровне XML без какой-либо генерации классов и загрузки классов (WSDL2Java, JAXB или подобные подходы в данном случае неуместны). Генерация должна осуществляться программно с использованием компонентов с открытым исходным кодом. Техника генерации должна поддерживать документально-литературный, rpc-кодированный и rpc-литературный вкусы, поэтому правильное кодирование параметров должно обрабатываться генератором. Запросы/ответные сообщения должны быть полностью заполнены -> пустые узлы должны быть сгенерированы даже для пустых/пустых значений.

Вырезая длинный рассказ -> я хотел бы сделать программно то, что можно сделать в SoapUI IDE. Я уже рассматривал различные Java-библиотеки/фреймворки (SAAJ, WSDL4J) или Ruby (Savon), но с трудом продвигаюсь дальше.

Образец определения Web-Service (WSDL и XSD), над которым я работаю. stockquote-ws.wsdl and 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>
20
задан Cœur 26 September 2018 в 14:52
поделиться