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-ID: 564019

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

Ausgedruckt am: 22.11.2024 um 17:11 Uhr

143728
143728 09.04.2020 aktualisiert um 17:49:37 Uhr
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 ...
chris78
chris78 09.04.2020 aktualisiert um 18:15:31 Uhr
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)
godlie
godlie 09.04.2020 um 19:09:40 Uhr
Goto Top
chris78
chris78 10.04.2020 um 09:49:12 Uhr
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.
godlie
godlie 10.04.2020 aktualisiert um 10:34:15 Uhr
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();
}
chris78
chris78 12.04.2020 um 09:33:42 Uhr
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/");
chris78
chris78 12.04.2020 um 22:07:08 Uhr
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
chris78
chris78 14.04.2020 aktualisiert um 09:51:21 Uhr
Goto Top
Vielen dank,
das Problem ist gelöst.