Можно ли удаленно выставить bean-компонент при весенней загрузке с помощью REST и httpInvoker

Мне нужно предоставить некоторую службу для удаленного использования клиентами Java (они должны использовать httpinvoker) и другими языками (они должны использовать REST).

Могу ли я настроить весеннюю загрузку так, чтобы открывать и то, и другое? (Я бы не возражал, если бы использовались два отдельных экземпляра с разными портами, например, в этот пост).

Я отказался от идеи предоставления API для клиентов Java, которые внутренне используют REST, потому что довольно утомительно подключать все конечные точки REST в код вручную, используя RestTemplate.. Мне нравится концепция HttpInvoker, потому что используется ProxyFactoryBean автоматически. Если Spring Remoting сможет чтобы сделать это так, как это можно сделать для JMS, AMQP и других, я бы пошел таким путем.


person Marged    schedule 21.04.2015    source источник
comment
Вы, вероятно, смешиваете две идиомы: RPC и передачу состояния. httpInvoker касается удаленных вызовов процедур. Вы просто вызываете метод, передаете некоторые аргументы и получаете какой-то результат. В REST вы в значительной степени имеете дело с изменением определенного состояния чего-либо (в основном это идея REST). Думаю, лучшим решением для такого случая было бы наличие двух разных фасадов перед вашим сервисом, которые следуют принципам каждого стиля API.   -  person mp911de    schedule 24.04.2015
comment
Думаю, обе техники позволяют изменить состояние. В REST это HTTP GET, в httpInvoker вы вызываете getMethod. Для изменения / создания значений REST использует вызовы PUT / POST и httpInvoker set / create. Но когда вы говорите о двух фасадах, возникает интересный момент: как это можно сделать элегантно?   -  person Marged    schedule 24.04.2015
comment
@Marged, почему вы хотите использовать устаревший инструмент, такой как Spring HttpInvoker? Он уже устарел в Spring 2.0, я не думаю, что Spring Boot будет автоматически настраивать это или даже управлять зависимостью.   -  person Michael Técourt    schedule 27.04.2015
comment
Я еще не проверял поддержку httpinvoker при весенней загрузке, поэтому отсутствие поддержки при загрузке может стать проблемой. Есть ли у вас источник отказа от httpinvoker? Я знаю, что его поддержка была изменена при интеграции Spring, но я считаю, что она активно поддерживается даже в текущих версиях Spring.   -  person Marged    schedule 27.04.2015
comment
Не можете ли вы настроить bean-компонент как обычную службу Rest и открыть его с помощью httpinvoker? Конфигурация HttpInvoker довольно проста, и вы можете сделать это самостоятельно без SpringBoot.   -  person Plínio Pantaleão    schedule 29.04.2015


Ответы (5)


Вы можете использовать что-то вроде этого. Выставляйте свои услуги как сервис отдыха. Затем сделайте так, чтобы ваши клиенты Java использовали эти службы, используя http://www.mkyong.com/java/how-to-send-http-request-getpost-in-java/ или другую библиотеку. Если какая-либо другая сторона также заинтересована, они тоже могут потреблять это по-своему.

В противном случае вы можете создать свою собственную банку, потребляющую ваши сервисы отдыха, и позволить своим java-клиентам использовать ее, не зная об остальных сервисах.

person Maleen Abewardana    schedule 24.04.2015
comment
Я отказался от подхода к созданию jar-файла, вызывающего интерфейс REST. Я ищу простой подход, при котором большая часть создается автоматически. Это работает для httpinvoker и REST, когда я использую каждый метод по отдельности. - person Marged; 24.04.2015

Отображение конечных точек HTTP-инициатора в Spring Boot на самом деле настолько просто, что кажется, будто чего-то не хватает. В @SpringBootApplication, на пути которого есть spring-webmvc (например, с использованием spring-boot-starter-web POM), добавьте следующее определение bean-компонента:

@Bean(name = "/my.service")
public HttpInvokerServiceExporter myHttpInvokerServiceExporter(MyService myServiceImpl) {
    HttpInvokerServiceExporter exporter = new HttpInvokerServiceExporter();
    exporter.setServiceInterface(MyService.class);
    exporter.setService(myServiceImpl);
    return exporter;
}

Конечная точка HTTP-инициатора теперь отображается в /my.service и не влияет на другие сопоставления. Вы можете добавить столько конечных точек, сколько захотите; а затем несколько @RequestMappings для REST наверху.

person Michael Piefel    schedule 06.06.2016

Здесь мы используем оба метода. HttpInvoker для вызовов Java-to-Java. Обычный JSON через HTTP для других клиентов (похож на REST, но не на настоящий REST). Я думаю, что проект jsonrpc4j предоставляет хороший способ реализовать HTTP-материал.

person TJ H    schedule 08.09.2015

Взгляните на пружинный упор-invoker. Он связывает интерфейсы Java со службами REST. Это не решает проблему «раскрытия» службы, но значительно упрощает ее использование.

https://github.com/ggeorgovassilis/spring-rest-invoker

person George Georgovassilis    schedule 09.08.2017

HttpInvoker был удален после весенней интеграции 2.x: http://docs.spring.io/spring-integration/docs/2.0.x/reference/html/httpinvoker.html (! Подробная информация приведена в важном заголовке). Ссылка на поддержку HTTP в версиях 3.x и 4.x: http://docs.spring.io/spring-integration/docs/latest-ga/reference/html/http.html

Также есть еще одно сообщение SO, в котором кто-то спрашивает о поддержке HTTP и весенней загрузке с некоторой соответствующей информацией: HTTP для интеграции Spring с загрузкой Spring и @RequestMapping

Надеюсь, это поможет вам выбраться из кроличьей норы.

person Shawn Clark    schedule 30.04.2015
comment
Возможно, я неправильно интерпретирую это, но только потому, что Spring Integration отказывается от поддержки HttpInvoker, это не означает, что сам Sprint отказался от него или отказался от него. Поскольку я не использую Spring Integration, у меня не должно возникнуть проблем. - person Marged; 30.04.2015
comment
Да вы правы. docs.spring.io/spring/docs/ текущий / Spring-framework-reference / - person Shawn Clark; 01.05.2015