我一直试图在Oracle 11g(11.2.0.2.0)中提供我的Oracle PL/SQL程序包作为Web服务。尽管其他一切都进行得很顺利,但我似乎在使用任何使用Web服务上的XMLTYPE的过程/函数时遇到了问题。虽然我会感到非常惊讶,如果XMLTYPE在Oracle Web服务中不受支持,并且还因为我没有发现任何表示这种限制的资源,我相信我做错了什么。但是,我无法弄清问题出在哪里,因此也就是问题所在。无法在Oracle PL/SQL Web服务中使用XMLTYPE
我在我的Oracle数据库中根据Native Oracle XML DB Web Services in Oracle 11g Release 1配置了本地Web服务,并且我已经成功地使用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.
当配置服务并将包定义到数据库中时,我可以从http://host:port/orawsv/DBSCHEMA/WEB_TEST_PACKAGE?wsdl获取包的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“无效的标识符”上我有我的选择条款的行。在我的理解中,“XMLTYPE”是该行唯一的标识符,这意味着在通过Web服务执行过程时不会识别它。
因此,最后的问题是:是否存在XMLTYPE不能用于通过Web服务调用的过程中的限制?或者我在这里错过了什么?
为了记录,我也尝试用方法格式XMLTYPE.CreateXML(...)替换构造器格式XMLTYPE(...),但这并没有帮助。