2014-10-10 5 views
0

나는 자바 개발과 오라클 중 하나에 새로운,하지만 난 배우고있어.자바 정적 메서드 Oracle 함수로 사용

내 문제는 .net에서 dll을 생성하고 MSSqlServer의 사용자 정의 함수로 사용했습니다. 기본적으로이 라이브러리는 SOAP 게이트웨이로 작동하여 GET 및 POST에서 모두 webservice를 호출합니다. 단순히 SELECT를 사용합니다. like이

SELECT * 
FROM fn_SoapGateway_MakeWebRequest 
(
'GET', -- Method 
'https://fish.go-moo.it', -- Url 
'/foo/bar?method=info', -- Path 
'' -- XML Envelope 
) 

지금, 나는 Oracle을 위해 Java를 사용하면서 같은 일을하고 싶습니다. 모든 것을 볼 단지 문자열을 반환 -

  • 1) 공공 statis 문자열 GetData의() < : 테스트 목적으로 , 나는 클래스 두 개의 정적 메서드를 공개한다 "SoapGateway"를 생성 좋은 일을 ..

  • 2) 공공 정적 문자열 MakeWebRequest (문자열 이름, 문자열 암호, 문자열 방법, 문자열 URL, 문자열 경로, 문자열 봉투) < - m akes 웹 서비스에 대한 호출

두 번째 단계는 Oracle Java 컴파일러로 모든 것을 컴파일하므로 java 버전 : done!

이제 세 번째 단계 :이

CREATE OR 언어 자바 이름으로 기능 fn_SoapGateway_GetData RETURN VARCHAR2 교체 'SoapGateway.GetData() 반환 자바와 같은 간단한 코드로 자바 클래스에 오라클 기능을 결합. lang.String '; COMMIT;

마지막으로는 샤름 등이

SELECT MY_SCHEMA.fn_SoapGateway_GetData() FROM DUAL ; 

선택

작품으로 간단한 함수 GetData의 테스트! 그리고 그것은 내 사용자 지정 문자열을 반환합니다.

이제 마지막으로 나는 당신이 내 질문을 할 수 있습니다

1)나는 기능 "MakeWebRequest"을 결합하여 오라클의 함수를 만드는 오라클에서 무엇을 작성해야?)

2는 올바른 봉투로 "문자열"을 전송하고 "문자열"을 반환하거나 내가 더 큰 데이터 유형을 사용해야합니까? 그렇다면 어떤 종류의 데이터 유형입니까? 제 코드를 수정하도록 도와 주시겠습니까? 그것은 내가 XML 변수로 응답을 얻기 위해 오라클에서 올바르게 함수를 호출 할 수있는 방법

3)를 작동하면 나는 모든 것을 공유 할 수 있습니까?

많은 분들께 감사드립니다. 내가 뭔가 명확하지 않다면 말해줘!((:

----------------------- UPDATEEEEE ------------------- ----------, 그래서 ..

좋아들, 지금은 2.0 단계 ... 난 자바에서 원하는 결과를 얻을 난의 java.sql.Clob을 사용하고 다 잘 보인다 나는 SoapGateway.MakeWebRequest (.....)라고 불리는 이클립스에서 테스트했고, 모든 것이 완벽 해 보였다. 원격 호스트가 Get 메서드에 대해 xml로 응답했다. -> ok

이제, loadjava로 Oracle 서버에 자바 클래스 넣기 - 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; 

같은 기능을 만들었습니다!

SELECT MY_SCHEMA.FN_SOAPGATEWAY_MAKEWEBREQUEST 
(
    'user', 
    'pass', 
    'method', 
    'url', 
    'path', 
    'envelope', 
) FROM DUAL; 

ORA-29532 : Chiamata 자바 terminata causa가 디 un'eccezione 자바 비 ottenuta : java.lang.NullPointerException이 (널 포인터 예외 종료 자바 호출)

그리고 마지막으로는 .. 그것을 호출 -> KO !!

이제 Eclipse에서 charme 및 Oracle과 같은 오류가 발생하는 이유는 무엇입니까? 내가 잘못하고 있니?

정말 고마워요!

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을 완벽하게 발견했다. 내 스레드를 업데이트했습니다. 하단 부분을 살펴볼 수 있습니까? 고마워요! (: L. –

+0

안녕하세요, 다른 아이디어는 무엇입니까? –

+0

두 가지 : 1) 오로라 (Oracle DB의 JVM)가 최신 jdk - ex 일 필요는 없습니다. 오라클 11g 거기에 JDK1.5 - 어쩌면 당신의 excepton의 이유가있다 2) 내가 용의자 장소에서 try - catch 블록을 추가하여 디버깅 중입니다 :) 그것은 최선의 방법은 아니지만, 나는 두려워하지만 작동 중입니다;)이 코드는 예외가 발생하는 곳을 찾는 데 도움이됩니다. – rzysia

관련 문제