Java: быстрый и общий шлюз Data to Soap
Я хочу построить общий шлюз от вложенной карты (сгенерированной из потока двоичных данных) к SOAP-клиентам.
Справочная информация: не Java-приложение, которое должно вызывать SOAP-Services, не может генерировать json или SOAP/XML, но легко генерирует собственный протокол (который находится под нашим контролем).
Так что прокси нужен. Этот прокси-сервер не следует переписывать при каждом изменении WSDL или развертывании следующего Web-сервиса.
Мой план:
иметь URL, порт и имя службы (url: порт / имя службы) в качестве "строгих" определенных параметров этого прокси,
иметь действие SOAP как "строгий" определенный параметр
запросить (возможно, кешировать) wsdl url:port/service-name?wsdl и инициировать вызов заглушки динамически (кешируется),
заполнить значения, которые присутствуют во вложенной карте, к этой заглушке
позвоните в SOAP-сервис
преобразовать ответ обратно в этот двоичный протокол.
Если некоторые необходимые значения отсутствуют, он должен отправить эквивалент ошибки SOAP.
Все это, конечно, с небольшой (доступной) задержкой, высокой стабильностью, абсолютным минимальным временем простоя развертывания (для обновлений) и довольно большой нагрузкой.
Я вижу несколько возможностей:
а) Использование ESB, как WSO2ESB. Там я реализовал бы потоковый формат в качестве специального адаптера входного формата, преобразовал бы его во внутренний XMLStream (по крайней мере, json-адаптеры, кажется, работают таким образом) и отправил бы его посреднику. Этот посредник попробует что-то вроде в http://today.java.net/pub/a/today/2006/12/13/invoking-web-services-using-apache-axis2.html "Создание динамического клиента" и вызовет SOAP-Сервис напрямую.
б) использование MOM-Middleware, такого как ApacheMQ с Camel,
в) сократить его до чего-то вроде Apache Karaf и CXF
Я немного потерян между всеми этими возможностями, и это просто более или менее произвольные образцы каждого вида.
Мысли а)
минус: немного странно не иметь ESB-Target, так как посредник будет напрямую вызывать данные SOAP-запросы
минус: интересно, если внутреннее преобразование в XML-Stream не будет стоить дополнительного времени и ресурсов
минус: изменение кода требует перезапуска WSO2ESB, насколько я понял
плюс: вместо url, port, service-name я мог бы определить символические имена, которые разрешаются с помощью ESB - если это не занимает лишних миллисекунд.
Для б) я еще не проверил, насколько легко эти преобразования формата выполняются в Camel и соответствуют ли SOAP-Service-Requests отправке и очереди сообщений.
Я уже провел некоторые поиски по этой теме, но это действительно сбивает с толку из-за пересекающихся областей применения совершенно разных продуктов. Я думал, что это стандартная проблема, но очевидно, что нет никаких очевидных решений - по крайней мере, я не нашел их.
Я надеюсь получить представление о том, какие из этих решений могут привести к неприятностям или большой работе (а какие к легкому успеху), и я надеюсь, что в моем подходе есть какая-то причина.
Спасибо за любые квалифицированные комментарии!
Marco