Краткое введение.Существует производственная система, в которой некоторые независимые клиенты «изобретают» некоторые объекты с некоторыми свойствами и поведением - можно присвоить некоторые значения этим объектам, запустить их в действие и прочитать их состояние во время / во время выполнения.Все через веб-интерфейс: клиент входит в систему, присваивает значения, внедряет объекты, запускает контейнер и видит, что его объекты мутируют.
Все основано на JAXB-совместимой схеме клиента.Схема скомпилирована в классы Java и упакована как jar клиента.(Большое спасибо членам stackoverflow, которые помогли мне сделать это на лету).
И вот проблема: они хотят, чтобы веб-сервис (SOAP) делал все, что они в настоящее время делают через веб-интерфейс.И, конечно же, с типами wsdl в соответствии со схемой JAXB они динамически меняются и ежедневно развертываются :( На самом деле все операции, которые они выполняют через Интернет:
- Запуск / остановка контейнера приложения (общийзадача, а не проблема)
- Вставка определенного клиентом объекта в контейнер
- Извлечение объектов определенного типа из контейнера
"3" не является проблемой один раз "2 "в порядке. Но" 2 "сводит меня с ума, и я нуждаюсь в вашем совете, ПРЕЖДЕ ЧЕМ я начинаю что-то делать. С точки зрения WebService мой вопрос: Как опубликовать конечную точку WS следующим методом, предполагая, что тип аргументаопределяется клиентской JAXB-схемой :
@WebMethod
public void inject(UserDefinedObject obj) {
getAppContainer().inject(obj); // that's all I have to implement
}
Вот подходы, о которых я думаю:
Использование объекта в качестве аргумента: public void inject(Object obj);
и кода ServletFilter
для изменения запроса / ответа xml в соответствии со схемой клиента. Но я не уверен, что сервлет WS не будет проверять сигнатуру метода и генерировать исключения в этом случае. Другой вопрос заключается в том, получу ли я доступ кзапросите xml из этого метода для выполнения демаршаллинга JAXB.
Поскольку я уже собираю клиентские jar-файлы, я также мог бы скомпилировать конечные точки веб-службы и динамически развертывать их как пакеты OSGI.Я абсолютно новичок в OSGI, здесь слишком много вопросов: возможно ли вообще, что насчет моего слуха, нужно ли мне делать все как OSGI, как общаться с EJB и т. Д., И т. Д.
Больше гуглить, но, боюсь, Брин и Пейдж начнут меня заряжать.
Есть еще идеи?