螺纹“中的异常;主&x201D;java.lang.NoClassDefFoundError:名称错误

螺纹“中的异常;主&x201D;java.lang.NoClassDefFoundError:名称错误,java,Java,我编写了这个简单的测试业务对象API程序 import com.crystaldecisions.sdk.framework.*; import com.crystaldecisions.sdk.occa.infostore.IInfoStore; import com.crystaldecisions.sdk.occa.infostore.IInfoObject; import com.crystaldecisions.sdk.occa.infostore.IInfoObjects; impo

我编写了这个简单的测试业务对象API程序

import com.crystaldecisions.sdk.framework.*;
import com.crystaldecisions.sdk.occa.infostore.IInfoStore;
import com.crystaldecisions.sdk.occa.infostore.IInfoObject;
import com.crystaldecisions.sdk.occa.infostore.IInfoObjects;
import com.crystaldecisions.sdk.framework.IEnterpriseSession;
import com.crystaldecisions.sdk.framework.CrystalEnterprise;

import java.util.*;
import java.net.URLEncoder;
import java.io.UnsupportedEncodingException;

class LogonToken {
    public static void main(String[] args) {
        final Map<String, List<String>> params = new HashMap<>();
        List<String> options = null;

    for (int i = 0; i < args.length; i++) {
        final String a = args[i];

        if (a.charAt(0) == '-') {
            if (a.length() < 2) {
                System.err.println("Error at argument " + a);
                return;
            }

            options = new ArrayList<>();
            params.put(a.substring(1), options);
        }
        else if (options != null) {
            options.add(a);
        }
        else {
            System.err.println("Illegal parameter usage");
            return;
        }
    }

    if (
      args.length == 0 || 
      params.get("-username") == null || 
      params.get("-username").size() == 0 || 
      params.get("-password") == null || 
      params.get("-password").size() == 0 || 
      params.get("-output-type") == null || 
      params.get("-output-type").size() == 0 ||
      params.get("-doc-id") == null || 
      params.get("-doc-id").size() == 0 ||
      params.get("-s-id-type") == null || 
      params.get("-s-id-type").size() == 0 ||
      params.get("-cms-auth-type") == null || 
      params.get("-cms-auth-type").size() == 0 || 
      params.get("-cms-name") == null || 
      params.get("-cms-name").size() == 0
    ) {
      printArgumentsError("");
      return;
    }

    String username = params.get("-username").get(0);
    String password = params.get("-password").get(0);
    String output_type = params.get("-output-type").get(0);
    String doc_id = params.get("-doc-id").get(0);
    String s_id_type = params.get("-s-id-type").get(0);
    String cms_name = params.get("-cms-name").get(0);
    String cms_auth_type = params.get("-cms-auth-type").get(0);

    if (output_type.equals("url")) {
      System.out.println("URL: " + getUrl(username, password, doc_id, s_id_type, cms_name, cms_auth_type));

    } else {
      if (output_type.equals("token")) {
        System.out.println("TOKEN: " + getToken(username, password, doc_id, s_id_type, cms_name, cms_auth_type));

      } else {
        printArgumentsError("Output type must be either url or token. You provided: *" + params.get("-output-type").get(0) + "*");
      }
    }
}

public static String getToken(String username, String password, String doc_id, String s_id_type, String cms_name, String cms_auth_type) {
  try {
    return openDocumentToken(username, password, cms_name, cms_auth_type);
  } catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    return "ERROR: " + e.getMessage();
  } catch (SDKException e) {
    return "ERROR: " + e.getMessage();
  }
}

public static String getUrl(String username, String password, String doc_id, String s_id_type, String cms_name, String cms_auth_type) {
  try {
    return ( "http://<server>:<port>/BOE/OpenDocument/opendoc/openDocument.jsp?iDocID=" + doc_id + "&sIDType=" + s_id_type + "&token=" + openDocumentToken(username, password, cms_name, cms_auth_type));
  } catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    return "ERROR: " + e.getMessage();
  } catch (SDKException e) {
    return "ERROR: " + e.getMessage();
  }
}

