Ich habe einen langen laufenden Prozess in Camel, der durch eine HTTP-Anfrage ausgelöst wird. Ich würde gerne Status-Updates in den Outputstream schreiben, aber ich bekomme die Antwort auf der Client-Seite nicht.Camel Jetty Component in Outputstream schreiben
Ich habe versucht, mit der folgenden:
Kamel-Route:
<from uri="jetty:http://localhost:12345/myservice"/>
<process ref="test" />
Der Prozessor-Test:
public void process(Exchange arg0) throws Exception {
System.out.println("TestProcessor");
HttpServletResponse response = (HttpServletResponse) arg0.getIn().getHeader(Exchange.HTTP_SERVLET_RESPONSE);
OutputStreamWriter wr = new OutputStreamWriter(response.getOutputStream());
BufferedWriter w = new BufferedWriter(wr);
for(int x = 0; x < 10; x++){
w.write("Zeile: " + x + "\n");
w.newLine();
}
// arg0.getIn().setBody("This might also be a response");
}
und Berufung Code:
final HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setInstanceFollowRedirects(false);
conn.setRequestMethod("GET");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
conn.setRequestProperty("charset", "utf-8");
conn.setRequestProperty("Content-Length", Integer.toString(postDataLength));
conn.setUseCaches(false);
new Thread(new Runnable(){
@Override
public void run() {
try {
if(!urlParameters.isEmpty()){
try(DataOutputStream wr = new DataOutputStream(conn.getOutputStream())) {
wr.write(postData);
wr.close();
}
}
InputStream s = conn.getInputStream();
System.out.println("got InputStream");
InputStreamReader is = new InputStreamReader(s);
BufferedReader br = new BufferedReader(is);
String line;
while((line = br.readLine()) != null){
System.out.println("ReadLine: " + line);
}
conn.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
Aber ich bekomme nur eine Antwort, wenn ich setze den Körper im Prozessor (die kommentierte Zeile). Gibt es eine Möglichkeit, die Verbindung in Kamel zu halten und weiter zu schreiben?