0

我对 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.

4

1 回答 1

0

广告 1)类似的东西应该可以工作:

CREATE OR REPLACE FUNCTION yourFunctionName(username  varchar2, password varchar2, method varchar2, url varchar2, path varchar2, envelope  varchar2) RETURN VARCHAR2 AS 
LANGUAGE JAVA NAME 'SoapGateway.MakeWebRequest(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) return java.lang.String';

广告 2)如果数据很大,您可以使用 BLOB - 当我生成 xml 时,它对我来说非常有效;)

广告 3)试试这个:

SELECT yourFunctionName('username', 'pass', 'method', 'url', 'path', 'envelope') FROM dual;
于 2014-10-10T09:36:54.577 回答