求助,在tomcat6,jdk1.5上正常,部署到was6.1上报错

报错信息如下:
[08-11-28 15:57:13:734 CST] 00000026 ServletWrappe E   SRVE0068E: 未捕获到 servlet UserDoServlet 的其中一个服务方法中抛出的异常。抛出的异常:java.lang.ClassFormatError: (com/sun/crypto/provider/SunJCE_al) enclosing method class index must reference a class at offset=10103
at java.lang.ClassLoader.defineClassImpl(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:258)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:151)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:589)
at java.net.URLClassLoader.access$400(URLClassLoader.java:123)
at java.net.URLClassLoader$ClassFinder.run(URLClassLoader.java:1034)
at java.security.AccessController.doPrivileged(AccessController.java:279)
at java.net.URLClassLoader.findClass(URLClassLoader.java:491)
at java.lang.ClassLoader.loadClass(ClassLoader.java:631)
at java.lang.ClassLoader.loadClass(ClassLoader.java:597)
at com.sun.crypto.provider.SunJCE.(DashoA6275)
at sso.SsoClass.(SsoClass.java:91)
at sso.SsoClass.(SsoClass.java:80)
at sso.SsoUser.userLogin(SsoUser.java:931)
at sso.servlet.UserDoServlet.doPost(UserDoServlet.java:685)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1095)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1036)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:145)
at org.ecms.common.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:23)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:87)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:832)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:679)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:565)
at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:478)
at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3440)
at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:267)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:815)
at com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1461)
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:118)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:458)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:387)
at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:102)
at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136)
at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:195)
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:743)
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:873)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1473)
[08-11-28 15:57:13:781 CST] 00000026 ServiceLogger I com.ibm.ws.ffdc.IncidentStreamImpl initialize FFDC0009I: FFDC 已打开附带的流文件 d:WebSphereAppServerprofilesAppSrv01logsffdcserver1_00000026_08.11.28_15.57.13_0.txt
[08-11-28 15:57:13:843 CST] 00000026 ServiceLogger I com.ibm.ws.ffdc.IncidentStreamImpl resetIncidentStream FFDC0010I: FFDC 已关闭附带的流文件 d:WebSphereAppServerprofilesAppSrv01logsffdcserver1_00000026_08.11.28_15.57.13_0.txt
[08-11-28 15:57:13:843 CST] 00000026 ServiceLogger I com.ibm.ws.ffdc.IncidentStreamImpl open FFDC0009I: FFDC 已打开附带的流文件 d:WebSphereAppServerprofilesAppSrv01logsffdcserver1_00000026_08.11.28_15.57.13_1.txt
[08-11-28 15:57:13:906 CST] 00000026 ServiceLogger I com.ibm.ws.ffdc.IncidentStreamImpl resetIncidentStream FFDC0010I: FFDC 已关闭附带的流文件 d:WebSphereAppServerprofilesAppSrv01logsffdcserver1_00000026_08.11.28_15.57.13_1.txt
[08-11-28 15:57:13:921 CST] 00000026 ServiceLogger I com.ibm.ws.ffdc.IncidentStreamImpl open FFDC0009I: FFDC 已打开附带的流文件 d:WebSphereAppServerprofilesAppSrv01logsffdcserver1_00000026_08.11.28_15.57.13_2.txt
[08-11-28 15:57:13:937 CST] 00000026 ServiceLogger I com.ibm.ws.ffdc.IncidentStreamImpl resetIncidentStream FFDC0010I: FFDC 已关闭附带的流文件 d:WebSphereAppServerprofilesAppSrv01logsffdcserver1_00000026_08.11.28_15.57.13_2.txt
[08-11-28 15:57:13:953 CST] 00000026 ServiceLogger I com.ibm.ws.ffdc.IncidentStreamImpl open FFDC0009I: FFDC 已打开附带的流文件 d:WebSphereAppServerprofilesAppSrv01logsffdcserver1_00000026_08.11.28_15.57.13_3.txt
[08-11-28 15:57:13:968 CST] 00000026 ServiceLogger I com.ibm.ws.ffdc.IncidentStreamImpl resetIncidentStream FFDC0010I: FFDC 已关闭附带的流文件 d:WebSphereAppServerprofilesAppSrv01logsffdcserver1_00000026_08.11.28_15.57.13_3.txt
[08-11-28 15:57:13:968 CST] 00000026 WebApp        E   [Servlet Error]-[UserDoServlet]: java.lang.ClassFormatError: (com/sun/crypto/provider/SunJCE_al) enclosing method class index must reference a class at offset=10103
at java.lang.ClassLoader.defineClassImpl(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:258)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:151)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:589)
at java.net.URLClassLoader.access$400(URLClassLoader.java:123)
at java.net.URLClassLoader$ClassFinder.run(URLClassLoader.java:1034)
at java.security.AccessController.doPrivileged(AccessController.java:279)
at java.net.URLClassLoader.findClass(URLClassLoader.java:491)
at java.lang.ClassLoader.loadClass(ClassLoader.java:631)
at java.lang.ClassLoader.loadClass(ClassLoader.java:597)
at com.sun.crypto.provider.SunJCE.(DashoA6275)
at sso.SsoClass.(SsoClass.java:91)
at sso.SsoClass.(SsoClass.java:80)
at sso.SsoUser.userLogin(SsoUser.java:931)
at sso.servlet.UserDoServlet.doPost(UserDoServlet.java:685)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1095)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1036)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:145)
at org.ecms.common.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:23)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:87)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:832)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:679)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:565)
at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:478)
at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3440)
at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:267)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:815)
at com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1461)
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:118)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:458)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:387)
at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:102)
at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136)
at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:195)
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:743)
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:873)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1473)

