Zio*_*ioN 5 java jvm jar rpg ibm-midrange
我的目标是从RPG函数启动Java调用Web服务.(我知道,它很长,但它是我们需要的)
我/JavaLib
在AS400上创建了一个文件夹,并复制了我们需要的所有必需的外部JAR.
使用静态方法创建Java类WebServiceCaller.Call()
以调用Web Service.当我运行我的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"中.
CLASSPATH变量:
/ JavaLib:/家庭/ 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;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意Eclipse生成的GetBidsProxy类.Java端在我的Windows机器上运行良好.只是不在AS400机器上.
RPG: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
Run Code Online (Sandbox Code Playgroud)
对于给定作业,CLASSPATH 仅在您第一次调用 java 命令且 JVM 启动时读取一次。如果您的 CLASSPATH 之后发生更改,JVM 将不会看到或使用新的 CLASSPATH。注销并重新启动(开始新的工作),设置 CLASSPATH(我在我的登录程序中执行此操作),然后尝试使用您正在使用的类。
归档时间: |
|
查看次数: |
4945 次 |
最近记录: |