2009-12-16 5 views
1

У меня проблема с веб-службами. Они программируются на Java и работают на сервере WASCE (оба находятся на одном сервере). Моя проблема, которую я хочу решить: У нас есть два веб-сервиса: App1 и App2Связь между двумя веб-службами

В App1 я хочу вызвать функцию, находящуюся в App2. Как я могу это сделать? Возможно ли это? Я попытался создать soapClient внутри App1, поэтому я могу подключиться к App2, но это не работает. exp: У меня есть клиент, который вызывает app1, получает данные из app1 и отправляет его в приложение2, а затем возвращает данные ответа из приложения2 и отправляет их другой функции в приложение1.

Что я хочу сделать, так это пропустить часть клиента и сделать это напрямую, чтобы приложение 1 могло напрямую отправлять данные в приложение2, а затем получать ответ, делая все, что ему нужно.

Примечание: обе веб-службы используют соединение с базой данных.

Заранее спасибо. (он был отредактирован с дополнительными данными)

+0

Одинаковый или отличный сервер? Тот же или другой контекст? Измените свой вопрос соответствующим образом. – BalusC

ответ

1

Что делает «не работает» означает? Что именно происходит?

Начните с создания кода клиента для App2. Можете ли вы использовать это из некоторой простой среды Java или сказать Servlet. Если это работает, что происходит, когда вы пытаетесь вызвать его из вашего кода реализации приложения 1?

Однако: если это связанные службы, запущенные в одной JVM, вы не можете установить некоторые более простые отношения с использованием java-библиотек. Мой предпочтительный способ разработки сервиса - это сначала разработать полезный Java-код и убедиться, что он работает, а затем «обернуть» его как веб-службу. В этом случае у меня есть вызываемая процедура, которую можно просто вызвать как Java.

+0

WASCE выдает сообщение об ошибке. Я не могу создать java-библиотеки, потому что это функции доступа к базе данных и использование этого в библиотеке не является хорошей идеей. Возможно, я сделал что-то не так, когда я добавил, что клиент в App2 - это возможно? Хмм, завтра я попробую еще раз и вернусь к тебе. Спасибо за ваше мнение – Mesni

+0

Но какая ошибка? БЫЛ им бросать это, или ваш APP что-то говорит в журнале? Вы можете получить лучшую помощь, если бы указали именно эту ошибку, а также рассказали нам, какие инструменты для веб-сервиса вы используете. – djna

+0

Теперь я постараюсь сделать это таким образом и буду комментировать, если он работает. Спасибо !! – Mesni

1

Это определенно возможно, с различными уровнями сложности и возможностей в зависимости от того, что именно вы хотите, и ограничений, вы размещаете на нем.

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

Если вы хотите, чтобы метод App2 был по существу «защищен», так что он может быть вызван App1, но не публичными клиентами, тогда есть несколько альтернативных вариантов. Во-первых, вы можете использовать брандмауэры или эквивалент для предотвращения внешних запросов к URL-адресу службы. В качестве альтернативы вы можете выставить метод через некоторую форму межпроцессного взаимодействия; RMI будет очевидным для Java (настройте RMI-метод в App2 и экспортируйте его через диспетчер, затем получите ссылку в App1 и вызовите метод удаленно). В зависимости от того, что именно вы хотите сделать, вам может быть лучше с каркасом, который делает все это под обложками; например распределенные объекты через что-то вроде Terracotta.

Вы должны указать более подробно в своем вопросе, хотя в настоящее время единственное, что вы действительно указали, это то, что вы хотите назвать «функцию» в App2 из App1. Есть десятки (если не сотни) способов сделать это, и лучшие (ые) будут зависеть от деталей того, что вы пытаетесь сделать.

EDIT (в свете комментариев): Это не детали того, что вы хотите сделать, которые не хватает - я понимаю прекрасно, что вы хотите вызвать некоторый метод в App2 изнутри App1. Это больше архитектурные детали - на каких языках оба клиента закодированы, какие библиотеки вы используете для выполнения веб-сервисов, являются ли клиенты на одном и том же компьютере или отдельными (и если та же машина, одна и та же JVM или нет), есть ли какие-либо проблемы с брандмауэром, которые могут препятствовать определенным видам подключения, существуют ли какие-либо офисно-политические ограничения, которые могут препятствовать вашим опциям, существуют ли какие-либо ограничения безопасности, которые могли бы сделать то же самое (например, публиковать или не публиковать функциональность метода App2). Все это сформирует то, что возможно и что оптимально, потому что в конце дня все сети в основном Я хочу использовать ресурсы на , что удаленный компьютер от здесь.Без каких-либо архитектурных особенностей существует буквально множество способов, которыми вы могли бы это достичь.

Относительно экспозиции: вы должны создать веб-службу, чтобы выставлять функцию App2 так же, как вы создавали бы любую другую веб-службу (при этом детали зависят от используемого инструмента/фрейма). В качестве примера, если вы используете инструмент, который поддерживает аннотации JSR-181, вы должны написать метод в App2, который выполняет эту функцию, и аннотировать его с помощью @WebMethod. Затем вы убедитесь, что если этот метод не является частью существующего класса webservice, вы должны аннотировать его класс с помощью @WebService. Я предполагал, что, поскольку у вас уже есть несколько веб-сервисов, вы бы знали, как их писать и определять.

Что касается доступа к веб-сервису из App1, это можно сделать просто с помощью Java SOAP-клиента. Инструмент, такой как WSDL2Java, может создать класс-заглушку, моделирующий удаленный сервис, который вы можете вызвать; В качестве альтернативы вы можете получить более богатый интерфейс с чем-то вроде CXF.

Какая библиотека WS вы используете в настоящее время и какие ошибки вы столкнулись при попытке использовать ее для выполнения этого взаимодействия?

+0

Вы направляетесь в правильном направлении. Я приведу вам пример того, что я хочу сделать. У меня есть 2 веб-службы, которые могут работать в одиночку или для оптимизации вместе. Теперь im работает следующим образом: у меня есть клиент, который вызывает приложение1, получает данные из приложения 1 и отправляет его в приложение2, а затем возвращает данные ответа из приложения2 и отправляет их другой функции в приложение1. Что я хочу сделать, так это пропустить часть клиента и сделать это напрямую, чтобы приложение 1 могло напрямую отправлять данные в приложение2, а затем получать ответ, делая все, что ему нужно. Надеюсь, этого достаточно. если вам нужно больше информации, скажите, пожалуйста, и спасибо вам много. – Mesni

+0

О, и вопрос об экспонировании. Как мне это сделать? как я могу создать веб-сервис, раскрывающий этот метод? заранее спасибо – Mesni

+0

Спасибо, что очень помогли !!!! Мне просто нужно проверить безопасность. – Mesni

Смежные вопросы