我对Java开发和Oracle都很陌生,但我正在学习。我的问题是以下,我在.net中创建了一个dll,并将它用作MSSqlServer中的自定义函数,基本上这个库充当一个SOAP网关,让我可以简单地使用SELECT调用Web服务(在GET和POST中)像这样Java作为Oracle函数使用的静态方法
SELECT *
FROM fn_SoapGateway_MakeWebRequest
(
'GET', -- Method
'https://fish.go-moo.it', -- Url
'/foo/bar?method=info', -- Path
'' -- XML Envelope
)
现在,我想要做同样的事情,但使用Java for Oracle。 出于测试目的,我创建的类“SoapGateway”,这暴露了两个静态方法:
1)公共统计的字符串的GetData() < - 返回只是一个字符串,一看就知道所有的事情工作好..
2)公共静态字符串MakeWebRequest(字符串的用户名,密码字符串,字符串的方法,字符串URL,路径字符串,字符串信封) < - 米akes致电web服务
第二步是用Oracle java编译器编译所有东西,这样就不会出现java版本的问题:done!
现在第三步:甲骨文功能结合java类用一个简单的这样的代码
CREATE OR REPLACE FUNCTION fn_SoapGateway_GetData RETURN VARCHAR2 AS LANGUAGE JAVA NAME“SoapGateway.GetData()返回的java。 lang.String“; COMMIT;
和最后一个,这个选择
SELECT MY_SCHEMA.fn_SoapGateway_GetData() FROM DUAL ;
作品像一个风情万种测试功能简单的GetData!它返回我我的自定义字符串。
现在,终于我可以问你我的问题:
1)我应该在甲骨文书写的内容绑定功能“MakeWebRequest”,并在Oracle中创建功能?
2)是否正确发送“字符串”作为一个信封,并返回一个“字符串”,或者我应该使用更大的数据类型?如果是这样,哪种数据类型?你能帮我纠正我的代码吗?一旦它的工作原理
3)我怎样才能正确地调用该函数从甲骨文获得的响应为XML变量我可以分享一切吗?
很多非常感谢您的帮助! 告诉我,如果我不清楚的东西!((:
----------------------- UPDATEEEEE ------------------- ----------
好球员,现在步骤2.0 ..我得到我从Java想要的结果,我用java.sql.Clob中,一切似乎很好..
所以,我在eclipse中测试了一个叫做SoapGateway.MakeWebRequest(.....)的东西,而且一切看起来都很完美!远程主机用我的Get方法的xml回复 - > ok
现在,我加载了java类到Oracle服务器与loadjava -schema bla bla bla - > ok
然后,从企业管理器编译它 - >确定
然后,创建这样的函数
CREATE OR REPLACE FUNCTION fn_SoapGateway_MakeWebRequest(v_username VARCHAR2, v_password VARCHAR2, v_method VARCHAR2, v_url VARCHAR2, v_path VARCHAR2, v_envelope VARCHAR2) RETURN CLOB
AS LANGUAGE JAVA NAME 'SoapGateway.MakeWebRequest_Clob(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) return java.sql.Clob';
COMMIT;
- > OK!
最后。与把它称为:
SELECT MY_SCHEMA.FN_SOAPGATEWAY_MAKEWEBREQUEST
(
'user',
'pass',
'method',
'url',
'path',
'envelope',
) FROM DUAL;
ORA-29532:Chiamata的Java terminata一个遗赠迪un'eccezione的Java非ottenuta:显示java.lang.NullPointerException(Java调用终止空指针异常) - > KO !!
现在,关于为什么在Eclipse上工作就像一个魅力和来自甲骨文的任何想法,它会产生这样的错误? 我做错了什么?
非常感谢!
L.
嗨Rzysia,谢谢您的回复,我找到了完美的CLOB问到Oracle的人后。我更新了我的主题,你可以看看底部?谢谢你! (: L. – 2014-10-10 15:52:29
你好,还有其他想法吗? – 2014-10-13 09:19:17
两件事: 1)Aurora(Oracle数据库中的JVM)不一定是最新的jdk - ex。在oracle 11g中有JDK1.5 - 也许除了 之外,还有一个原因。2)我通过在怀疑的地方添加try-catch块来调试它:)这不是最好也是最正确的方式,但我害怕它的工作;)这将帮助你找到你的代码在这个异常发生的地方。 – rzysia 2014-10-15 06:30:46