ClassNotFoundException 打击 XMPPConnection
Posted
技术标签:
【中文标题】ClassNotFoundException 打击 XMPPConnection【英文标题】:ClassNotFoundException smack XMPPConnection 【发布时间】:2015-03-10 14:22:15 【问题描述】:我按照这个文档来实现 gcm 上游消息。
到目前为止,我已经创建了一个 servlet,并从该 servlet 调用 SmackCcsClient。
ConnectionConfiguration config =
new ConnectionConfiguration(GCM_SERVER, GCM_PORT);
config.setSecurityMode(SecurityMode.enabled);
config.setReconnectionAllowed(true);
config.setRosterLoadedAtLogin(false);
config.setSendPresence(false);
config.setSocketFactory(SSLSocketFactory.getDefault());
connection = new XMPPTCPConnection(config);
connection.connect();
connection.addConnectionListener(new LoggingConnectionListener());
// Handle incoming packets
connection.addPacketListener(new PacketListener()
@Override
public void processPacket(Packet packet)
logger.log(Level.INFO, "Received: " + packet.toXML());
Message incomingMessage = (Message) packet;
GcmPacketExtension gcmPacket =
(GcmPacketExtension) incomingMessage.
getExtension(GCM_NAMESPACE);
String json = gcmPacket.getJson();
try
@SuppressWarnings("unchecked")
Map<String, Object> jsonObject =
(Map<String, Object>) JSONValue.
parseWithException(json);
// present for "ack"/"nack", null otherwise
Object messageType = jsonObject.get("message_type");
if (messageType == null)
// Normal upstream data message
handleUpstreamMessage(jsonObject);
// Send ACK to CCS
String messageId = (String) jsonObject.get("message_id");
String from = (String) jsonObject.get("from");
String ack = createJsonAck(from, messageId);
send(ack);
else if ("ack".equals(messageType.toString()))
// Process Ack
handleAckReceipt(jsonObject);
else if ("nack".equals(messageType.toString()))
// Process Nack
handleNackReceipt(jsonObject);
else if ("control".equals(messageType.toString()))
// Process control message
handleControlMessage(jsonObject);
else
logger.log(Level.WARNING,
"Unrecognized message type (%s)",
messageType.toString());
catch (ParseException e)
logger.log(Level.SEVERE, "Error parsing JSON " + json, e);
catch (Exception e)
logger.log(Level.SEVERE, "Failed to process packet", e);
, new PacketTypeFilter(Message.class));
// Log all outgoing packets
connection.addPacketInterceptor(new PacketInterceptor()
@Override
public void interceptPacket(Packet packet)
logger.log(Level.INFO, "Sent: 0", packet.toXML());
, new PacketTypeFilter(Message.class));
connection.login(senderId + "@gcm.googleapis.com", apiKey);
它的编译并且我没有收到任何错误,因为我已经包含了 smack 4.0.7 库。但是在执行时,我总是收到以下错误: java.lang.ClassNotFoundException: org.jivesoftware.smack.XMPPConnection
jar 已添加到构建路径中。
【问题讨论】:
【参考方案1】:smack.jar
包含该类。下载并将其添加到您的类路径中。
【讨论】:
正如我所说,jar 已经添加到构建路径中,并且在编译时不会出错。它在运行时抛出异常。 你把它添加到你的类路径了吗?在运行时构建路径不可用! 好的,在 java 资源文件夹中,有一个库文件夹,我在该文件夹中添加了 smack.jar。我如何将它也添加到类路径中? 您如何构建您的应用程序?你在哪里运行它(Eclipse,Tomcat,...)? tomcat 和 Eclipse。我从 Eclipse 运行 tomcat 服务器。以上是关于ClassNotFoundException 打击 XMPPConnection的主要内容,如果未能解决你的问题,请参考以下文章
java.lang.ClassNotFoundException 运行 jar 文件时 Spring Boot 中的 java.lang.ClassNotFoundException - 添加库
ClassNotFoundException:org.sqlite.JDBC
ClassNotFoundException和NoClassDefFoundError
ClassNotFoundException和NoClassDefFoundError