From b719e45c8fcd9fbe8bcac1f55461b8c7e286a07b Mon Sep 17 00:00:00 2001 From: Carlos Ruiz Date: Fri, 17 Apr 2020 19:48:38 +0200 Subject: [PATCH] IDEMPIERE-2767 Web Services not working with UUID / peer review --- .../adinterface/ModelADServiceImpl.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/ModelADServiceImpl.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/ModelADServiceImpl.java index bc79ffdc9f..c541dbb392 100644 --- a/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/ModelADServiceImpl.java +++ b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/ModelADServiceImpl.java @@ -414,8 +414,11 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic try { modelRunProcess.setADProcessID(validateParameter("AD_Process_ID", modelRunProcess.getADProcessID())); } catch(XmlValueOutOfRangeException e) { // Catch the exception when the Process ID is not an Integer - log.warning(e.getMessage() + " -- " + " trying to parse string as the UUID"); - modelRunProcess.setADProcessID(validateParameter("AD_Process_ID", 0, getUUIDValue(modelRunProcess.xgetADProcessID()))); + String processUU = getUUIDValue(modelRunProcess.xgetADProcessID()); + if (processUU == null) { + throw e; + } + modelRunProcess.setADProcessID(validateParameter("AD_Process_ID", 0, processUU)); } modelRunProcess.setADRecordID(validateParameter("AD_Record_ID", modelRunProcess.getADRecordID())); modelRunProcess.setDocAction(validateParameter("DocAction", modelRunProcess.getDocAction())); @@ -440,15 +443,13 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic private String getUUIDValue(XmlInt xmlInt) { if (xmlInt != null) { - //Get the content between and - String content = xmlInt.toString().substring( - "".length(), xmlInt.toString().indexOf("")); - - if (content != null && !content.isEmpty()) + // String xml <...> blocks + String content = xmlInt.toString().replaceAll("<[^>]*>", ""); + if (! Util.isEmpty(content, true) && ADLookup.isUUID(content)) return content; } - //No string value + //No UUID value return null; }