我的目标是从 Java 调用 Web 服务,从 RPG 函数启动。(我知道,它还有很长的路要走,但这是我们需要的)
我/JavaLib
在 AS400 上创建了一个文件夹,并复制了我们需要的所有外部罐子。
使用静态方法创建一个 Java 类WebServiceCaller.Call()
来调用 Web 服务。当我运行我的 RPG 程序时,一切都很好,RPG 调用这个方法。
我得到一个 Java 异常:
信息 。. . . : 调用 Java 方法 (CGD F) 时收到 Java 异常。
原因 。. . . . : 程序 WAL60326/WEBSERCALR 中的 RPG 过程 WEBSERCALR 在
调用带有签名“(LwebService.Input;)LwebService.Output;”的方法“Call”时收到 Java 异常“java.lang.NoClassDefFoundError: javax.xml.rpc.ServiceException” 在
“webService.WebServiceCaller”类中。
类路径变量:
/JavaLib:/home/WAL60326/WebServiceCaller
所以我相信我的 RPG 和 Java 类很好,我相信我已经正确设置了我的 CLASSPATH 变量。不知道还有什么要检查的。
更新
所以我需要的jar文件jaxrpc.jar
我已经检查过了;它确实存在于我的/JavaLib
. 能够在 AS400 上检查我的 Java 版本java version "1.5.0"
。并按照这些说明检查我的操作系统是否为 V6R1。
会不会是我的 Java 版本过时了,才能加载/工作这个 Jar 文件?这还有可能吗?
编辑
这是我的源代码:
Java:WebServiceCaller.Java
package webService;
import java.rmi.RemoteException;
import stocklistGetBids.GetBidsProxy;
public class WebServiceCaller {
public static Output Call(Input in) { // Input Class, is just a way to hold all the input together
Output out = null; // Output Class, holds all the output together
try {
GetBidsProxy getBidsProxy = new GetBidsProxy(); // GetBidsProxy generated by Eclipse
out = new Output(getBidsProxy.getBids(in.LogKey, in.Id));
} catch (RemoteException e) {
e.printStackTrace();
out = new Output("ERR");
}
return out;
}
}
请注意,Eclipse 生成的 GetBidsProxy 类。Java 端在我的 Windows 机器上运行良好。只是不在 AS400 机器上。
角色扮演游戏:WEBSERCALR.RPGLE
H DFTACTGRP(*NO)
H thread(*serialize)
D WebsercalInput DS
D ReturnCode 7A
D LogKey 20A
D ID 20A
D jString S O CLASS(*JAVA:'java.lang.String')
D jLogKey S O CLASS(*JAVA:'java.lang.String')
D jID S O CLASS(*JAVA:'java.lang.String')
D Input S O CLASS(*JAVA:'webService.Input')
D Output S O CLASS(*JAVA:'webService.Output')
D new_Input PR O EXTPROC(*JAVA:
D 'webService.Input':
D *CONSTRUCTOR)
D LogKey like(jString)
D ID like(jString)
D new_String PR O EXTPROC(*JAVA:
D 'java.lang.String':
D *CONSTRUCTOR)
D bytes 30A CONST VARYING
D Call PR like(Output)
D EXTPROC(*JAVA:
D 'webService.WebServiceCaller':
D 'Call')
D STATIC
D in like(Input)
D getReturnStat PR O EXTPROC(*JAVA:
D 'webService.Output':
D 'getReturnedStatus')
D CLASS(*JAVA:'java.lang.String')
D getBytes PR 65535A VARYING
D EXTPROC(*JAVA:
D 'java.lang.String':
D 'getBytes')
C *ENTRY PLIST
C PARM WebsercalInput
/free
jLogKey = new_String(LogKey);
jID = new_String(ID);
Input = new_Input(jLogKey:jID);
Output = Call(Input);
jString = getReturnStat(Output);
ReturnCode = getBytes(jString);
return;
/End-Free