Guten Tag,
ich versuche zurzeit einen Webservice als Datenquelle in eine Java-Anwendung zu integrieren. Der Webservice liefert mir Sensordaten im JSON-Format. Hersteller ist die US-Firma Aspen Technology falls das jemanden etwas sagt.
Der Webservice propagiert nach Außen eine URL der Form:
Die Daten ergeben sich aus dem SQL-String in der CDATA-Sektion, Verbindungsdaten werden vorher in der Sektion SQL abgehandelt.
Problem ist das jeder Aufruf, mit mir bekannten Java-Mitteln/Bibliotheken, fehlschlägt mit der Meldung Response Code 400, Bad Request. Der Webservice sieht die Abfrage als falsch aufgbaut an.
Versuche mit AppacheHttpComponents, JAX-WS und ResteasyClient gingen schief mit dem selben Fehlercode.
Aufrufe auf andere Webservices die die Parameterübergabestruktur nicht aufweisen funktionieren jedoch. Getestet mit Webservices über Wetter- und Finanzdaten. Ich vermute das Problem also in der Parameterübergabe, welche nicht nach klassischem Muster erfolg:
(...SQL?param1=paramval1¶m2=paramval2 erfolgt sondern in der Art(...SQL?<SQL="...">CDATA-Sektion</SQL> )
Seltsamerweise funktioniert die obige URL (bei 1) aus Javascript mit verschieden Browsern mittels der Bibliothek/Klasse XMLHttpRequest problemlos. Hier kommen die korrekten Daten vom Webservice.
Leider ist die Bibliothek/Klasse XMLHttpRequest in der Javascript-Engine der Java 8 SE nicht vorhanden, weswegen mein angedachter Umweg die Abfrage in Javascript auszulagern und in Java als Funktion zu verwenden nicht möglich ist.
Hat jemand schon einmal mit Produkten der Firma gearbeitet und weiß eine Bibliothek die mit dieser URL-Konstruktion umgehen kann? Umkonfigurieren der URL scheint nicht möglich zu sein.
Javacode des Clienten Prototyp
Vielen Dank im Voraus
Mit freundlichen Grüßen
larsymyl82
ich versuche zurzeit einen Webservice als Datenquelle in eine Java-Anwendung zu integrieren. Der Webservice liefert mir Sensordaten im JSON-Format. Hersteller ist die US-Firma Aspen Technology falls das jemanden etwas sagt.
Der Webservice propagiert nach Außen eine URL der Form:
1URL:http://rechnername.domaene.net/WebXX/ProcessData/AtProcessDataREST.dll/SQL?<SQL c="DRIVER={AspenTech SQLplus};HOST=rechnername;Port=XXXXX;CHARINT=N;CHARFLOAT=N;CHARTIME=N;CONVERTERRORS=N" m="1000" s="1"><![CDATA[SELECT SOMETHING FROM DB]]></SQL>
Die Daten ergeben sich aus dem SQL-String in der CDATA-Sektion, Verbindungsdaten werden vorher in der Sektion SQL abgehandelt.
Problem ist das jeder Aufruf, mit mir bekannten Java-Mitteln/Bibliotheken, fehlschlägt mit der Meldung Response Code 400, Bad Request. Der Webservice sieht die Abfrage als falsch aufgbaut an.
Versuche mit AppacheHttpComponents, JAX-WS und ResteasyClient gingen schief mit dem selben Fehlercode.
Aufrufe auf andere Webservices die die Parameterübergabestruktur nicht aufweisen funktionieren jedoch. Getestet mit Webservices über Wetter- und Finanzdaten. Ich vermute das Problem also in der Parameterübergabe, welche nicht nach klassischem Muster erfolg:
(...SQL?param1=paramval1¶m2=paramval2 erfolgt sondern in der Art(...SQL?<SQL="...">CDATA-Sektion</SQL> )
Seltsamerweise funktioniert die obige URL (bei 1) aus Javascript mit verschieden Browsern mittels der Bibliothek/Klasse XMLHttpRequest problemlos. Hier kommen die korrekten Daten vom Webservice.
Leider ist die Bibliothek/Klasse XMLHttpRequest in der Javascript-Engine der Java 8 SE nicht vorhanden, weswegen mein angedachter Umweg die Abfrage in Javascript auszulagern und in Java als Funktion zu verwenden nicht möglich ist.
Hat jemand schon einmal mit Produkten der Firma gearbeitet und weiß eine Bibliothek die mit dieser URL-Konstruktion umgehen kann? Umkonfigurieren der URL scheint nicht möglich zu sein.
Javacode des Clienten Prototyp
Java:
public String read_ws_from_source(String p_ws_url){
String ticket_json = "";
try {
URL url = new URL(p_ws_url);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
String userpass = "someuser" + ":" + "hispassword";
String basicAuth = "Basic " + new String(Base64.getEncoder().encode(userpass.getBytes()));
conn.setRequestMethod("GET");
conn.setRequestProperty ("Authorization", basicAuth);
if (conn.getResponseCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : "
+ conn.getResponseCode());
}
BufferedReader br = new BufferedReader(new InputStreamReader(
(conn.getInputStream())));
String output;
while ((output = br.readLine()) != null) {
ticket_json=ticket_json+output;
}
conn.disconnect();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return ticket_json;
}
Vielen Dank im Voraus
Mit freundlichen Grüßen
larsymyl82