# replaceAll => no such java.lang.NoSuchMethodError



## Don83 (6. Apr 2009)

Hallo,
ich habe ein kleines Problem. Und zwar.
Ich habe für ein kleiens Uni Projekt einen Fehler an einem bereits bestehendem tool gefixed. Bzw. bei mir zuhause am nachgebauten Testtool funktionierts. (Hatte schon ein paar Fragen zu gestellt.)
Jetzt gibts folgendes Problem:
Wenn ich meine Änderungen am lifetool teste gibts folgende Fehlermeldung:

```
Oracle XSQL Servlet Page Processor 9.0.2.0.0 (Production)
XSQL-017: Unexpected Error Occurred
java.lang.NoSuchMethodError: java.lang.String: method replaceAll(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; not found
at rmi.RMIClient.insertMissingTags(RMIClient.java:149)
at rmi.RMIClient.findConcept(RMIClient.java:123)
at findContext.handleAction(findContext.java:69)
at oracle.xml.xsql.actions.XSQLExtensionActionHandler.handleAction(XSQLExtensionActionHandler.java:78)
at oracle.xml.xsql.XSQLDocHandler.getDocument(XSQLDocHandler.java:145)
at oracle.xml.xsql.XSQLPageProcessor.process(XSQLPageProcessor.java:146)
at oracle.xml.xsql.XSQLServlet.doGet(XSQLServlet.java:60)
at oracle.xml.xsql.XSQLServlet.doPost(XSQLServlet.java:81)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:521)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:588)
at org.apache.jserv.JServConnection.processRequest(JServConnection.java:435)
at org.apache.jserv.JServConnection.run(JServConnection.java:290)
at java.lang.Thread.run(Thread.java:498)
```

Was verwirrend ist, ist folgendes:



> java.lang.NoSuchMethodError: java.lang.String: method replaceAll


Ichhabe eine Methode geschrieben, die replaceAll verwendet. Dieses replaceAll ist ja eine Standard String Methode.
String (Java 2 Platform SE v1.4.2)

Wurde mit 1.4.2 wohl eingeführt. 
Das ist auch angeblich die version des Projekts an dem ich gerade arbeite.

Ich bin jetzt grade überfragt woran der Fehler liegt. Kann der Fehler an ungleichen versionen liegen? Ich habe unter 1.4.0 compiliert.
Mein Prof dann nochmal unter 1.4.2 ...ging nicht.

Wie kann ich denn die version des Projekts bestimmen? (mal ganz blöd gefragt)
Und falls dies kein Java versions Fehler ist, wo liegt der Fehler dann? Bin für Hinweise dankbar.  Vielleicht wird ja jemand aus der Fehlermeldung schlau.

PS:
Gibt es eine alternative zu replaceAll?
Also wenn ich zum Beispiel abc durch ab<hallo>c ersetzen will?


----------



## Ebenius (6. Apr 2009)

Ich kenne mich da jetzt nicht so recht aus, aber es scheint mir, als würde dieser Code auf dem Java des Oracle-DBMS laufen. Bei Oracle 10 ist standardgemäß Java 1.4 dabei. Bei Oracle 9i...?

Ebenius


----------



## Don83 (6. Apr 2009)

Also aus einer Seminararbeit weis ich folgendes:


> Technisch gesehen ist die Webanwendung serverseitig in Java
> implementiert. Bei der Integration des UMLS Moduls wurde ebenfalls Java
> Version 1.4.2 mit den Oracle JDeveloper Tools als Technologie gewählt.[4]


Insofern hätte ich angenommen, dass replaceAll zu keinen Problemen führt. Tut es aber anscheinend doch :/. Ich vermute jetzt nur, dass die Version doch eine andere ist. Ansonsten bin ich grad wirklich ein wenig verwirrt. ???:L


----------



## Ebenius (6. Apr 2009)

Auf unserem Oracle 9i Server schaut das so aus: 
	
	
	
	





```
$ /opt/oracle/product/9.2.0.1.0/jdk/jre/bin/java -version
java version "1.3.1_01"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_01)
Java HotSpot(TM) Client VM (build 1.3.1_01, mixed mode)
```
Und in Java 1.3 gab's noch keine RegEx in der Java SE.

Ebenius


----------



## Don83 (6. Apr 2009)

Argh ok. Gibt es dann eventuell eine Alternative zu replaceAll die auch unter 1.3 läuft? Wobei ich befürchte, dass dem nicht so ist, wenn, wie du sagst RegEx erst ab java 1.4 mit dabei sind.
Wäre dann wahrscheinlich die einzige Möglichkeit die Methode selber zu schreiben.

Eine Idee hätte ich spontan. 
Ich versuche mit XML files zu arbeiten. Bei XML files dürften doch generel die leerzeichen egal sein, oder?.
Man könnte ja das file trimmen. Also mit xml_output.trim(), dann wären die leerzeichen raus und dann die replace methode verwenden, die zwar keine regEx erlaubt aber dafür schon seit 1.3 mit dabei ist.
Klingt das irgendwie plausibel ?
Auf jeden Fall schonmal vielen Dank für den Hinweis.


----------



## Wildcard (6. Apr 2009)

trim schneidet nur am Anfang und am Ende Leerzeichen ab, nicht mitten im String.


----------

