gpt4 book ai didi

java - RPG调用Java,java.lang.NoClassDefFoundError

转载 作者:搜寻专家 更新时间:2023-10-31 20:03:22 25 4
gpt4 key购买 nike

我的目标是从 Java 调用 Web 服务,从 RPG 函数启动。 (我知道,这还有很长的路要走,但这是我们需要的)

我在 AS400 上创建了一个 /JavaLib 文件夹,并复制了我们需要的所有外部 Jar。

使用静态方法 WebServiceCaller.Call() 创建一个 Java 类来调用 Web 服务。每当我运行我的 RPG 程序时,一切都很好,因为 RPG 会调用此方法。

我得到一个 Java 异常:

Message . . . . : Java exception received when calling Java method (C G D F).
Cause . . . . . : RPG procedure WEBSERCALR in program WAL60326/WEBSERCALR received Java exception "java.lang.NoClassDefFoundError:
javax.xml.rpc.ServiceException" when calling method "Call" with signature "(LwebService.Input;)LwebService.Output;" in class
"webService.WebServiceCaller".

CLASSPATH 变量:

/JavaLib:/home/WAL60326/WebServiceCaller

所以我相信我的 RPG 和 Java 类没问题,而且我相信我已经正确设置了 CLASSPATH 变量。不知道还有什么要检查的。


更新

所以我需要的jar文件是jaxrpc.jar 我查过了;它确实存在于我的 /JavaLib 中。能够在 AS400 java 版本“1.5.0” 上检查我的 Java 版本。并关注这些 instructions检查我的操作系统是否为 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;
}
}

请注意,GetBidsProxy 类由 Eclipse 生成。 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

最佳答案

对于给定的作业,CLASSPATH 只读一次,即您第一次调用 java 命令和 JVM 启动时。如果在那之后您的 CLASSPATH 发生了变化,JVM 将看不到或使用新的 CLASSPATH。注销和登录(开始一项新工作),设置 CLASSPATH(我在我的登录程序中这样做)然后尝试使用您正在使用的类。

关于java - RPG调用Java,java.lang.NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18398170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com