NoClassDefFoundError bei Projekt Darstar Gameserver

Der Wolf

Erfahrenes Mitglied
Hallo Leute,

ich versuche gerade mit dem Projekt Darkstar Server ein wenig herum und wollte XML Strings hin und her zu schicken. Für das Parsen und generieren
der XML Daten wollte ich die XOM Bibliothek verwenden, leider bekomme ich jedesmal, wenn der Server eine XML Nachricht erstellen soll eine
NoClassDefFoundException obwohl die Klasse sehr wohl in meinem Classpath vorhanden ist. Vielleicht hat jemand von euch eine Idee und kann mir
helfen.

Code:
private void broadCastArrival() {
		
		String name 	= sessionRef.get().getName();
		String message	= name + "joined the game.";
		
		Node node = new Element("TEST");
		
//		ChatEvent event = new ChatEvent();
//		event.setSenderName(name);
//		event.setSenderType(ChatEvent.SERVER);
		
		// TODO More channels should be supported.
//		event.setReceiverName("broadCast");
//		event.setReceiverType(ChatEvent.CHANNEL);
		
//		event.setMessage(message);
		
		String sendMessage = "<EVENT type=\"" + GameEvent.CHAT_EVENT + "\">" +
				"<MESSAGE>" + message + "</MESSAGE></EVENT>";		
		
		try {			
			
			ByteBuffer buffer = ByteBuffer.wrap(sendMessage.getBytes("UTF-8"));		
			broadCastChannel.get().send(sessionRef.get(), buffer);
			
		} catch (UnsupportedEncodingException e) {
			System.out.println("Could not encode message.");
		}		
		
	}

Code:
#!/bin/bash

XOM=/home/dschulze/PROG/libraries/XOM/xom-1.2.4.jar
BOOT=/home/dschulze/PROG/libraries/sgs-server-dist-0.9.11/bin/sgs-boot.jar
GAME=/home/dschulze/PROG/applications/PDSGame/deploy/GameServer.jar
SERVER=/home/dschulze/PROG/libraries/sgs-server-dist-0.9.11/lib/sgs-server-0.9.11.jar


java -cp $XOM:$BOOT:$GAME:$SERVER \
	com.sun.sgs.system.Boot /home/dschulze/PROG/applications/PDSGame/deploy/GameServer.boot

Gruß
Der Wolf
 
Hallo,

wie sieht denn die Meldung zum NoClassDefFoundError bei dir aus? Mit welcher Java Version lässt du dein Beispiel laufen? Verwendet dein java - Aufruf zufällig eine gcj Version?

Gruß Tom
 
Zu der Fehlermeldung. Die sieht folgendermaßen aus ...

