java.lang.ClassNotFoundException: org.msgpack.template.Template

641 views
Skip to first unread message

Renata Khasanova

unread,
Dec 2, 2013, 7:21:38 PM12/2/13
to jub...@googlegroups.com
I have a problem with running jubatus-classifier.

When I run standalone code it is work, but in my project I have this error:

%%%
Dec 3, 2013 1:15:03 AM org.msgpack.template.builder.BuildContext build
SEVERE: builder:
{
  if (!$3 && $1.trySkipNil()) {
    return null;
  }
  us.jubat.classifier.EstimateResult _$$_t;
  if ($2 == null) {
    _$$_t = new us.jubat.classifier.EstimateResult();
  } else {
    _$$_t = (us.jubat.classifier.EstimateResult) $2;
  }
  $1.readArrayBegin();
  if ($1.trySkipNil()) {  } else {
    _$$_t.label = (java.lang.String) this.templates[0].read($1, _$$_t.label);
  }
    _$$_t.score = $1.readDouble();
  $1.readArrayEnd();
  return _$$_t;
}

org.msgpack.MessageTypeException: org.msgpack.template.builder.TemplateBuildException: Cannot compile:
{
  if (!$3 && $1.trySkipNil()) {
    return null;
  }
  us.jubat.classifier.EstimateResult _$$_t;
  if ($2 == null) {
    _$$_t = new us.jubat.classifier.EstimateResult();
  } else {
    _$$_t = (us.jubat.classifier.EstimateResult) $2;
  }
  $1.readArrayBegin();
  if ($1.trySkipNil()) {  } else {
    _$$_t.label = (java.lang.String) this.templates[0].read($1, _$$_t.label);
  }
    _$$_t.score = $1.readDouble();
  $1.readArrayEnd();
  return _$$_t;
}

at org.msgpack.template.TemplateRegistry.buildAndRegister(TemplateRegistry.java:575)
at org.msgpack.template.TemplateRegistry.lookupAfterBuilding(TemplateRegistry.java:472)
at org.msgpack.template.TemplateRegistry.lookup(TemplateRegistry.java:251)
at org.msgpack.template.TemplateRegistry.lookupGenericTypeImpl0(TemplateRegistry.java:320)
at org.msgpack.template.TemplateRegistry.lookupGenericTypeImpl(TemplateRegistry.java:308)
at org.msgpack.template.TemplateRegistry.lookupGenericType(TemplateRegistry.java:280)
at org.msgpack.template.TemplateRegistry.lookup(TemplateRegistry.java:205)
at org.msgpack.template.TemplateRegistry.lookupGenericTypeImpl0(TemplateRegistry.java:320)
at org.msgpack.template.TemplateRegistry.lookupGenericTypeImpl(TemplateRegistry.java:308)
at org.msgpack.template.TemplateRegistry.lookupGenericType(TemplateRegistry.java:280)
at org.msgpack.template.TemplateRegistry.lookup(TemplateRegistry.java:205)
at org.msgpack.MessagePack.lookup(MessagePack.java:654)
at org.msgpack.rpc.reflect.ReflectionProxyBuilder.buildProxy(ReflectionProxyBuilder.java:156)
at org.msgpack.rpc.reflect.ProxyBuilder.buildProxy(ProxyBuilder.java:72)
at org.msgpack.rpc.reflect.Reflect.getProxy(Reflect.java:57)
at org.msgpack.rpc.Session.proxy(Session.java:61)
at us.jubat.common.ClientBase.<init>(ClientBase.java:33)
at us.jubat.classifier.ClassifierClient.<init>(ClassifierClient.java:18)
at tracing.OnlineMachineLearningRunner.trainCl(OnlineMachineLearningRunner.java:275)
at tracing.SimpleNeuriteTracer.runTrainClassifier(SimpleNeuriteTracer.java:1012)
at tracing.QueueJumpingKeyListener.keyPressed(QueueJumpingKeyListener.java:165)
at java.awt.Component.processKeyEvent(Component.java:6372)
at java.awt.Component.processEvent(Component.java:6191)
at java.awt.Component.dispatchEventImpl(Component.java:4776)
at java.awt.Component.dispatchEvent(Component.java:4604)
at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1856)
at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:722)
at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1000)
at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:865)
at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:686)
at java.awt.Component.dispatchEventImpl(Component.java:4648)
at java.awt.Component.dispatchEvent(Component.java:4604)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:717)
at java.awt.EventQueue.access$400(EventQueue.java:82)
at java.awt.EventQueue$2.run(EventQueue.java:676)
at java.awt.EventQueue$2.run(EventQueue.java:674)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:86)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:690)
at java.awt.EventQueue$3.run(EventQueue.java:688)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:86)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:687)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Caused by: org.msgpack.template.builder.TemplateBuildException: Cannot compile:
{
  if (!$3 && $1.trySkipNil()) {
    return null;
  }
  us.jubat.classifier.EstimateResult _$$_t;
  if ($2 == null) {
    _$$_t = new us.jubat.classifier.EstimateResult();
  } else {
    _$$_t = (us.jubat.classifier.EstimateResult) $2;
  }
  $1.readArrayBegin();
  if ($1.trySkipNil()) {  } else {
    _$$_t.label = (java.lang.String) this.templates[0].read($1, _$$_t.label);
  }
    _$$_t.score = $1.readDouble();
  $1.readArrayEnd();
  return _$$_t;
}

