chris78
Goto Top

REST Call über javascript

Hallo,
ich suche eine Möglichkeit, werte aus einem Java Script einen POST Rest call auszuführen. Da diese Funktion nicht im Browser, sondern in eine JAVA Funktion aufgerufen wird, kann ich auf XMLHttpRequest nicht zurück greifen. Was gibt es denn sonst für Möglichkeiten?

beste grüße und vielen dank.

Content-Key: 564019

Url: https://administrator.de/contentid/564019

Printed on: April 18, 2024 at 13:04 o'clock

Mitglied: 143728
143728 Apr 09, 2020 updated at 15:49:37 (UTC)
Goto Top
Da diese Funktion nicht im Browser, sondern in eine JAVA Funktion aufgerufen wird
Bitte wenn es Java und nicht JavaScript ist ... ein REST CALL ist ja nüscht anderes als ein simpler HTTP Webrequest mit Rückgabewerte in XML oder JSON. Einfach den Rückgabestring in ein Object der Wahl wandeln, fertig und da hast du die Qual der Wahl:
https://vaadin.com/learn/tutorials/consuming-rest-services-from-java-app ...
https://stackoverflow.com/questions/3913502/restful-call-in-java
https://www.baeldung.com/java-http-request
https://docs.kony.com/konylibrary/messaging/engagement_api_guide/Content ...
Member: chris78
chris78 Apr 09, 2020 updated at 16:15:31 (UTC)
Goto Top
Das ganze ist zwar eine Java Anwendung, allerdings ist für APIs der Software die Java script Rhino Engine eingebunden. Ich kann nur über JavaScript arbeiten. face-sad

Ich habe mal diese Pakete eingebunden aber nichts lauffähig hinbekommen.
importPackage(java.lang);
importPackage(java.xml);
importPackage(java.io);
importPackage(java.http);
importPackage(java.net);
importPackage(javax.servlet)
Member: godlie
godlie Apr 09, 2020 at 17:09:40 (UTC)
Goto Top
Member: chris78
chris78 Apr 10, 2020 at 07:49:12 (UTC)
Goto Top
Vielen dank für die Antwort. Das sieht gut aus. Allerdings muss ich zugeben, ich werde aus dieser Funktion nicht schlau. Welche Variabel wird denn jetzt als POST gesendet?
Ich wollte gerne ein String, den ich mit in der Funktion zusammenbaue einfach als POST an eine REST API übergeben. Hintergrund: Ich möchte ein Dashboard über node red erstellen, welches mir einfach gewisse Meldungen dort ausgibt.

Beste Grüße und Gesundheit an alle.
Member: godlie
godlie Apr 10, 2020 updated at 08:34:15 (UTC)
Goto Top
Hallo,

eigentlich sollte das so in der art gehen:

function callPostRestApi() {
    var post = new org.apache.commons.httpclient.methods.PostMethod("https://someurl/and/path/");  
    var client = new org.apache.commons.httpclient.HttpClient();

    // ---- Authentication ---- //
    var creds = new org.apache.commons.httpclient.UsernamePasswordCredentials("username", "password");  
    client.getParams().setAuthenticationPreemptive(true);
    client.getState().setCredentials(org.apache.commons.httpclient.auth.AuthScope.ANY, creds);
    // -------------------------- //

    http.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');  
    post.addParameter('variable','inhalt');  

    var status = client.executeMethod(post);
    var br = new java.io.BufferedReader(new java.io.InputStreamReader(post.getResponseBodyAsStream()));
    var response = "";  
    var line = br.readLine();
    while(line != null){
        response = response + line;
        line = br.readLine();
    }

    post.releaseConnection();
}
Member: chris78
chris78 Apr 12, 2020 at 07:33:42 (UTC)
Goto Top
Hallo und frohe Ostern.
Ich habe diese Funktion laufen lassen und erhalte einen Fehler:
ScriptSingletonBean.execute::ScriptException executing:resttest. Msg:org.mozilla.javascript.EcmaError: TypeError: [JavaPackage org.apache.commons.httpclient.methods.PostMethod] is not a function, it is object. (<Unknown Source>#123) in <Unknown Source> at line number 123<
com.sun.phobos.script.util.ExtendedScriptException: org.mozilla.javascript.EcmaError: TypeError: [JavaPackage org.apache.commons.httpclient.methods.PostMethod] is not a function, it is object. (<Unknown Source>#123) in <Unknown Source> at line number 123
com.sun.phobos.script.javascript.RhinoScriptEngine.invokeMethod(RhinoScriptEngine.java:259)
com.sun.phobos.script.javascript.RhinoScriptEngine.invokeFunction(RhinoScriptEngine.java:216)


das wäre schon genau bei der erste Zeile:
var post = new org.apache.commons.httpclient.methods.PostMethod("http://192.168.178.60:1880/test/");
Member: chris78
chris78 Apr 12, 2020 at 20:07:08 (UTC)
Goto Top
Ich bin jetzt etwas weiter: Damit dieser Aufruf funktioniert, muss man commons-httpclient-3.1.jar haben und mit initialisieren,
dies läuft allerdings nicht alleine, da fehlen dann noch commons-logging-1.2, junit-3.8.1.jar und die commons-codec...
Vermutlich kann der Server in der die Funktion läuft nicht den node_red erreichen. Und ich glaube da oben ist ein Fehler, es müsste post.setRequestHeader('Content-type', 'application/x-www-form-urlencoded') heißen, ich habe es jedefalls mal so genannt. Vorher konnte er mit http nichts anfangen.


ScriptSingletonBean: invoke CustomerFunction:resttest<
ScriptSingletonBean.execute::ScriptException executing:resttest. Msg:org.mozilla.javascript.WrappedException: Wrapped java.net.ConnectException: Connection timed out: connect (<Unknown Source>#142) in <Unknown Source> at line number 142<
com.sun.phobos.script.util.ExtendedScriptException: org.mozilla.javascript.WrappedException: Wrapped java.net.ConnectException: Connection timed out: connect (<Unknown Source>#142) in <Unknown Source> at line number 142
com.sun.phobos.script.javascript.RhinoScriptEngine.invokeMethod(RhinoScriptEngine.java:259)
com.sun.phobos.script.javascript.RhinoScriptEngine.invokeFunction(RhinoScriptEngine.java:216)
com.itac.mes.script.business.ScriptSingletonBean.executeCompiledScript(ScriptSingletonBean.java:229)
com.itac.mes.script.business.ScriptSingletonBean.execute(ScriptSingletonBean.j
Member: chris78
chris78 Apr 14, 2020 updated at 07:51:21 (UTC)
Goto Top
Vielen dank,
das Problem ist gelöst.