public static String openDocumentToken(String username, String password, String cms_name, String cms_auth_type) throws UnsupportedEncodingException, SDKException  
{ 
  IEnterpriseSession sess = CrystalEnterprise.getSessionMgr().logon(username, password, cms_name, cms_auth_type);
  String token = sess.getLogonTokenMgr().createLogonToken("", 600, 600);
  String tokenEncode = URLEncoder.encode( token, "UTF-8");
  // String tokenEncode = URLEncoder.encode("Test", "UTF-8");

  return tokenEncode;
}

public static void printArgumentsError(String error) {
  System.out.println("");
  System.out.println("======================================");
  System.out.println(error); 
  System.out.println("Please provide all required arguments:");
  System.out.println("--username username");
  System.out.println("--password password");
  System.out.println("--output-type output_type (url or token)");
  System.out.println("--doc-id iDocID");
  System.out.println("--s-id-type sIDType (ex. CUID)");
  System.out.println("--cms-name cms_type (ex. \"<cms>:<port>\", double quotes are required in such case)");
  System.out.println("--cms-auth-type auth_type (ex. secEnterprise)");
  System.out.println("");
  System.out.println("Example invokation:");
  System.out.println("java LogonToken --username tmiskiew --password AwesomePass --output-type token --doc-id 12345 --s-id-type CUID --cms-name \"<cms>:<port>\" --cms-auth-type secEnterprise");
  System.out.println("");
  System.out.println("======================================");
  System.out.println("");
}}
我明白了:

Exception in thread "Thread-0" java.lang.NoClassDefFoundError: com/rsa/cryptoj/f/tK (wrong name: com/rsa/cryptoj/f/tk)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        at com.businessobjects.bcm.internal.BcmRsaLib.initialize(BcmRsaLib.java:214)
        at com.businessobjects.bcm.internal.BcmRsaLib.<clinit>(BcmRsaLib.java:289)
        at com.businessobjects.bcm.BCM.<clinit>(BCM.java:1144)
        at com.crystaldecisions.enterprise.ocaframework.BCMInitializer.run(BCMInitializer.java:29)
        at java.lang.Thread.run(Thread.java:744)
Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class com.businessobjects.bcm.BCM
        at com.crystaldecisions.sdk.occa.security.internal.ConfidentialChannelService.establishConfidentialChannel(ConfidentialChannelService.java:175)
        at com.crystaldecisions.sdk.occa.security.internal.ConfidentialChannelService.createConfidentialChannel(ConfidentialChannelService.java:145)
        at com.crystaldecisions.sdk.occa.security.internal.CCMap.locateCCItem(CCMap.java:63)
        at com.crystaldecisions.sdk.occa.security.internal.LogonService.doUserLogon(LogonService.java:845)
        at com.crystaldecisions.sdk.occa.security.internal.LogonService.doUserLogon(LogonService.java:805)
        at com.crystaldecisions.sdk.occa.security.internal.LogonService.userLogon(LogonService.java:210)
        at com.crystaldecisions.sdk.occa.security.internal.SecurityMgr.userLogon(SecurityMgr.java:166)
        at com.crystaldecisions.sdk.framework.internal.SessionMgr.logon_aroundBody0(SessionMgr.java:454)
        at com.crystaldecisions.sdk.framework.internal.SessionMgr.logon_aroundBody1$advice(SessionMgr.java:512)
        at com.crystaldecisions.sdk.framework.internal.SessionMgr.logon(SessionMgr.java:1)
        at LogonToken.openDocumentToken(LogonToken.java:105)
        at LogonToken.getUrl(LogonToken.java:94)
        at LogonToken.main(LogonToken.java:69)
