RPG调用Java,java.lang.NoClassDefFoundError

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)

Buc*_*bro 4

对于给定作业,CLASSPATH 仅在您第一次调用 java 命令且 JVM 启动时读取一次。如果您的 CLASSPATH 之后发生更改,JVM 将不会看到或使用新的 CLASSPATH。注销并重新启动(开始新的工作),设置 CLASSPATH(我在我的登录程序中执行此操作),然后尝试使用您正在使用的类。