Hallo,
ich mache mal einen neuen Thread auf, da das vorherige Problem ja an sich gelöst war.
Also:
Ich habe nun folgenden Code:
Es gibt dann noch eine weitere Klasse (die RMI Klasse)
Ich bekomme nun beim Ausführen folgende Fehlermeldungen:
Durch die printmessages lässt sich das Auftreten des Fehlers ganz gut lokalisieren.
In der RMI Klasse beim Aufruf von findCUI nach der print message:
aber vor der print message
Bzw tritt der Fehler wohl durch die printmessage auf. Ich habe solche Unknown Source Fehler noch nie gesehen. Woran kann denn sowas liegen? ;(
ich mache mal einen neuen Thread auf, da das vorherige Problem ja an sich gelöst war.
Also:
Ich habe nun folgenden Code:
Code:
import gov.nih.nlm.kss.api.KSSRetrieverV5_0;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.JTextField;
import org.w3c.dom.Document;
import rmi.RMIClient;
import rmi.XMLBaseGenerator;
/**
* This class is intended to work as a testing scenario for tracking a bug in
* the UMLS add-on for the LRSMed application.
*
* @author ******
*
* Informell: Auswahl UMLS-Begriffe -> "Suche nach Begriffen"-Fenster öffnet
* sich -> Sprache und freie Suche eingeben z.B. 'Herz' und Deutsch.-> "Suche
* nach verwandten Bezeichnungen"-Fenster öffnet sich Auswahl eines Begriffs
* z.B. 'Herzanorysma' -> Leider konnten keine verwandten Terme ermittelt
* werden. Oder wenns klappt: Ihre Suche nach ... ACUTE PULMONARY HEART DISEASE
* NOS ergab... Eve. geht deutsch ned? DE-- 2 EN++ 1 Diese Fehlermeldung gibts
* auch: Leider konnte zur Zeit keine Verbindung zu dem UMLSKS Server
* hergestellt werden, bitte versuchen Sie es später noch einmal! Beispiel:
* ACUTE PULMONARY HEART DISEASE NOS -> ist ok Beispiel: ACUTE RHEUMATIC HEART
* DISEASE -> keine Verbindung
*/
public class UMLS_Test extends JFrame{
private String language="ENG";
private String manipType="Word";
private String method="findCUI";
private String sources="standard";
private String term="";
private String[] langOptions = { "ENG", "GER" };
private String[] manipOptions = { "Word", "NormalizeString","NormalizeWord","ExactMatch","TruncateRight","TruncateLeft","ApproxMatch" };
private String[] methodOptions = { "findCUI", "findConcept" };
private String[] vectorOptions = { "standard", "all" };
private JLabel termLabel = new JLabel("Term");
private JLabel langLabel = new JLabel("Lanuage");
private JLabel manipLabel = new JLabel("ManipType");
private JLabel methodLabel = new JLabel("Method");
private JLabel vectorLabel = new JLabel("Source") ;
private JTextField termField = new JTextField(35);
private JComboBox langBox = new JComboBox();
private JComboBox manipBox = new JComboBox();
private JComboBox methodBox = new JComboBox();
private JComboBox vectorBox = new JComboBox();
public UMLS_Test(String name){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle(name);
this.setSize(520, 130);
Container inhalt = this.getContentPane();
JTable oberEbene = new JTable();
oberEbene.setLayout(new FlowLayout());
inhalt.add(oberEbene);
JPanel ersteEbene = new JPanel(new GridLayout(2,4));
oberEbene.add(ersteEbene);
JButton Runbutton = new JButton("Run");
oberEbene.add(termLabel);
oberEbene.add(termField);
oberEbene.add(Runbutton);
ersteEbene.add(langLabel);
ersteEbene.add(manipLabel);
ersteEbene.add(methodLabel);
ersteEbene.add(vectorLabel);
// Sprach Optionen:
for (int i = 0; i < 2; i++){
this.langBox.addItem(langOptions[i]);}
ersteEbene.add(langBox);
langBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
language=(String) ((JComboBox) e.getSource()).getSelectedItem();
}
});
// ManipType Optionen:
for (int j = 0; j < 7; j++){
this.manipBox.addItem(manipOptions[j]);}
ersteEbene.add(manipBox);
manipBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
manipType=(String) ((JComboBox) e.getSource()).getSelectedItem();
}
});
//Method Optionen:
for (int k = 0; k < 2; k++){
this.methodBox.addItem(methodOptions[k]);}
ersteEbene.add(methodBox);
methodBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
method=(String) ((JComboBox) e.getSource()).getSelectedItem();
}
});
//Vector Optionen:
for (int l = 0; l < 2; l++){
this.vectorBox.addItem(vectorOptions[l]);}
ersteEbene.add(vectorBox);
vectorBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
sources=(String) ((JComboBox) e.getSource()).getSelectedItem();
}
});
termField.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
term=(String) ((JTextField) e.getSource()).getText();
System.out.println("Search Term: \""+term+"\"");
}
});
Runbutton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Run Method \""+ method+"\" in language \""+language+"\" with manipType set to \""+manipType+"\" and with usage of "+sources+ " sources.");
runMethod(term, language, method, sources, manipType);
//dispose();
}
});
// display the GUI
this.setVisible(true);
}
public void runMethod(String search_Term, String lang, String meth, String src,String manip ){
// Befüllen der source Vectoren
Vector vecSabs = null;
Vector sabsDe = new Vector();
Vector sabsEn = new Vector();
sabsDe.add("MSHGER");
sabsDe.add("WHOGER");
sabsDe.add("MDRGER");
sabsDe.add("DMDUMD");
sabsEn.add("MSH");
if(lang.equals("GER") && src.equals("standard")){
vecSabs=sabsDe;
}
if(lang.equals("EN") && src.equals("standard")){
vecSabs=sabsEn;
}
if(src.equals("all")){
vecSabs.add("");
}
// Int value des Manip Types festlegen:
int manipValue =4;
if(manip.equals("ExactMatch")){
manipValue=1;
}
if(manip.equals("NormalizeString")){
manipValue=2;
}
if(manip.equals("NormalizeWord")){
manipValue=3;
}
if(manip.equals("Word")){
manipValue=4;
}
if(manip.equals("TruncateRight")){
manipValue=5;
}
if(manip.equals("TruncateLeft")){
manipValue=6;
}
if(manip.equals("ApproxMatch")){
manipValue=7;
}
// Aufruf der getCUI
if(meth.equals("findCUI")){
RMIClient c= new RMIClient();
c.connectedUmlsks();
String result=c.findCUI( search_Term, vecSabs, lang ,manipValue);//TruncateRight,ExactMatch
c.disconnectedUmlsks();
System.out.println(result);
}
if(meth.equals("findConcept")){
RMIClient c= new RMIClient();
c.connectedUmlsks();
String result=c.findConcept( search_Term, vecSabs, lang ,manipValue);//TruncateRight,ExactMatch
c.disconnectedUmlsks();
System.out.println(result);
}
}
public static void main(String[] args) {
UMLS_Test gui = new UMLS_Test("LRSMed-Tester");
//String search_fulltext = "ACUTE PULMONARY HEART DISEASE NOS"; //sollte klappen
//String search_fulltext ="ACUTE RHEUMATIC HEART DISEASE";
//String search_fulltext = "Heart";
//String language = "ENG"; // oder GER... vom Formular kommt hier eine
//Vector vecSabs = null;
//XMLBaseGenerator xmlParser= null;
/* 1(GER) oder 2(ENG)
// Wenn Sprache englisch oder Deutsch werden mit "getSabsVectorDe", oder
// "getSabsVectorEn" folgende Vectoren angelegt:
// Also die Vectoren werden mit den jeweils 10 aktuellen Quellabkürzungen
gefüllt.*/
//Vector sabsDe = new Vector();
//Vector sabsEn = new Vector();
// jeweils 10 Werte noch einfügen => TODO: mal in umls_data.xml nachsehen
//sabsDe.add("MSHGER");
//sabsEn.add("MSH");
//sabsEn.add("WHO");
//sabsEn.add("");
// Wenn der Vector ganz leer ist => Endlosschleife
// hier wird dann wenn Englisch der englische vector genommen bzw deutsche
// vecSabs= sabsEn; // das is jetzt der englische vector einfach.
/* DOM = Document Object Model=>
* Den Document teil verstehe ich noch nicht.
* */
}
}
Es gibt dann noch eine weitere Klasse (die RMI Klasse)
Code:
package rmi;
import java.io.*;
import gov.nih.nlm.kss.api.KSSRetrieverV5_0;
import gov.nih.nlm.kss.util.DatabaseException;
import java.net.MalformedURLException;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.Naming;
import java.util.Vector;
public class RMIClient
{
protected PrintStream out = null; // Testzwecke
protected KSSRetrieverV5_0 objRetriever = null;
protected String strRelease = null; //verwende immer aktuelle version
protected String strHost = null;
protected String strName = null;
protected String strTerm = null;
public RMIClient()
{
this.strHost = "umlsks.nlm.nih.gov";
this.strName = "//umlsks.nlm.nih.gov/KSSRetriever";
this.strRelease = null;
//describeCurrentUMLSVersion
}
public void connectedUmlsks()
{
try {
this.objRetriever = (KSSRetrieverV5_0)Naming.lookup(strName);
/* Liefert eine Referenz auf das Objekt,das unter dem Namen
* name bei der RMI-Registrierung registriert ist. Wenn kein
* Objekt unter diesem Namen registriert ist, wird eine Exception
* ausgelöst.
*/
System.out.println("test");
} catch (RemoteException rex) {
// Wird ausgelöst, wenn keine Verbindung zur RMI-Registrierung aufgebaut werden kann.
System.err.println("RemoteException: " + rex.getMessage());
return;
} catch (NotBoundException nbex) {
// Wird ausgelöst, wenn unter dem angegeben Namen gerade kein Objekt bei der RMI-Registrierung registriert ist..
System.err.println("NotBoundException: " + nbex.getMessage());
return;
} catch (MalformedURLException mfurl) {
// Wird ausgelöst, wenn der angegebene Name keine gültige URL für RMI-Objekte darstellt..
System.err.println("MalformedURLException: " + mfurl.getMessage());
return;
}
}
public String findCUI (String strSearchTerm, Vector vecSabs, String strLanguage, int intManipType)
{
System.out.println("Methodenaufruf findCUI ok");
System.out.println("Term:"+strSearchTerm+",Vector:" +vecSabs.toString()+",Language:"+ strLanguage+ ",ManipType:"+ intManipType);
String strXml= null ;
try
{
System.out.println("Hänge vorm eigentlichen methodenaufruf?");
long start = System.currentTimeMillis();
char[] chrResult = objRetriever.findCUI(strRelease, strSearchTerm, vecSabs, strLanguage , intManipType, true);
System.out.println("nein");
strXml = new String(chrResult);
System.out.println(strXml);
long end = System.currentTimeMillis();
long differenz = end - start;
System.out.println( differenz+ " millisekunden");
System.out.println(differenz/1000 + " sekunden");
} catch (DatabaseException ex) {
System.err.println("findCUI: DatabaseException-> " +
ex.getMessage());
} catch (RemoteException ex) {
System.out.println("testtest");
System.err.println("findCUI: RemoteException-> " +
ex.getMessage());
}
return strXml;
}
// wird eventuell nicht benötigt!
public String getContext (String searchTerm)
{
String strXml=null;
try
{
long start = System.currentTimeMillis();
char[] result = objRetriever.getContext(strRelease, searchTerm, null);
strXml = new String(result);
long end = System.currentTimeMillis();
long differenz = end - start;
System.out.println("getContext: "+differenz);
} catch (DatabaseException ex) {
System.err.println("getContext: DatabaseException-> " + ex.getMessage());
} catch (RemoteException ex) {
System.err.println("getContext: RemoteException-> " + ex.getMessage());
}
return strXml;
}
public String findConcept (String strSearchTerm, Vector vecSabs, String strLanguage, int intManipType)
{
System.out.println("Methodenaufruf: findConcept ok");
System.out.println("Term:"+strSearchTerm+",Vector:" +vecSabs.toString()+",Language:"+ strLanguage+ ",ManipType:"+ intManipType);
String strXml= null ;
try
{
System.out.println("Hänge vorm eigentlichen methodenaufruf?");
long start = System.currentTimeMillis();
char[] chrResult = objRetriever.findConcept(strRelease, strSearchTerm, vecSabs, strLanguage , intManipType, true);
System.out.println("nein");
System.out.println(chrResult);
strXml = new String(chrResult);
long end = System.currentTimeMillis();
long differenz = end - start;
System.out.println( differenz+ " millisekunden");
System.out.println(differenz/1000 + " sekunden");
} catch (DatabaseException ex) {
System.err.println("findConcept: DatabaseException-> " +
ex.getMessage());
} catch (RemoteException ex) {
System.err.println("findConcept: RemoteException-> " +
ex.getMessage());
} catch (NullPointerException ex) { //Grund fuer Fehler nicht bekannt
System.out.println("Hier ist also ein Fehler");
System.err.println("findConcept: NullPointerException-> " +
ex.getMessage());
}
return strXml;
}
public void disconnectedUmlsks()
{
this.objRetriever= null;
}
}
Ich bekomme nun beim Ausführen folgende Fehlermeldungen:
Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at rmi.RMIClient.findCUI(RMIClient.java:59)
at UMLS_Test.runMethod(UMLS_Test.java:195)
at UMLS_Test$6.actionPerformed(UMLS_Test.java:139)
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.plaf.basic.BasicButtonListener.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)
Durch die printmessages lässt sich das Auftreten des Fehlers ganz gut lokalisieren.
In der RMI Klasse beim Aufruf von findCUI nach der print message:
Code:
System.out.println("Methodenaufruf findCUI ok");
Code:
System.out.println("Term:"+strSearchTerm+",Vector:" +vecSabs.toString()+",Language:"+ strLanguage+ ",ManipType:"+ intManipType);