at org.msgpack.template.builder.BuildContext.build(BuildContext.java:73)
at org.msgpack.template.builder.DefaultBuildContext.buildTemplate(DefaultBuildContext.java:56)
at org.msgpack.template.builder.JavassistTemplateBuilder.buildTemplate(JavassistTemplateBuilder.java:118)
at org.msgpack.template.builder.AbstractTemplateBuilder.buildTemplate(AbstractTemplateBuilder.java:61)
at org.msgpack.template.TemplateRegistry.buildAndRegister(TemplateRegistry.java:562)
... 49 more
Caused by: javassist.CannotCompileException: by java.lang.NoClassDefFoundError: org/msgpack/template/Template
at javassist.ClassPool.toClass(ClassPool.java:1099)
at javassist.CtClass.toClass(CtClass.java:1181)
at org.msgpack.template.builder.BuildContext.createClass(BuildContext.java:154)
at org.msgpack.template.builder.BuildContext.build(BuildContext.java:68)
... 53 more
Caused by: java.lang.NoClassDefFoundError: org/msgpack/template/Template
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
at java.lang.ClassLoader.defineClass(ClassLoader.java:615)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at javassist.ClassPool.toClass2(ClassPool.java:1112)
at javassist.ClassPool.toClass(ClassPool.java:1093)
... 56 more
Caused by: java.lang.ClassNotFoundException: org.msgpack.template.Template
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 65 more

%%%

I run 
$ jubaclassifier -f ./tratata.json
I1203 01:12:35.839738 2088931712 server_util.cpp:245] starting jubaclassifier 0.4.5 RPC server at 192.168.0.58:9199
    pid                  : 7801
    user                 : renata
    mode                 : standalone mode
    timeout              : 10
    thread               : 2
    datadir              : /tmp
    logdir               :
    loglevel             : INFO(0)
    zookeeper            :
    name                 :
    join                 : false
    interval sec         : 16
    interval count       : 512
    zookeeper timeout    : 10
    interconnect timeout : 10
I1203 01:12:35.840383 2088931712 server_util.cpp:77] load config from local file: ./tratata.json
I1203 01:12:35.846887 2088931712 classifier_serv.cpp:121] config loaded: {
  "converter" : {
    "string_filter_types" : {},
    "string_filter_rules" : [],
    "num_filter_types" : {},
    "num_filter_rules" : [],
    "string_types" : {},
    "string_rules" : [
      { "key" : "*", "type" : "str", "sample_weight" : "bin", "global_weight" : "bin" }
    ],
    "num_types" : {},
    "num_rules" : [
      { "key" : "*", "type" : "num" }
    ]
  },
  "method" : "PA"
}
I1203 01:12:35.847564 2088931712 server_helper.hpp:160] start listening at port 9199
I1203 01:12:35.847829 2088931712 server_helper.hpp:166] jubaclassifier RPC server startup

////

And create this classifier:

import us.jubat.classifier.ClassifierClient;
import us.jubat.classifier.EstimateResult;
import us.jubat.classifier.LabeledDatum;
import us.jubat.common.Datum;

import java.util.*;
public class Test {

    private final ClassifierClient client;
    private final Random random;

    public Test(ClassifierClient client) {
        this.client = client;
        this.random = new Random(0);
    }

    /**
     * Helper function for making Datum object.
     *
     * @param name
     * @return
     */
    private static Datum makeDatum(String name) {
        return new Datum().addString("name", name);
    }

    private static LabeledDatum makeTrain(String tag, String name) {
        return new LabeledDatum(tag, makeDatum(name));
    }

