@Override
public String onMessage(String message) {
CommandScript script = deserialize(message, CommandScript.class);
String capability = TARGET_CAPABILITY;
boolean hasBPMCommand = script.getCommands().stream().anyMatch(cmd -> cmd instanceof DescriptorCommand);
if (hasBPMCommand) {
capability = KieServerConstants.CAPABILITY_BPM;
}
KieContainerCommandService<?> executor = null;
for (KieServerExtension extension : context.getServerExtensions()) {
KieContainerCommandService<?> tmp = extension.getAppComponents(KieContainerCommandService.class);
if (tmp != null && extension.getImplementedCapability().equalsIgnoreCase(capability)) {
executor = tmp;
logger.debug("Extension {} returned command executor {} with capability {}", extension, executor, extension.getImplementedCapability());
break;
}
}
if (executor == null) {
throw new IllegalStateException("No executor found for script execution");
}
ServiceResponsesList response = executor.executeScript(script, MarshallingFormat.JSON, null);
String reply = serialize(response);
return reply;
}