Использование веб-сервисов из Oracle PL / SQL - PullRequest
10 голосов
/ 01 сентября 2008

Наше приложение взаимодействует со многими веб-сервисами в наши дни. У нас есть собственный пакет, который кто-то написал несколько лет назад с использованием UTL_HTTP, и он, как правило, работает, но требует некоторого жесткого кодирования конверта SOAP для работы с некоторыми системами. Я хотел бы сделать его более общим, но мне не хватает опыта, чтобы знать, сколько сценариев мне придется иметь дело. Различия в том, какие пространства имен должны быть объявлены, и формат элементов. Мы должны обрабатывать как простые вызовы с несколькими параметрами, так и те, которые передают большой объем данных в закодированной строке.

Я знаю, что в 10g есть UTL_DBWS, но он-лайн не так много вариантов использования. Является ли он стабильным и достаточно гибким для общего использования? Документация

Ответы [ 4 ]

6 голосов
/ 16 сентября 2008

Я использовал UTL_HTTP, который прост и работает. Если вы столкнулись с проблемой с вашим собственным пакетом, вы, вероятно, можете найти решение в одном из множества пакетов-оберток вокруг UTL_HTTP в сети (Google «использует веб-сервисы из pl / sql», что приводит вас к примеру. http://www.oracle -base.com / Articles / 9i / ConsumingWebServices9i.php )

Причина, по которой никто не использует UTL_DBWS, заключается в том, что он не работает в установленной по умолчанию базе данных. Вам необходимо загрузить тонну Java-классов в базу данных, но стандартные инструкции кажутся неполноценными - процесс выдает ошибки Java вправо и влево и в конечном итоге дает сбой. Кажется, очень немногие люди хотели бы выделить время для отслеживания зависимостей пакетов, чтобы этот подход работал.

2 голосов
/ 24 января 2009

У меня была эта проблема, и я нашел и установил пакет «SOAP API», который Стен предлагает в Oracle-Base. Он обеспечивает некоторые хорошие возможности создания конвертов поверх UTL_HTTP.

Однако были некоторые ограничения, относящиеся к вашему вопросу. SOAP_API предполагает, что все запросы являются простыми XML, то есть только одна иерархия тегов уровня.

Я расширил пакет SOAP_API, чтобы позволить клиентскому коду произвольно вставить дополнительный тег. Таким образом, вы можете вставить подуровень, например, продолжить построение запроса и не забудьте вставить закрывающий тег.

Проблема с пространством имен была важна для проекта - разные уровни XML имели разные пространства имен.

Хорошим инструментом отладки, который я использовал, является TCP Trace от Pocket Soap. www.pocketsoap.com/tcptrace/ Вы настраиваете его как прокси-сервер и наблюдаете объекты HTTP-запросов и ответов между кодом клиента и сервера.

Сказав все это, нам действительно нравится иметь SOAP-клиент в базе данных - у нас есть полный доступ ко всем данным и существующему коду PLSQL, мы можем легко проходить по курсорам и вызывать внешнее приложение через SOAP, когда это необходимо. Это было намного быстрее и проще, чем развертывание среднего уровня с большим количеством пользовательского кода Java или .NET. Удачи, и дайте мне знать, если вы хотите увидеть мой улучшенный код SOAP API.

1 голос
/ 02 сентября 2008

Мы также использовали UTL_HTTP аналогично тому, что вы описали. У меня нет прямого опыта с UTL_DBWS, поэтому я надеюсь, что вы сможете получить любую информацию / опыт, которые сможете собрать.

@ kogus, нет, это довольно хороший дизайн для многих приложений. PL / SQL - это полноценный язык программирования, который использовался во многих крупных приложениях.

0 голосов
/ 02 сентября 2008

Ознакомьтесь с этим старым постом . Я должен согласиться с ответом # 1 этого поста; Трудно представить сценарий, в котором это может быть хорошим дизайном.

Не можете ли вы написать сервис или отдельное приложение, которое будет взаимодействовать с таблицей в вашей базе данных? Тогда вы можете реализовать все, что захотите, в качестве триггера для этой таблицы.

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