Advanced Customization > Services and Infrastructure Customization > Customizing Virus Scanner for Content Upload > Implementation Guidelines
  
Implementation Guidelines
Refer to the following implementation of interface to customize the virus scanner hook in your File Vault system:
* 
The following implementation is provided only for reference to assist in creating the implementation for interface. All customization should follow recommended coding best practices and other customer specific considerations. 
package wt.content;
import java.io.*;
import java.util.*;
import xyz.capybara.clamav.ClamavClient;
import xyz.capybara.clamav.commands.scan.result.ScanResult;
/**
* Sample implementation of IContentProcessor interface for Virus Scanning of content
*/
public class ClamAVContentProcessor implements IContentProcessor {
public ProcessResult processPreStore(InputStream inputStream, Map <String, Object> data) throws WTException {
byte[] buffer = new byte[1024];
int len;
ProcessResult processResult = new ProcessResult();
try {
//read content and store in byte array
long length = 0;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
while ((len = inputStream.read(buffer))> -1)
{
baos.write(buffer, 0, len);
length += len;
}
baos.flush();
//WARNING: After reading data from inputStream, do not close inputStream.
//construct InputStream to pass it to Anti-Virus Software
byte[] bytes = baos.toByteArray();
InputStream is1 = new ByteArrayInputStream(bytes);
//create client to connect securely to Anti-Virus Software of your choice
ClamavClient clamavClient = new ClamavClient("127.0.0.1");
//scan the content for virus
String operation = (String)data.get(IContentProcessor.OPERATION_KEY);
String vaultFileName = (String)data.get(IContentProcessor.FILE_NAME_KEY);
long fileSize = (Long)data.get(IContentProcessor.FILE_SIZE_KEY);
System.out.println("scanning content for operation = "+operation+", to be stored in vault as "+vaultFileName);
ScanResult scanResult = clamavClient.scan(is1);
System.out.println("scanResult = "+scanResult);
//if virus found, reject the content
if(scanResult instanceof ScanResult.VirusFound) {
throw new WTException("Virus found during scan = "+scanResult);
}
//if virus not found, return the content and content length to Content Service
InputStream is2 = new ByteArrayInputStream(bytes);
processResult.setInputStream(is2);
processResult.setLength(length);
}catch (IOException e) {
throw new WTException(e);
}
return processResult;
}
}