2014-10-10 41 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