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