2014-10-10 26 views
0

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

回答

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; 
+0

嗨Rzysia,谢谢您的回复,我找到了完美的CLOB问到Oracle的人后。我更新了我的主题,你可以看看底部?谢谢你! (: L. – 2014-10-10 15:52:29

+0

你好,还有其他想法吗? – 2014-10-13 09:19:17

+0

两件事: 1)Aurora(Oracle数据库中的JVM)不一定是最新的jdk - ex。在oracle 11g中有JDK1.5 - 也许除了 之外,还有一个原因。2)我通过在怀疑的地方添加try-catch块来调试它:)这不是最好也是最正确的方式,但我害怕它的工作;)这将帮助你找到你的代码在这个异常发生的地方。 – rzysia 2014-10-15 06:30:46