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

标签 java jar jvm ibm-midrange rpg

我的目标是从 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/

相关文章:

java - sun.security.validator.ValidatorException : PKIX path building failed, 与 java >1.6

java - JVM maxHeapSize 和 InitialHeapSize 未反射(reflect)在 htop 中

java - 摘要认证过程中的随机数

java - Android:合并 JSON 和 HashMap 数据

java - 如何从 jar 文件中调用自定义方法

java - 使用 Mail API 从 Swing 应用程序创建 Jar 文件

jvm - 调用接口(interface)有什么意义?

java - 如何导入 AcknowledgingConsumerAwareMessageListener

java - 让 JButton 位于 JTextField 的一侧

Java:在网站上查找JAR文件的主类