Это определенно возможно , с различными уровнями сложности и выполнимости в зависимости от того, что именно вы хотите, и ограничений, которые вы на него накладываете.
Вероятно, один из самых простых способов добиться этого, если у вас нет проблем с общедоступным методом в App2, - это просто создать веб-службу, предоставляющую этот метод, и вызвать if из App1.
Если вы хотите, чтобы метод App2 был по существу "защищенным", чтобы его можно было вызывать из App1, но не из общедоступных клиентов, то есть несколько альтернативных вариантов. Во-первых, вы можете использовать брандмауэры или аналогичные им средства для предотвращения внешних запросов к URL-адресу службы. В качестве альтернативы, вы можете раскрыть метод через некоторую форму межпроцессного взаимодействия; RMI будет очевидным нативным для Java (настройте метод RMI в App2 и экспортируйте его через менеджер, затем получите ссылку в App1 и удаленно вызовите метод). В зависимости от того, что именно вы хотите сделать, вам может быть лучше иметь структуру, которая делает все это под прикрытием; например распределенные объекты через что-то вроде терракота .
Вы должны дать более подробную информацию в своем вопросе - в настоящее время единственное, что вы действительно указали, - это то, что вы хотите вызвать "функцию" в App2 из App1. Есть десятки (если не сотни) способов сделать это, и лучший (ые) способ будет зависеть от деталей того, что вы пытаетесь сделать.
РЕДАКТИРОВАТЬ (в свете комментариев): Отсутствуют детали того, что вы хотите сделать , которые отсутствуют - я прекрасно понимаю, что вы хотите вызвать какой-нибудь метод в App2 из в приложении 1. Это больше архитектурные детали - на каких языках написаны оба клиента, какие библиотеки вы используете для веб-сервисов, являются ли они клиентами на одном и том же компьютере или отдельными (и если один и тот же компьютер, та же JVM или нет), есть ли Проблемы с брандмауэром, которые могут препятствовать определенным типам подключения, существуют ли какие-либо служебные или политические ограничения, которые могут помешать вашим опциям, есть ли какие-либо ограничения безопасности, которые могут сделать то же самое (например, можете ли вы публично предоставлять функциональность метода App2 или нет). Все это сформирует то, что возможно и что является оптимальным, потому что в конце концов, все сети в основном Я хочу использовать ресурсы на этом удаленном компьютере с здесь . Без дополнительных архитектурных особенностей есть буквально десятки способов, которыми вы могли бы достичь этого.
Относительно экспозиции: вы бы создали веб-сервис для предоставления функции App2 так же, как и любой другой веб-сервис (детали которого зависят от используемого вами инструмента / инфраструктуры). Например, если вы используете инструмент, поддерживающий аннотации JSR-181, вы должны написать метод в App2, который выполняет эту функцию, и добавить к нему примечание @WebMethod
. Затем вы должны убедиться, что если этот метод не является частью существующего класса веб-сервиса, вы аннотируете его класс @WebService
. Я предполагал, что, поскольку у вас уже есть пара веб-сервисов, вы знаете, как их написать / определить.
Что касается доступа к веб-службе из App1, это может быть сделано довольно просто клиентом Java SOAP. Такие инструменты, как WSDL2Java , могут создать класс-заглушку, моделирующий удаленную службу, которую вы можете вызвать; в качестве альтернативы вы можете получить более богатый интерфейс с чем-то вроде CXF .
Какую библиотеку WS вы используете в настоящее время, и с какими ошибками вы столкнулись, пытаясь использовать ее для выполнения этого взаимодействия?