org.xlightweb
Interface IBodyDataHandler
- All Known Implementing Classes:
- BodyForwarder
public interface IBodyDataHandler
The body handler. Example
class BodyToFileStreamer implements IBodyDataHandler {
private IHttpExchange exchange = null;
private String path = null;
private RandomAccessFile raf = null;
private FileChannel fc = null;
private String id = null;
BodyToFileStreamer(IHttpExchange exchange, File file, String id) throws IOException {
this.exchange = exchange;
this.id = id;
raf = new RandomAccessFile(file, "rw");
fc = raf.getChannel();
}
public boolean onData(NonBlockingBodyDataSource bodyDataSource) throws BufferUnderflowException {
try {
int available = bodyDataSource.available();
// data to transfer?
if (available > 0) {
bodyDataSource.transferTo(fc, available);
// end of stream reached?
} else if (available == -1) {
fc.close();
raf.close();
exchange.send(new HttpResponse(201, "text/plain", id));
}
} catch (IOException ioe) {
try {
fc.close();
raf.close();
new File(path).delete();
} catch (Exception ignore) { }
exchange.sendError(500);
}
return true;
}
}
class MyRequestHandler implements IHttpRequestHandler {
// will be called if request header is received (Default-InvokeOn is HEADER_RECEIVED)
public void onRequest(IHttpExchange exchange) throws IOException {
// ..
BodyToFileStreamer streamer = new BodyToFileStreamer(exchange, file, uid);
exchange.getRequest().getNonBlockingBody().setDataHandler(streamer);
}
}
DEFAULT_EXECUTION_MODE
static final int DEFAULT_EXECUTION_MODE
- See Also:
- Constant Field Values
onData
boolean onData(NonBlockingBodyDataSource bodyDataSource)
throws BufferUnderflowException
- call back. This method will be called each time body data has been received
for the given body
- Parameters:
bodyDataSource
- the body
- Returns:
- true, if the event has been handled
- Throws:
BufferUnderflowException
- if more incoming data is required to process (e.g. delimiter hasn't yet received -> readByDelimiter methods or size of the available, received data is smaller than the required size -> readByLength). The BufferUnderflowException will be swallowed by the framework