public WorkItem getWorkItem(Environment env, InternalRuleBase ruleBase) {
this.env = env;
if ( workItem == null ) {
try {
ByteArrayInputStream bais = new ByteArrayInputStream( workItemByteArray );
MarshallerReaderContext context = new MarshallerReaderContext( bais,
ruleBase,
null,
null,
null,
env);
try {
workItem = ProtobufInputMarshaller.readWorkItem(context);
} catch (Exception e) {
// for backward compatibility to be able to restore 5.x data
try {
context.close();
bais = new ByteArrayInputStream( workItemByteArray );
context = new MarshallerReaderContext( bais,
ruleBase,
null,
null,
null,
env);
workItem = InputMarshaller.readWorkItem( context );
} catch (IOException e1) {
logger.error("Unable to read work item with InputMarshaller", e1);
// throw the original exception produced by failed protobuf op
throw new RuntimeException("Unable to read work item ", e);
}
}
context.close();
} catch ( IOException e ) {
e.printStackTrace();
throw new IllegalArgumentException( "IOException while loading work item: " + e.getMessage() );
}
}