我對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