Я пытаюсь предоставить свой пакет Oracle PL/SQL в качестве веб-службы в Oracle 11g (11.2.0.2.0). В то время как все остальное идет хорошо, у меня, похоже, проблема с использованием любой процедуры/функции, которая использует XMLTYPE через веб-службу. Хотя я был бы очень удивлен, если XMLTYPE не поддерживался в веб-сервисе Oracle, а также потому, что я не нашел никаких ресурсов, указывающих на такое ограничение, я считаю, что я делаю что-то неправильно. Однако я не могу понять, в чем проблема, и, следовательно, вопрос.Невозможно использовать XMLTYPE в веб-службе Oracle PL/SQL
Я настроил собственный веб-сервис в своей базе данных Oracle в соответствии с Native Oracle XML DB Web Services in Oracle 11g Release 1, и я успешно прошел процедуры тестирования с использованием базовых типов данных с использованием SoapUI.
Чтобы исключить любые другие источники проблемы я создал следующий свернутый тестовый пакет, который воспроизводит проблему:
CREATE OR REPLACE PACKAGE web_test_package AUTHID CURRENT_USER AS
PROCEDURE xmltype_test (dummy IN varchar2);
END;
/
CREATE OR REPLACE PACKAGE BODY web_test_package AS
PROCEDURE xmltype_test (dummy IN varchar2)
IS
xt XmlType;
BEGIN
select XMLTYPE('<MyXmlTag></MyXmlTag>') into xt from dual;
END xmltype_test;
END;
/
Если я теперь запустить определенную процедуру в SQLPlus, он работает хорошо:
SQL> exec web_test_package.xmltype_test;
PL/SQL procedure successfully completed.
Когда служба настроена и пакет определен в базе данных, я могу получить WSDL для пакета от http://host:port/orawsv/DBSCHEMA/WEB_TEST_PACKAGE?wsdl. Используя WSDL, я создаю проект SoapUI, содержащий образец запроса. Затем я настраиваю запрос на использование базовой проверки подлинности, и я готов проверить запрос.
При выполнении запроса с SoapUI, я получаю следующие ошибки в ответе:
<OracleError>
<ErrorNumber>ORA-19202</ErrorNumber>
<Message>Error occurred in XML processing</Message>
</OracleError>
<OracleError>
<ErrorNumber>ORA-00904</ErrorNumber>
<Message>: invalid identifier</Message>
</OracleError>
<OracleError>
<ErrorNumber>ORA-06512</ErrorNumber>
<Message>at "MY_USER.WEB_TEST_PACKAGE", line 6</Message>
</OracleError>
<OracleError>
<ErrorNumber>ORA-06512</ErrorNumber>
<Message>at line 1</Message>
</OracleError>
Если я теперь интерпретировать ошибки правильно, они имеют в виду, что я получаю ошибку ORA-00904 «неверный идентификатор» на строка, в которой у меня есть свой select-clause. И в моем понимании «XMLTYPE» является единственным идентификатором в этой строке, что означает, что он не распознается, когда процедура выполняется через веб-службу.
Итак, наконец, вопрос: существует ли ограничение, которое XMLTYPE не может использовать в процедурах, вызываемых через веб-службу? Или я чего-то не хватает?
Для записи я также попытался заменить формат конструктора XMLTYPE (...) форматом метода XMLTYPE.CreateXML (...), но это не помогло.