    public void train() {
        LabeledDatum[] trainData = {
                makeTrain("徳川", "家康"),
                makeTrain("徳川", "秀忠"),
                makeTrain("徳川", "家光"),
                makeTrain("徳川", "家綱"),
                makeTrain("徳川", "綱吉"),
                makeTrain("徳川", "家宣"),
                makeTrain("徳川", "家継"),
                makeTrain("徳川", "吉宗"),
                makeTrain("徳川", "家重"),
                makeTrain("徳川", "家治"),
                makeTrain("徳川", "家斉"),
                makeTrain("徳川", "家慶"),
                makeTrain("徳川", "家定"),
                makeTrain("徳川", "家茂"),
                // makeTrain("徳川", "慶喜"),

                makeTrain("足利", "尊氏"), makeTrain("足利", "義詮"),
                makeTrain("足利", "義満"),
                makeTrain("足利", "義持"),
                makeTrain("足利", "義量"),
                makeTrain("足利", "義教"),
                makeTrain("足利", "義勝"),
                makeTrain("足利", "義政"),
                makeTrain("足利", "義尚"),
                makeTrain("足利", "義稙"),
                makeTrain("足利", "義澄"),
                makeTrain("足利", "義稙"),
                makeTrain("足利", "義晴"),
                makeTrain("足利", "義輝"),
                makeTrain("足利", "義栄"),
                // makeTrain("足利", "義昭"),

                makeTrain("北条", "時政"), makeTrain("北条", "義時"),
                makeTrain("北条", "泰時"), makeTrain("北条", "経時"),
                makeTrain("北条", "時頼"), makeTrain("北条", "長時"),
                makeTrain("北条", "政村"), makeTrain("北条", "時宗"),
                makeTrain("北条", "貞時"), makeTrain("北条", "師時"),
                makeTrain("北条", "宗宣"), makeTrain("北条", "煕時"),
                makeTrain("北条", "基時"), makeTrain("北条", "高時"),
                makeTrain("北条", "貞顕"),
                // makeTrain("北条", "守時"),
        };
        // prepare training data
        // predict the last ones (that are commented out)
        List<LabeledDatum> t = new ArrayList<LabeledDatum>(
                Arrays.asList(trainData));
        Collections.shuffle(t, random);

        // run train
        client.train(t);
    }

    private static EstimateResult findBestResult(List<EstimateResult> res) {
        EstimateResult best = null;
        for (EstimateResult r : res) {
            if (best == null || best.score < r.score) {
                best = r;
            }
        }
        return best;
    }

