Разбор документа mathml с использованием JScience

Я пытался разобрать документ mathml с помощью JScience, но безуспешно. Ниже приведен мой фрагмент кода.

import JSci.io.*;
import JSci.mathml.*;
  .
  .
public class ParsingMathML(){
 try {
        ....
        //inputFile is an xml file containing mathml code
 InputSource file = new InputSource(new FileReader(inputFile));  
 MathMLParser parser = new MathMLParser();
 parser.parse(file);

 Object[] parseList = parser.translateToJSciObjects();
}catch (Exception e) {
 e.printStackTrace();
}
}

Я получил ошибку отсюда, поэтому я не мог ничего сделать дальше. Ниже приведен StackTrace:

Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: JSci/maths/fields/Ring$Member
 at JSci.io.MathMLParser.translateToJSciObjects(Unknown Source)
 at JSci.io.MathMLParser.translateToJSciObjects(Unknown Source)
 at mathML.ProcessMathML.processFile(ParsingMathML.java:109)
 at mathML.ProcessMathML.actionPerformed(ParsingMathML.java:72)
 at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
 at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
 at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
 at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
 at javax.swing.AbstractButton.doClick(Unknown Source)
 at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
 at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
 at java.awt.Component.processMouseEvent(Unknown Source)
 at javax.swing.JComponent.processMouseEvent(Unknown Source)
 at java.awt.Component.processEvent(Unknown Source)
 at java.awt.Container.processEvent(Unknown Source)
 at java.awt.Component.dispatchEventImpl(Unknown Source)
 at java.awt.Container.dispatchEventImpl(Unknown Source)
 at java.awt.Component.dispatchEvent(Unknown Source)
 at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
 at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
 at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
 at java.awt.Container.dispatchEventImpl(Unknown Source)
 at java.awt.Window.dispatchEventImpl(Unknown Source)
 at java.awt.Component.dispatchEvent(Unknown Source)
 at java.awt.EventQueue.dispatchEvent(Unknown Source)
 at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
 at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
 at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
 at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
 at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
 at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: JSci.maths.fields.Ring$Member
 at java.net.URLClassLoader$1.run(Unknown Source)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.net.URLClassLoader.findClass(Unknown Source)
 at java.lang.ClassLoader.loadClass(Unknown Source)
 at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
 at java.lang.ClassLoader.loadClass(Unknown Source)
 at java.lang.ClassLoader.loadClassInternal(Unknown Source)
 ... 31 more

Кроме того, кто-нибудь знает, как использовать MathMLApplyElementImpl, MathMLDocumentImpl или любые другие классы из пакета JSci.mathml?

Было бы здорово, если бы вы предоставили пример кода для разбора документа mathml.

Любая идея будет высоко оценена. Спасибо


person chepukha    schedule 06.07.2010    source источник


Ответы (1)


Что касается вашей точной ошибки, кажется, что класс JSci.maths.fields.Ring$Member не существует, что вызывает исключение ClassNotFoundException в методе JSci.io.MathMLParser.translateToJSciObjects.

Давайте посмотрим этот исходный код. В MathMLParser наиболее заметным использованием Ring.Member является возвращаемое значение. Но его можно найти во многих местах. И, поскольку Ring.Member находится в JSci.maths.fields, который, кажется, находится в том же JAR, что и MathMLParser, я предполагаю, что ваша проблема намного сложнее, чем простое исключение ClassNotFoundException.

Во-первых, можете ли вы открыть банку JScience, чтобы убедиться, что JSci.maths.fields.Ring$Member действительно существует?

Если это не так, используете ли вы несколько загрузчиков классов в одном приложении? (например, OSGi)

person Riduidel    schedule 06.07.2010
comment
Здорово! Спасибо, Ридуиэль. Я мог бы исправить эту ошибку, импортировав пакет ‹JSci.math›, который содержит класс ‹JSci.maths.fields.Ring›, как вы уже догадались. Однако parseList[] является пустым массивом независимо от того, какой файл я использую в parser.parse(file). Есть ли у вас какие-либо идеи? Спасибо - person chepukha; 06.07.2010