Code:
dschulze@wolf:~$ startServer
Feb 6, 2010 3:58:18 PM com.sun.sgs.impl.kernel.Kernel <init>
INFO: The Kernel is ready, version: 0.9.11
Feb 6, 2010 3:58:18 PM com.sun.sgs.impl.service.watchdog.WatchdogServerImpl registerNode
INFO: node:com.sun.sgs.impl.service.watchdog.NodeImpl[2,health:GREEN,backup:(none)]@wolf registered
Feb 6, 2010 3:58:19 PM com.sun.sgs.impl.service.watchdog.WatchdogServiceImpl notifyRecoveryListeners
INFO: Node:2 recovering for node:1
Feb 6, 2010 3:58:19 PM com.sun.sgs.impl.service.watchdog.WatchdogServiceImpl notifyRecoveryListeners
INFO: Node:2 recovering for node:1
Feb 6, 2010 3:58:19 PM com.sun.sgs.impl.service.channel.ChannelServiceImpl$ChannelServiceNodeListener nodeHealthUpdate
INFO: Node:2 handling nodeFailed:1
Feb 6, 2010 3:58:19 PM com.sun.sgs.impl.service.session.ClientSessionServiceImpl$ClientSessionServiceRecoveryListener recover
INFO: Node:2 recovering for node:1
Feb 6, 2010 3:58:19 PM com.sun.sgs.impl.service.task.TaskServiceImpl handoffTask
INFO: Mapping for identity app:nw.game.network.server.GameServer was to node 1 which has failed so task com.sun.sgs.impl.service.task.TaskServiceImpl.Pending.app:nw.game.network.server.GameServer.1028 will run locally
Feb 6, 2010 3:58:19 PM com.sun.sgs.impl.service.channel.ChannelServiceImpl$ChannelServiceRecoveryListener recover
INFO: Node:2 recovering for node:1
Feb 6, 2010 3:58:19 PM com.sun.sgs.impl.service.task.TaskServiceImpl handoffTask
INFO: Mapping for identity app:nw.game.network.server.GameServer was to node 1 which has failed so task com.sun.sgs.impl.service.task.TaskServiceImpl.Pending.app:nw.game.network.server.GameServer.1029 will run locally
Feb 6, 2010 3:58:19 PM com.sun.sgs.impl.service.task.TaskServiceImpl handoffTask
INFO: Mapping for identity app:nw.game.network.server.GameServer was to node 1 which has failed so task com.sun.sgs.impl.service.task.TaskServiceImpl.Pending.app:nw.game.network.server.GameServer.1030 will run locally
Feb 6, 2010 3:58:19 PM com.sun.sgs.impl.service.channel.ChannelServiceImpl$ChannelServiceNodeListener nodeHealthUpdate
INFO: Node:2 handling nodeFailed:1
Feb 6, 2010 3:58:19 PM com.sun.sgs.impl.service.task.TaskServiceImpl handoffTask
INFO: Mapping for identity app:nw.game.network.server.GameServer was to node 1 which has failed so task com.sun.sgs.impl.service.task.TaskServiceImpl.Pending.app:nw.game.network.server.GameServer.3073 will run locally
Feb 6, 2010 3:58:19 PM com.sun.sgs.impl.service.task.TaskServiceImpl$3 run
INFO: Cleaned up handoff set for failed node: 1
Feb 6, 2010 3:58:19 PM com.sun.sgs.impl.service.task.TaskServiceImpl handoffTask
INFO: Mapping for identity app:nw.game.network.server.GameServer was to node 1 which has failed so task com.sun.sgs.impl.service.task.TaskServiceImpl.Pending.app:nw.game.network.server.GameServer.1031 will run locally
Feb 6, 2010 3:58:19 PM com.sun.sgs.impl.service.task.TaskServiceImpl handoffTask
INFO: Mapping for identity app:nw.game.network.server.GameServer was to node 1 which has failed so task com.sun.sgs.impl.service.task.TaskServiceImpl.Pending.app:nw.game.network.server.GameServer.1032 will run locally
Feb 6, 2010 3:58:19 PM com.sun.sgs.impl.kernel.TransactionSchedulerImpl executeTask
WARNING: dropping a task that failed: com.sun.sgs.impl.kernel.Kernel$AppStartupRunner[owner:app:nw.game.network.server.GameServer]
java.lang.NoClassDefFoundError: nu/xom/Node
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:169)
	at com.sun.sgs.impl.sharedutil.PropertiesWrapper.getClassInstance(PropertiesWrapper.java:374)
	at com.sun.sgs.impl.sharedutil.PropertiesWrapper.getClassInstanceProperty(PropertiesWrapper.java:311)
	at com.sun.sgs.impl.kernel.Kernel$AppStartupRunner.run(Kernel.java:1058)
	at com.sun.sgs.impl.kernel.TransactionSchedulerImpl.executeTask(TransactionSchedulerImpl.java:646)
	at com.sun.sgs.impl.kernel.TransactionSchedulerImpl.waitForTask(TransactionSchedulerImpl.java:440)
	at com.sun.sgs.impl.kernel.TransactionSchedulerImpl.runUnboundedTask(TransactionSchedulerImpl.java:503)
	at com.sun.sgs.impl.kernel.Kernel.startApplication(Kernel.java:800)
	at com.sun.sgs.impl.kernel.Kernel.createAndStartApplication(Kernel.java:443)
	at com.sun.sgs.impl.kernel.Kernel.<init>(Kernel.java:349)
	at com.sun.sgs.impl.kernel.Kernel.main(Kernel.java:1302)
