# Remote Exception



## Don83 (19. Mrz 2009)

Hallo Leute,
ich versuche gerade in einem bestehendem Projekt bugs zu finden. Bin Student also noch kein wirklicher Profi, bitte vergebt mir eventuelle Unwissenheiten.
Also im codeBeispiel 1 habe ich eine TestKlasse geschrieben.
	
	
	
	





```
import gov.nih.nlm.kss.api.KSSRetrieverV5_0;

import java.util.Vector;

import org.w3c.dom.Document;

import rmi.RMIClient;
import rmi.XMLBaseGenerator;

/**
 * 
 * @author *******
 * Class for tracking a bug in the UMLS add on for the LRSMed application
 * Informell:
 * term
 */
public class findContext_Test {
	
    
    
	public static void main(String[] args) {
		String search_fulltext = "ACUTE PULMONARY HEART DISEASE NOS"; // suchbegriff, wird auch übergeben
		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");
		// 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.
		 * */
		
		RMIClient c= new RMIClient();
	    c.connectedUmlsks();
	   //String result=c.findConcept( search_fulltext, vecSabs, language ,KSSRetrieverV5_0.NormalizeWord);
         String result=c.findCUI( search_fulltext, vecSabs, language ,KSSRetrieverV5_0.ExactMatch);
		   
	    System.out.println(result);
	}
}
```
Mit dieser Testklasse möchte ich gerne RMI Methoden aufrufen und die Ausgaben überprüfen.
Habe aber noch nie mit RMI gearbeitet, also bin noch etwas verwirrt was die Fehler betrifft.
Jetzt habe ich noch eine bereits bestehende RMIClient Klasse.

```
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)
  {
    String strXml= null ;
    try
    {
      long start = System.currentTimeMillis();
      char[] chrResult = objRetriever.findCUI(strRelease, strSearchTerm, vecSabs, strLanguage , intManipType, true);
      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 ok");
	System.out.println("Term:"+strSearchTerm+",Vector:" +vecSabs.toString()+",Language:"+ strLanguage+ ",ManipType:"+ intManipType);
    String strXml= null ;
    try
    {
      long start = System.currentTimeMillis();
      char[] chrResult = objRetriever.findConcept(strRelease, strSearchTerm, vecSabs, strLanguage , intManipType, true);
      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 erhalte nun beim Aufruf der findCUI Methode folgenden Fehler:





> findCUI: RemoteException-> RemoteException occurred in server thread; nested exception is:
> java.rmi.RemoteException: Unable to validate user information; Connection refused; invalid client IP address


Ich verstehe noch nicht so ganz was dieser Fehler bedeutet und wie man diesen Fehler beheben kann. 
Das Projekt ist relativ groß und unüberschaubar. Bin für jeden Hinweis dankbar.

Ein weiteres Problem ist beim Aufruf der findConcept Methode die ich erstmal auskommentiert habe. Dort bekomme ich eine nullpointer exception, warum auch immer.
Aber wichtig wäre mir, dass ich erstmal eine ordentliche connectivität über RMI auf  UMLSKS habe.

Ich hoffe ich habe in der richtigen section gepostet, ich weis leider selber nicht so genau wo man die Frage einzuordnen hat.


----------



## Don83 (19. Mrz 2009)

das problem hat sich nun doch gelöst


----------



## L-ectron-X (19. Mrz 2009)

Lass uns an der Lösung teilhaben!


----------

