프로그램이 원격 서버에서 실행되기 때문에, 당신은 RPG에서 직접 호출 할 수 없습니다. 웹 서비스라는 것을 감안할 때 iSeries에서 실행하고 RPG 내에서 Java 프로그램을 호출하는 Java 프로그램을 작성합니다. 요즘 RPG는 Java와 직접 인터페이스 할 수 있습니다. 클래스를 선언하고 메소드 호출을 프로토 타입하려면 일부 D- 스펙을 작성해야합니다. 다음 예제에서는 'tools'패키지에 ServiceCaller라는 Java 클래스가 있다고 가정합니다. 3 개의 문자 필드를 받아들이고 정수를 반환하는 getServiceReply라는 단일 메서드가 있습니다. getServiceReply 방법 내에서,이 같은 문자열로 그 바이트 배열로 변환, 자바 코드 내부
/free
ServiceCaller = newServiceCaller();
iReply = getServiceReply(ServiceCaller:'Parm1':'Parm2':'Parm3');
/end-free
:
*Define the Java class locally.
DServiceCaller S O CLASS(*JAVA:'tools.ServiceCaller')
*Class constructor. No parameters.
DnewServiceCaller PR O EXTPROC(*JAVA:
D 'tools.ServiceCaller':
D *CONSTRUCTOR)
D CLASS(*JAVA:'tools.ServiceCaller')
*GetServiceReply.
*public int getServiceReply(byte[] parm1, byte[] parm2, byte[] parm3)
DgetServiceReply PR 10I 0 EXTPROC(*JAVA:
D 'tools.ServiceCaller':
D 'getServiceReply')
D Parm1 400A CONST
D Parm2 400A CONST
D Parm3 400A CONST
귀하의 RPG의 CALC 사양이 자유 형식의 예처럼 보일 것입니다 부여
sParm1 = new String(parm1);
sParm2 = new String(parm2);
sParm3 = new String(parm3);
, 이것은 지나치게 단순한 예입니다 및 응용 프로그램의 요구는 약간 다를 수 있습니다. 웹 서비스가 응답하지 않는 경우 오류 처리 코드를 추가해야합니다. 클래스에서 getter 및 setter를 사용할 수도 있습니다. 이는 모두 애플리케이션 요구 사항과 원격 웹 서비스의 요구 사항에 따라 다릅니다. 자바 유형 RPG 유형에 대한
일부 노트 :
RPG Type Java Type
10I 0 int
3I 0 byte
5I 0 short
20I 0 long
N boolean
A byte[]
는 특히 야심 찬 느낌이 경우에, 당신은 당신의 RPG 내에서 네이티브 자바 HTTP 클래스를 호출 할 수 있습니다. 하지만 그 사이에 역할을하는 커스텀 Java 프로그램이 RPG와 대화하기 위해 특별히 작성된 것이 더 쉬운 방법이라는 것을 알았습니다. RPG가 Java와 대화 할 수 있지만 Java와 Java로 이야기하는 것만 큼 귀한 것은 아닙니다. RPG에서 자바를 호출에
추가 정보는 ILE RPG 프로그래머 가이드에서 찾을 수 있습니다. V5R4 버전은 여기에서 찾을 수 있습니다 : http://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/books/sc092507.pdf
위대한 게시물 감사합니다. RPG가 Java의 목록/맵을 처리하는 방법은 무엇입니까 (나는 믿을 수없는) equivlent가 없다고 들었습니다. 나는 잠재적 인 주소 검색 배열을 반환해야합니까? – scottyab
Java와 RPG간에 배열을 앞뒤로 전달할 수 있지만 목록이나 맵은 전달할 수 없습니다. getter 및 setter 메서드를 사용하는 것이 좋습니다. –
배열을 전달할 때 Java에서 byte [] 배열의 배열을 만드는 것이 가장 좋습니다. RPG에서 가변 길이 문자 필드를 사용한다면 괜찮습니다. 필자는 가변 길이 문자 필드를 사용하지 않고 대신 Java에서 RPG에 필요한 길이의 패딩 된 문자열을 만든 다음 바이트 배열로 변환합니다. –