线程“thread-0”java.lang.NoClassDefFoundError中的异常:com/rsa/cryptoj/f/tK(错误名称:com/rsa/cryptoj/f/tK) 位于java.lang.ClassLoader.defineClass1(本机方法) 位于java.lang.ClassLoader.defineClass(ClassLoader.java:800) 位于java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 位于java.net.URLClassLoader.defineClass(URLClassLoader.java:449) 在java.net.URLClassLoader.access$100(URLClassLoader.java:71) 在java.net.URLClassLoader$1.run(URLClassLoader.java:361) 在java.net.URLClassLoader$1.run(URLClassLoader.java:355) 位于java.security.AccessController.doPrivileged(本机方法) 位于java.net.URLClassLoader.findClass(URLClassLoader.java:354) 位于java.lang.ClassLoader.loadClass(ClassLoader.java:425) 位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 位于java.lang.ClassLoader.loadClass(ClassLoader.java:358) 位于com.businessobjects.bcm.internal.BcmRsaLib.initialize(BcmRsaLib.java:214) 位于com.businessobjects.bcm.internal.BcmRsaLib.(BcmRsaLib.java:289) com.businessobjects.bcm.bcm.(bcm.java:1144) 在com.crystaldecisions.enterprise.ocaframework.BCMInitializer.run(BCMInitializer.java:29) 运行(Thread.java:744) 线程“main”java.lang.NoClassDefFoundError中出现异常:无法初始化类com.businessobjects.bcm.bcm 在com.crystaldecisions.sdk.occa.security.internal.secretentialChannelService.EstablishSecretentialChannel(secretentialChannelService.java:175)上 请访问com.crystaldecisions.sdk.occa.security.internal.secretentialchannelservice.createsecretentialchannel(secretentialchannelservice.java:145) 在com.crystaldecisions.sdk.occa.security.internal.CCMap.locateCCItem(CCMap.java:63)上 在com.crystaldecisions.sdk.occa.security.internal.LogonService.doUserLogon(LogonService.java:845)上 在com.crystaldecisions.sdk.occa.security.internal.LogonService.doUserLogon(LogonService.java:805)上 在com.crystaldecisions.sdk.occa.security.internal.LogonService.userLogon(LogonService.java:210)上 在com.crystaldecisions.sdk.occa.security.internal.SecurityMgr.userLogon上(SecurityMgr.java:166) 在com.crystaldecisions.sdk.framework.internal.SessionMgr.logon_aroundBody0(SessionMgr.java:454)上 在com.crystaldecisions.sdk.framework.internal.SessionMgr.logon\u aroundBody1$advice上(SessionMgr.java:512) 在com.crystaldecisions.sdk.framework.internal.SessionMgr.logon(SessionMgr.java:1)上 在LogonToken.openDocumentToken(LogonToken.java:105) 位于LogonToken.getUrl(LogonToken.java:94) 位于LogonToken.main(LogonToken.java:69)
你知道那个“错误的名字”类型的错误想告诉我什么吗?编译器在编译时知道这个类,为什么它在运行时抱怨。作为一个偶尔的java程序员,这让我很困惑

在我看来类似于这里:。那么,您的包名是什么?您是否尝试过调用
“C:\Program Files\Java\jdk1.7.0\u 45\bin\Java”-cp。my.package.namespace.LogonToken

在我看来类似于这里:。那么,您的包名是什么?您是否尝试过调用
“C:\Program Files\Java\jdk1.7.0\u 45\bin\Java”-cp。my.package.namespace.LogonToken

