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

4

1 に答える 1