java - ClassNotFoundException Thrown while deserializing -
i've been trying serialize vector within bukkit(minecraft) plugin.
this class want serialize:
package net.cerberusstudios.llama.runecraft.neat; import org.bukkit.util.vector; import java.io.externalizable; import java.io.ioexception; import java.io.objectinput; import java.io.objectoutput; /** * created josiah on 5/11/2015 based on runix */ public class vector3 extends vector implements externalizable { private static final long serialversionuid = 5312566205481472598l; public static final vector3 = new vector3(0, 1,0); public static final vector3 down = new vector3(0,-1,0); public static final vector3 north = new vector3(0,0,-1); public static final vector3 east = new vector3( 1,0,0); public static final vector3 south = new vector3(0,0, 1); public static final vector3 west = new vector3(-1,0,0); public static final vector3 none = new vector3(0,0,0); //these map minecraft block face, such you're standing on side pointing public static final vector3[] facing = {down, up, east, west, north, south};//north, south, west, east}; // runecraft: 0(down) 1(up) 2(east) 3(west) 4(north) 5(south) //use this: worldxyz point = point.offset(vector3.facing[point.face]) public static final string[] facestring = {"down", "up", "east", "west", "north", "south"}; //converts side opposite side. same xor'ing 1. public static final int[] oppositeside = new int[]{1, 0, 3, 2, 5, 4}; public static final vector3[] xzrotationorder = {vector3.north, vector3.east, vector3.south, vector3.west,}; public static final vector3[] xyrotationorder = {vector3.up, vector3.east, vector3.down, vector3.west,}; public static final vector3[] yzrotationorder = {vector3.north, vector3.up, vector3.south, vector3.down,}; public static final vector3[] conductanceneighbors = { new vector3( 0, 1, 0), new vector3( 0,-1, 0), new vector3( 0, 0,-1), new vector3( 1, 0, 0), new vector3( 0, 0, 1), new vector3(-1, 0, 0), new vector3( 1, 1, 0), new vector3(-1, 1, 0), new vector3( 0, 1, 1), new vector3( 0, 1,-1), new vector3( 1, 0, 1), new vector3(-1, 0, 1), new vector3( 1, 0,-1), new vector3(-1, 0,-1), new vector3( 1,-1, 0), new vector3(-1,-1, 0), new vector3( 0,-1, 1), new vector3( 0,-1,-1)}; public vector3(int mx, int my, int mz){ this.x = mx; this.y = my; this.z = mz; } /** returns difference vector such reference + vector = destination */ public vector3(worldxyz reference, worldxyz destination){ x = (int) (destination.getx() - reference.getx()); y = (int) (destination.gety() - reference.gety()); z = (int) (destination.getz() - reference.getz()); } public vector3(vector face) { x = (int) face.getx(); y = (int) face.gety(); z = (int) face.getz(); } public string tostring(){ return "\"x\":"+x + ", \"y\":" + y + ", \"z\":" + z; } public vector3 multiply(int m) { return new vector3(intx()*m, inty()*m, intz()*m); } public int intx() { return (int)x; } public int inty() { return (int)y; } public int intz() { return (int)z; } /** * object implements writeexternal method save contents * calling methods of dataoutput primitive values or * calling writeobject method of objectoutput objects, strings, * , arrays. * * @param out stream write object * * @throws ioexception includes i/o exceptions may occur * @serialdata overriding methods should use tag describe * data layout of externalizable object. * list sequence of element types and, if possible, * relate element public/protected field and/or * method of externalizable class. */ @override public void writeexternal(objectoutput out) throws ioexception { out.writedouble(x); out.writedouble(y); out.writedouble(z); } /** * object implements readexternal method restore * contents calling methods of datainput primitive * types , readobject objects, strings , arrays. * readexternal method must read values in same sequence * , same types written writeexternal. * * @param in stream read data in order restore object * * @throws ioexception if i/o errors occur * @throws classnotfoundexception if class object being * restored cannot found. */ @override public void readexternal(objectinput in) throws ioexception, classnotfoundexception { x = in.readdouble(); y = in.readdouble(); z = in.readdouble(); } }
the code i'm using test serialization is:
object serializetest = serializationutils.clone(new vector3(1,1,1));
this error i'm getting:
[16:48:03] [server thread/error]: not pass event playerinteractevent runecraft v3.0 org.bukkit.event.eventexception @ org.bukkit.plugin.java.javapluginloader$1.execute(javapluginloader.java:297) ~[craftbukkit-1.8.jar:git-bukkit-1092acb] @ org.bukkit.plugin.registeredlistener.callevent(registeredlistener.java:62) ~[craftbukkit-1.8.jar:git-bukkit-1092acb] @ org.bukkit.plugin.simplepluginmanager.fireevent(simplepluginmanager.java:501) [craftbukkit-1.8.jar:git-bukkit-1092acb] @ org.bukkit.plugin.simplepluginmanager.callevent(simplepluginmanager.java:486) [craftbukkit-1.8.jar:git-bukkit-1092acb] @ org.bukkit.craftbukkit.v1_8_r1.event.crafteventfactory.callplayerinteractevent(crafteventfactory.java:209) [craftbukkit-1.8.jar:git-bukkit-1092acb] @ net.minecraft.server.v1_8_r1.playerinteractmanager.interact(playerinteractmanager.java:462) [craftbukkit-1.8.jar:git-bukkit-1092acb] @ net.minecraft.server.v1_8_r1.playerconnection.a(playerconnection.java:693) [craftbukkit-1.8.jar:git-bukkit-1092acb] @ net.minecraft.server.v1_8_r1.packetplayinblockplace.a(packetplayinblockplace.java:50) [craftbukkit-1.8.jar:git-bukkit-1092acb] @ net.minecraft.server.v1_8_r1.packetplayinblockplace.a(packetplayinblockplace.java:80) [craftbukkit-1.8.jar:git-bukkit-1092acb] @ net.minecraft.server.v1_8_r1.packethandletask.run(sourcefile:13) [craftbukkit-1.8.jar:git-bukkit-1092acb] @ java.util.concurrent.executors$runnableadapter.call(unknown source) [?:1.8.0_25] @ java.util.concurrent.futuretask.run(unknown source) [?:1.8.0_25] @ net.minecraft.server.v1_8_r1.minecraftserver.z(minecraftserver.java:643) [craftbukkit-1.8.jar:git-bukkit-1092acb] @ net.minecraft.server.v1_8_r1.dedicatedserver.z(dedicatedserver.java:284) [craftbukkit-1.8.jar:git-bukkit-1092acb] @ net.minecraft.server.v1_8_r1.minecraftserver.y(minecraftserver.java:598) [craftbukkit-1.8.jar:git-bukkit-1092acb] @ net.minecraft.server.v1_8_r1.minecraftserver.run(minecraftserver.java:506) [craftbukkit-1.8.jar:git-bukkit-1092acb] @ java.lang.thread.run(unknown source) [?:1.8.0_25] caused by: org.apache.commons.lang.serializationexception: java.lang.classnotfoundexception: net.cerberusstudios.llama.runecraft.neat.vector3 @ org.apache.commons.lang.serializationutils.deserialize(serializationutils.java:166) ~[craftbukkit-1.8.jar:git-bukkit-1092acb] @ org.apache.commons.lang.serializationutils.deserialize(serializationutils.java:193) ~[craftbukkit-1.8.jar:git-bukkit-1092acb] @ net.cerberusstudios.llama.runecraft.runecraft_main.exportfaith(runecraft_main.java:7119) ~[?:?] @ net.cerberusstudios.llama.runecraft.runecraft_main.masterrunefunctionexecute(runecraft_main.java:5383) ~[?:?] @ net.cerberusstudios.llama.runecraft.runecraft_main.onrightclick(runecraft_main.java:442) ~[?:?] @ net.cerberusstudios.llama.runecraft.runecraft.onplayerinteract(runecraft.java:367) ~[?:?] @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) ~[?:1.8.0_25] @ sun.reflect.nativemethodaccessorimpl.invoke(unknown source) ~[?:1.8.0_25] @ sun.reflect.delegatingmethodaccessorimpl.invoke(unknown source) ~[?:1.8.0_25] @ java.lang.reflect.method.invoke(unknown source) ~[?:1.8.0_25] @ org.bukkit.plugin.java.javapluginloader$1.execute(javapluginloader.java:295) ~[craftbukkit-1.8.jar:git-bukkit-1092acb] ... 16 more caused by: java.lang.classnotfoundexception: net.cerberusstudios.llama.runecraft.neat.vector3 @ java.net.urlclassloader$1.run(unknown source) ~[?:1.8.0_25] @ java.net.urlclassloader$1.run(unknown source) ~[?:1.8.0_25] @ java.security.accesscontroller.doprivileged(native method) ~[?:1.8.0_25] @ java.net.urlclassloader.findclass(unknown source) ~[?:1.8.0_25] @ java.lang.classloader.loadclass(unknown source) ~[?:1.8.0_25] @ sun.misc.launcher$appclassloader.loadclass(unknown source) ~[?:1.8.0_25] @ java.lang.classloader.loadclass(unknown source) ~[?:1.8.0_25] @ java.lang.class.forname0(native method) ~[?:1.8.0_25] @ java.lang.class.forname(unknown source) ~[?:1.8.0_25] @ java.io.objectinputstream.resolveclass(unknown source) ~[?:1.8.0_25] @ java.io.objectinputstream.readnonproxydesc(unknown source) ~[?:1.8.0_25] @ java.io.objectinputstream.readclassdesc(unknown source) ~[?:1.8.0_25] @ java.io.objectinputstream.readordinaryobject(unknown source) ~[?:1.8.0_25] @ java.io.objectinputstream.readobject0(unknown source) ~[?:1.8.0_25] @ java.io.objectinputstream.readobject(unknown source) ~[?:1.8.0_25] @ org.apache.commons.lang.serializationutils.deserialize(serializationutils.java:163) ~[craftbukkit-1.8.jar:git-bukkit-1092acb] @ org.apache.commons.lang.serializationutils.deserialize(serializationutils.java:193) ~[craftbukkit-1.8.jar:git-bukkit-1092acb] @ net.cerberusstudios.llama.runecraft.runecraft_main.exportfaith(runecraft_main.java:7119) ~[?:?] @ net.cerberusstudios.llama.runecraft.runecraft_main.masterrunefunctionexecute(runecraft_main.java:5383) ~[?:?] @ net.cerberusstudios.llama.runecraft.runecraft_main.onrightclick(runecraft_main.java:442) ~[?:?] @ net.cerberusstudios.llama.runecraft.runecraft.onplayerinteract(runecraft.java:367) ~[?:?] @ sun.reflect.nativemethodaccessorimpl.invoke0(native method) ~[?:1.8.0_25] @ sun.reflect.nativemethodaccessorimpl.invoke(unknown source) ~[?:1.8.0_25] @ sun.reflect.delegatingmethodaccessorimpl.invoke(unknown source) ~[?:1.8.0_25] @ java.lang.reflect.method.invoke(unknown source) ~[?:1.8.0_25] @ org.bukkit.plugin.java.javapluginloader$1.execute(javapluginloader.java:295) ~[craftbukkit-1.8.jar:git-bukkit-1092acb] ... 16 more
i have been looking around , seems cannot find class because not referenced in classpath, think not make sense project i'm working on.
i'm thinking of instead of serializing maybe converting json, better approach?
honestly in opinion better outputting raw objects. use xml serialize of objects using library xstream.
xstream xstream = new xstream(); system.out.println(xstream.toxml(new vector3(x,y,z)));
Comments
Post a Comment