Caused by: java.lang.ClassNotFoundException: nu.xom.Node
	at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
	... 12 more
Exception in thread "main" java.lang.NoClassDefFoundError: nu/xom/Node
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:169)
	at com.sun.sgs.impl.sharedutil.PropertiesWrapper.getClassInstance(PropertiesWrapper.java:374)
	at com.sun.sgs.impl.sharedutil.PropertiesWrapper.getClassInstanceProperty(PropertiesWrapper.java:311)
	at com.sun.sgs.impl.kernel.Kernel$AppStartupRunner.run(Kernel.java:1058)
	at com.sun.sgs.impl.kernel.TransactionSchedulerImpl.executeTask(TransactionSchedulerImpl.java:646)
	at com.sun.sgs.impl.kernel.TransactionSchedulerImpl.waitForTask(TransactionSchedulerImpl.java:440)
	at com.sun.sgs.impl.kernel.TransactionSchedulerImpl.runUnboundedTask(TransactionSchedulerImpl.java:503)
	at com.sun.sgs.impl.kernel.Kernel.startApplication(Kernel.java:800)
	at com.sun.sgs.impl.kernel.Kernel.createAndStartApplication(Kernel.java:443)
	at com.sun.sgs.impl.kernel.Kernel.<init>(Kernel.java:349)
	at com.sun.sgs.impl.kernel.Kernel.main(Kernel.java:1302)
Caused by: java.lang.ClassNotFoundException: nu.xom.Node
	at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
	... 12 more

und die zur Java Version ...

Code:
dschulze@wolf:~$ java -version
java version "1.6.0_15"
Java(TM) SE Runtime Environment (build 1.6.0_15-b03)
Java HotSpot(TM) Server VM (build 14.1-b02, mixed mode)

Gruß
 
Hallo,

in den sourcen, von XOM sieht man dass nu.xom.Node die Klasse org.jaxen.NamespaceContext verwendet. Diese ist nicht im xom-1.2.4.jar enthalten.
Wenn ich jedoch xom-1.2.4 in den Claspath lege und folgendes Programm mit der JVM Option -verbose:class laufen lasse
Java:
package de.tutorials;

import nu.xom.Element;
import nu.xom.Node;

public class XomExample {
	public static void main(String[] args) {
		Node node = new Element("xxx");
		System.out.println(node.toXML());
	}

}

sehe ich:
...
[Loaded nu.xom.jaxen.NamespaceContext from file:/home/tom/Desktop/stuff/xom-1.2.4/XOM/xom-1.2.4.jar]
...

also nu.xom.jaxen.NamespaceContext hast du vielleicht unterschiedliche Versionen von xom-xxx.jar in deinem System?
Liegt das xom-1.2.4.jar auch an der angegeben Stelle? Sind alle Abhängigkeiten von xom erfüllt?

Gruß Tom
 
Ich hatte bei meinem obigen Aufruf mal den Aufruf der Boot Klasse durch einen Aufruf der nu.xom.Node Klasse ersetzt und dann die Fehlermeldung bekommen,
dass es da keine Mein Methode gibt. Daraus schliesse ich, dass die Klasse aber existiert und gefunden wurde. Ich hab den Pfad auch so mehrmals gecheckt
und er scheint zu stimmen. Die Client Seite vom Projekt Darkstar kann ich in Eclipse ausführen und da hab ich auch keine Probleme mit der XOM Bibliothek.
Und ich habe auch nur die eine Version der XOM Bibliothek.
 
Hallo,

ich glaub es ist viel einfacher... kopier einfach das xom-1.2.4.jar ins lib Verzeichnis deiner darkstar Installation... also nicht den classpath selbst angeben. Jar ins lib und fertig.
Habs gerade damit bei mir ausprobiert.

Gruß Tom
 
Zurück