愚蠢的问题。包裹名称是必须的吗?你有很好的同伴,这就是我一直在问自己的。看起来不是:,不过,提出这个愚蠢的问题似乎有好处。包裹名称是必须的吗?你有很好的同伴,这就是我一直在问自己的。看起来不是:,但是在构建项目时,使用output directory选项似乎有好处,这样它会将类放置在正确的目录中。例如
javac-d build/…
否则,请告诉我们您是如何构建类的。我在所有库所在的c:\cache\libz中。在这里,我创建了dir com/mycopmany/app/module,并将LogonToken.Java文件放入其中。我添加了包com.mycompany.app.module;作为java文件的第一行。c:\cache\I运行了c:\cache>“c:\Program Files\Java\jdk1.7.0\U 45\bin\javac”-cp c:\cache\libz c:\cache\com\mycompany\app\module\LogonToken.Java,运行正常。LogonToken.class文件现在位于C:\Cache\com\mycompany\app\module\中,但是当我如上所示运行它时,我得到了一个丑陋的错误名称错误。在您的示例中,当您运行它时,您没有在类路径中包含
C:\Cache\libz
。您是否尝试了
-cp C:\Cache\libz?是的,我做到了。同样的错误。您声称.class文件位于一个目录中,但您是从其他地方运行文件,而不是将文件的位置添加到类路径中。阅读stacktrace时,问题实际上似乎是
CrystalEnterprise.getSessionMgr()。登录
也许您应该为该技术添加一个标记,因为它似乎是导致错误的原因。在生成项目时,请使用“输出目录”选项,这样它会将类放置在正确的目录中。例如
javac-d build/…
否则,请告诉我们您是如何构建类的。我在所有库所在的c:\cache\libz中。在这里,我创建了dir com/mycopmany/app/module,并将LogonToken.Java文件放入其中。我添加了包com.mycompany.app.module;作为java文件的第一行。c:\cache\I运行了c:\cache>“c:\Program Files\Java\jdk1.7.0\U 45\bin\javac”-cp c:\cache\libz c:\cache\com\mycompany\app\module\LogonToken.Java,运行正常。LogonToken.class文件现在位于C:\Cache\com\mycompany\app\module\中,但是当我如上所示运行它时,我得到了一个丑陋的错误名称错误。在您的示例中,当您运行它时,您没有在类路径中包含
C:\Cache\libz
。您是否尝试了
-cp C:\Cache\libz?是的,我做到了。同样的错误。
Exception in thread "Thread-0" java.lang.NoClassDefFoundError: com/rsa/cryptoj/f/tK (wrong name: com/rsa/cryptoj/f/tk)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
        at com.businessobjects.bcm.internal.BcmRsaLib.initialize(BcmRsaLib.java:214)
        at com.businessobjects.bcm.internal.BcmRsaLib.<clinit>(BcmRsaLib.java:289)
        at com.businessobjects.bcm.BCM.<clinit>(BCM.java:1144)
        at com.crystaldecisions.enterprise.ocaframework.BCMInitializer.run(BCMInitializer.java:29)
        at java.lang.Thread.run(Thread.java:744)
Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class com.businessobjects.bcm.BCM
        at com.crystaldecisions.sdk.occa.security.internal.ConfidentialChannelService.establishConfidentialChannel(ConfidentialChannelService.java:175)
        at com.crystaldecisions.sdk.occa.security.internal.ConfidentialChannelService.createConfidentialChannel(ConfidentialChannelService.java:145)
        at com.crystaldecisions.sdk.occa.security.internal.CCMap.locateCCItem(CCMap.java:63)
        at com.crystaldecisions.sdk.occa.security.internal.LogonService.doUserLogon(LogonService.java:845)
        at com.crystaldecisions.sdk.occa.security.internal.LogonService.doUserLogon(LogonService.java:805)
        at com.crystaldecisions.sdk.occa.security.internal.LogonService.userLogon(LogonService.java:210)
        at com.crystaldecisions.sdk.occa.security.internal.SecurityMgr.userLogon(SecurityMgr.java:166)
        at com.crystaldecisions.sdk.framework.internal.SessionMgr.logon_aroundBody0(SessionMgr.java:454)
        at com.crystaldecisions.sdk.framework.internal.SessionMgr.logon_aroundBody1$advice(SessionMgr.java:512)
        at com.crystaldecisions.sdk.framework.internal.SessionMgr.logon(SessionMgr.java:1)
        at LogonToken.openDocumentToken(LogonToken.java:105)
        at LogonToken.getUrl(LogonToken.java:94)
        at LogonToken.main(LogonToken.java:69)