我对 Java 开发和 Oracle 也很陌生,但我正在学习。
我的问题如下,我在 .net 中创建了一个 dll 并将其用作 MSSqlServer 中的自定义函数,基本上这个库充当 SOAP 网关,让我只需使用这样的 SELECT 即可调用 Web 服务(在 GET 和 POST 中)
SELECT *
FROM fn_SoapGateway_MakeWebRequest
(
'GET', -- Method
'https://fish.go-moo.it', -- Url
'/foo/bar?method=info', -- Path
'' -- XML Envelope
)
现在,我想做同样的事情,但将 Java 用于 Oracle。出于测试目的,我创建了“SoapGateway”类,它公开了两个静态方法:
1) public statis String GetData() <- 它只返回一个字符串,看看所有的东西都运行良好..
2) public static String MakeWebRequest(String username, String password, String method, String url, String path, String envelope) <- 调用网络服务
第二步是用Oracle java编译器编译所有东西,所以java版本不会有问题:完成!
现在第三步:使用这样的简单代码将 Oracle 函数绑定到 java 类
创建或替换函数 fn_SoapGateway_GetData RETURN VARCHAR2 AS LANGUAGE JAVA NAME 'SoapGateway.GetData() return java.lang.String'; 犯罪;
最后,使用此选择测试简单的函数 GetData
SELECT MY_SCHEMA.fn_SoapGateway_GetData() FROM DUAL ;
像魅力一样工作!它返回我的自定义字符串。
现在,我终于可以问你我的问题了:
1) 我应该在Oracle中写什么来绑定函数“MakeWebRequest”并在Oracle中创建函数?
2) 将“字符串”作为信封发送并返回“字符串”是否正确,还是应该使用更大的数据类型?如果有,是哪种数据类型?你能帮我更正我的代码吗?一旦它工作,我可以分享一切
3) 如何从 Oracle 正确调用该函数以获取作为 XML 变量的响应?
非常感谢您的帮助!告诉我我是否有不清楚的地方!(((:
----------------------- UPDATEEEEE -------------- ---
好的,伙计们,现在步骤 2.0 .. 我从 Java 中获得了我想要的结果,我使用了 java.sql.Clob,一切似乎都很好..
所以,我在 Eclipse 中进行了测试,称为 SoapGateway.MakeWebRequest(.....),一切看起来都很完美!远程主机使用我的 Get 方法的 xml 回复。--> 好的
现在,我使用 loadjava -schema bla bla bla 将 java 类加载到 oracle 服务器中 --> ok
然后,从企业管理器编译它 --> 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;
--> 好的!
最后..用以下方式调用它:
SELECT MY_SCHEMA.FN_SOAPGATEWAY_MAKEWEBREQUEST
(
'user',
'pass',
'method',
'url',
'path',
'envelope',
) FROM DUAL;
ORA-29532: Chiamata java terminata a causa di un'eccezione Java non ottenuta: java.lang.NullPointerException(Java 调用因空指针异常而终止)--> KO!!
现在,任何关于为什么在 Eclipse 上像魅力一样工作并且从 Oracle 产生这样的错误的想法?难道我做错了什么?
太感谢了!
L.