私は 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 for Oracle を使用しています。テスト目的で、2 つの静的メソッドを公開するクラス「SoapGateway」を作成しました。
1) public statis String GetData() <- 文字列のみを返し、すべてが正常に機能することを確認します..
2) public static String MakeWebRequest(String ユーザー名、String パスワード、String メソッド、String url、String パス、String エンベロープ) <- Web サービスを呼び出します。
2 番目のステップは、Oracle Java コンパイラですべてをコンパイルすることで、Java バージョンの問題が発生しないようにします。
3 番目のステップ: 次のような単純なコードを使用して、Oracle 関数を Java クラスにバインドします。
関数の作成または置換 fn_SoapGateway_GetData RETURN VARCHAR2 AS LANGUAGE JAVA NAME 'SoapGateway.GetData() return java.lang.String'; 専念;
最後に、この select で単純な関数 GetData をテストします
SELECT MY_SCHEMA.fn_SoapGateway_GetData() FROM DUAL ;
チャームのように動作します!! カスタム文字列が返されます。
では、最後に質問をさせてください。
1) 関数「MakeWebRequest」をバインドし、Oracleで関数を作成するには、Oracleで何を書く必要がありますか?
2) 「文字列」をエンベロープとして送信し、「文字列」を返すのは正しいですか、それともより大きなデータ型を使用する必要がありますか? もしそうなら、どの種類のデータ型ですか? コードの修正を手伝ってもらえますか? 機能したらすべてを共有できます
3) Oracle から関数を正しく呼び出して、応答を XML 変数として取得するにはどうすればよいですか?
助けてくれてありがとう!私が何かはっきりしていなかったら教えてください!((:
----------------------- UPDATEEEEE -------------------------- ---
さて、ステップ 2.0 です。Java から必要な結果が得られました。java.sql.Clob を使用しましたが、すべて問題ないようです。
だから、SoapGateway.MakeWebRequest(.....) と呼ばれる eclipse のメインからテストしたところ、すべてが完璧に見えました! リモート ホストは、Get メソッドの xml で応答します。--> わかりました
ここで、loadjava -schema bla bla bla --> ok を使用して Java クラスを Oracle サーバーにロードしました。
次に、Enterprise Manager からコンパイルします --> 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: Java終了原因が原因でJavaが停止しました: java.lang.NullPointerException (JavaコールはNULLポインタ例外で終了しました) --> KO!!
では、Eclipse では魅力的に動作し、Oracle ではこのようなエラーが発生する理由について何か考えはありますか? 私は何か間違ったことをしていますか?
どうもありがとう!
L.