涉及代码发在2楼,这里放不下了。。。。。。。。。。
参与3

3同行回答

zllnihyzllnihy集成工程师金融电子化公司
楼主这个问题怎么解决的啊?显示全部
楼主这个问题怎么解决的啊?收起
金融其它 · 2012-03-28
浏览547
lyf1222lyf1222技术部亿迪安
直接注释掉92行 就过了。显示全部
直接注释掉92行 就过了。收起
2008-12-04
浏览526
lyf1222lyf1222技术部亿迪安
涉及程序代码,SsoClass.java, 上面提到几处报错行号我用红色字体加粗显示了:import java.net.URL;import java.security.*;import java.util.Iterator;import java.util.List;import javax.crypto.*;import org.jdom.Document;import org.jdom.Element;import org.jdom.inp...显示全部
涉及程序代码,SsoClass.java, 上面提到几处报错行号我用红色字体加粗显示了:

import java.net.URL;
import java.security.*;
import java.util.Iterator;
import java.util.List;
import javax.crypto.*;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class SsoClass {
private static String strDefaultKey = "abcwj!j8";
private Cipher encryptCipher = null;
private Cipher decryptCipher = null;
/**
  * 将byte数组转换为表示16进制值的字符串, 如:byte[]{8,18}转换为:0813, 和public static byte[]
  * hexStr2ByteArr(String strIn) 互为可逆的转换过程
  *
  * @param arrB
  *            需要转换的byte数组
  * @return 转换后的字符串
  * @throws Exception
  *             本方法不处理任何异常,所有异常全部抛出
  */
public static String byteArr2HexStr(byte[] arrB) throws Exception {
  int iLen = arrB.length;
  // 每个byte用两个字符才能表示,所以字符串的长度是数组长度的两倍
  StringBuffer sb = new StringBuffer(iLen * 2);
  for (int i = 0; i < iLen; i++) {
   int intTmp = arrB;
   // 把负数转换为正数
   while (intTmp < 0) {
    intTmp = intTmp + 256;
   }
   // 小于0F的数需要在前面补0
   if (intTmp < 16) {
    sb.append("0");
   }
   sb.append(Integer.toString(intTmp, 16));
  }
  return sb.toString();
}
/**
  * 将表示16进制值的字符串转换为byte数组, 和public static String byteArr2HexStr(byte[] arrB)
  * 互为可逆的转换过程
  *
  * @param strIn
  *            需要转换的字符串
  * @return 转换后的byte数组
  * @throws Exception
  *             本方法不处理任何异常,所有异常全部抛出
  */
public static byte[] hexStr2ByteArr(String strIn) throws Exception {
  byte[] arrB = strIn.getBytes();
  int iLen = arrB.length;
  // 两个字符表示一个字节,所以字节数组长度是字符串长度除以2
  byte[] arrOut = new byte[iLen / 2];
  for (int i = 0; i < iLen; i = i + 2) {
   String strTmp = new String(arrB, i, 2);
   arrOut[i / 2] = (byte) Integer.parseInt(strTmp, 16);
  }
  return arrOut;
}
/**
  * 默认构造方法,使用默认密钥
  *
  * @throws Exception
  */
public SsoClass() throws Exception {
  this(strDefaultKey);     //80行
}
/**
  * 指定密钥构造方法
  *
  * @param strKey
  *            指定的密钥
  * @throws Exception
  */
public SsoClass(String strKey) throws Exception {
  Security.addProvider(new com.sun.crypto.provider.SunJCE()); //92行
  Key key = getKey(strKey.getBytes());
/*
* JDK1.5不支持此种写法
  encryptCipher = Cipher.getInstance("DES");
  encryptCipher.init(Cipher.ENCRYPT_MODE, key);
  decryptCipher = Cipher.getInstance("DES");
  decryptCipher.init(Cipher.DECRYPT_MODE, key);
*/
  synchronized (Cipher.class)
  {
  encryptCipher = Cipher.getInstance("DES");
  encryptCipher.init(Cipher.ENCRYPT_MODE, key);
  decryptCipher = Cipher.getInstance("DES");
  decryptCipher.init(Cipher.DECRYPT_MODE, key);
  }
}
/**
  * 加密字节数组
  *
  * @param arrB
  *            需加密的字节数组
  * @return 加密后的字节数组
  * @throws Exception
  */
public byte[] encrypt(byte[] arrB) throws Exception {
  return encryptCipher.doFinal(arrB);
}
/**
  * 加密字符串
  *
  * @param strIn
  *            需加密的字符串
  * @return 加密后的字符串
  * @throws Exception
  */
public String encrypt(String strIn) throws Exception {
  return byteArr2HexStr(encrypt(strIn.getBytes()));
}
/**
  * 解密字节数组
  *
  * @param arrB
  *            需解密的字节数组
  * @return 解密后的字节数组
  * @throws Exception
  */
public byte[] decrypt(byte[] arrB) throws Exception {
  return decryptCipher.doFinal(arrB);
}
/**
  * 解密字符串
  *
  * @param strIn
  *            需解密的字符串
  * @return 解密后的字符串
  * @throws Exception
  */
public String decrypt(String strIn) throws Exception {
  return new String(decrypt(hexStr2ByteArr(strIn)));
}
/**
  * 从指定字符串生成密钥,密钥所需的字节数组长度为8位 不足8位时后面补0,超出8位只取前8位
  *
  * @param arrBTmp
  *            构成该字符串的字节数组
  * @return 生成的密钥
  * @throws java.lang.Exception
  */
private Key getKey(byte[] arrBTmp) throws Exception {
  // 创建一个空的8位字节数组(默认值为0)
  byte[] arrB = new byte[8];
  // 将原始字节数组转换为8位
  for (int i = 0; i < arrBTmp.length && i < arrB.length; i++) {
   arrB = arrBTmp;
  }
  // 生成密钥
  Key key = new javax.crypto.spec.SecretKeySpec(arrB, "DES");
  return key;
}
} [ 本帖最后由 lyf1222 于 2008-11-28 16:09 编辑 ]收起
2008-11-28
浏览489

提问者

lyf1222
技术部亿迪安

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2008-11-28
  • 关注会员:0 人
  • 问题浏览:5488
  • 最近回答:2012-03-28
  • X社区推广