    public void predict() {
        // predict the last shogun
        Datum[] data = {makeDatum("慶喜"), makeDatum("義昭"), makeDatum("守時"),};
        for (Datum datum : data) {
            List<List<EstimateResult>> res = client.classify(
                    Arrays.asList(datum));
            // get the predicted shogun name
            System.out.println(findBestResult(res.get(0)).label
                    + datum.stringValues.get(0).value);
        }
    }
}

    public void trainCl() {
        try {
            ClassifierClient client = new ClassifierClient("127.0.0.1", 9199, "test", 1);
            Test s = new Test(client);
            s.train();

            s.predict();
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.exit(0);
    }


For installing jubatus I add data in pom file:

<repositories>
  <repository>
    <id>jubat.us</id>
    <name>Jubatus Repository for Maven</name>
    <url>http://download.jubat.us/maven</url>
  </repository>
</repositories>

<dependencies>
  <dependency>
    <groupId>us.jubat</groupId>
    <artifactId>jubatus</artifactId>
    <version>0.5.0</version>
  </dependency>
</dependencies>

And add follow .jar files to /Application/Fiji.app/jars
hamcrest-core-1.1.jar json-simple-1.1.1.jar junit-4.10.jar msgpack-0.6.6.jar netty-3.2.1.Final.jar slf4j-log4j12-1.6.1.jar
javassist-3.16.1-GA.jar jubatus-0.5.0.jar log4j-1.2.16.jar msgpack-rpc-0.7.0.jar slf4j-api-1.6.1.jar

Now I am trying to fix bug like this:

Yuya Unno

unread,
Dec 2, 2013, 8:48:02 PM12/2/13
to jub...@googlegroups.com
Hi, thank you for using Jubatus.

I haven't see this error yet, but found the same problem in github:
https://github.com/msgpack-rpc/msgpack-rpc/issues/75
I think javassist causes this error. And javassist is used in
msgpack-java, that is used in Jubatus.
Maybe this is classloader problem.

Please teach me your environment.
Is your program a stand alone program, or a servlet program?
What is your JVM version?


2013/12/3 Renata Khasanova <renata.k...@gmail.com>:
> --
> You received this message because you are subscribed to the Google Groups
> "Jubatus" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to jubatus+u...@googlegroups.com.
> For more options, visit https://groups.google.com/groups/opt_out.



--
株式会社プリファードインフラストラクチャー / Preferred Infrastructure, inc.
Jubatusプロジェクトリーダー / Jubatus project Leader
海野 裕也 (Yuya Unno)

〒113-0033 東京都文京区本郷 2-40-1 本郷東急ビル4F
tel: 03-6662-8675 fax: 03-6662-8685
mail: un...@preferred.jp
web: http://preferred.jp/

Renata Khasanova

unread,
Dec 3, 2013, 3:14:14 AM12/3/13
to jub...@googlegroups.com
Hi,

My program is stand alone. I use Fiji-plugin (Simple_Neurite_Tracer - http://fiji.sc/Simple_Neurite_Tracer). I am implementing classifier in it. 
I have OS X Mountain Lion 10.8.5 (12F45)java -version
java version "1.6.0_51"
Java(TM) SE Runtime Environment (build 1.6.0_51-b11-457-11M4509)
Java HotSpot(TM) 64-Bit Server VM (build 20.51-b01-457, mixed mode)

Thank you for your quick reply



2013/12/3 Yuya Unno <un...@preferred.jp>

--
You received this message because you are subscribed to a topic in the Google Groups "Jubatus" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/jubatus/H14VQv8z9dY/unsubscribe.
To unsubscribe from this group and all its topics, send an email to jubatus+u...@googlegroups.com.

Yuya Unno

unread,
Dec 6, 2013, 3:32:57 AM12/6/13
to jub...@googlegroups.com
Humm. I can't find a problem in your environment.

Please try to use the latest javassist 3.18.
http://www.csg.ci.i.u-tokyo.ac.jp/~chiba/javassist/

It may works well.

2013/12/3 Renata Khasanova <renata.k...@gmail.com>:

Renata Khasanova

unread,
Dec 6, 2013, 5:39:50 AM12/6/13
to jub...@googlegroups.com
It also doesn't work. 

I use ClassLoader from IJ library:
protected ClassLoader loader = IJ.getClassLoader();
Maybe this classloader can't load msgpack.

Also I tried dynamic add libraries:
    public void addLibraries() {
        Collection<URL> jars = new ArrayList<URL>();
        String dir = "Project/fiji/jars/";
        try {
            System.out.println("DEBUG >> in try\n");

            jars.add(new URL("file://" + dir + "msgpack-rpc-0.7.0.jar"));
            jars.add(new URL("file://" + dir + "msgpack-0.6.8.jar"));
            jars.add(new URL("file://" + dir + "jubatus-0.5.0.jar"));
            jars.add(new URL("file://" + dir + "netty-3.2.1.Final.jar"));
            jars.add(new URL("file://" + dir + "javassist.jar"));
            jars.add(new URL("file://" + dir + "json-simple-1.1.1.jar"));
            jars.add(new URL("file://" + dir + "junit-4.10.jar"));
            jars.add(new URL("file://" + dir + "hamcrest-core-1.1.jar"));
            System.out.println("DEBUG >> in try\n");

            //loader.loadClass("org.msgpack.template.Template");

            URLClassLoader child = new URLClassLoader(jars.toArray(new URL[jars.size()]),
                    this.getClass().getClassLoader()
            );
            Class.forName("org.msgpack.template.Template", true, child);

            System.out.println("DEBUG >> finish - try\n");

        } catch (MalformedURLException e) {
            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        } catch (ClassNotFoundException e) {
            System.out.println("class not found" + e);

            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
        }
    }

But it also doesn't work. My program has runtime error:

***
Caused by: org.msgpack.template.builder.TemplateBuildException: Cannot compile:
{
  if (!$3 && $1.trySkipNil()) {
    return null;
  }
  us.jubat.classifier.EstimateResult _$$_t;
  if ($2 == null) {
    _$$_t = new us.jubat.classifier.EstimateResult();
  } else {
    _$$_t = (us.jubat.classifier.EstimateResult) $2;
  }
  $1.readArrayBegin();
  if ($1.trySkipNil()) {  } else {
    _$$_t.label = (java.lang.String) this.templates[0].read($1, _$$_t.label);
  }
    _$$_t.score = $1.readDouble();
  $1.readArrayEnd();
  return _$$_t;
}

at org.msgpack.template.builder.BuildContext.build(BuildContext.java:73)
at org.msgpack.template.builder.DefaultBuildContext.buildTemplate(DefaultBuildContext.java:56)

***

Caused by: java.lang.ClassNotFoundException: org.msgpack.template.Template
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 71 more

2013/12/6 Yuya Unno <un...@preferred.jp>

Yuya Unno

unread,
Dec 9, 2013, 10:31:47 PM12/9/13
to jub...@googlegroups.com
I made a prototype of java-client without javassist.
Could you try it?

https://dl.dropboxusercontent.com/u/35429110/jubatus-0.5.1-SNAPSHOT.jar

The source codes of this version are here:
https://github.com/unnonouno/jubatus-java-client/tree/no-javassist
https://github.com/unnonouno/jubatus/tree/no-javassist

Note that it's not an official client.
If it works, I'll try to merge it to the official.

2013/12/6 Renata Khasanova <renata.k...@gmail.com>:
Reply all
Reply to author
Forward
0 new messages