From a0c86233fc3580d583449a814b49bda50a9fd2d1 Mon Sep 17 00:00:00 2001 From: sauljabin Date: Wed, 11 Nov 2015 10:52:54 -0500 Subject: [PATCH] IDEMPIERE-2928 Save Web Services User Agent in Session Description / IDEMPIERE-2929 Web Services Response BinaryData --- .../adinterface/CompiereService.java | 3 +++ .../adinterface/ModelADServiceImpl.java | 19 +++++++++++++------ .../webservices/AbstractService.java | 8 +++++++- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/CompiereService.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/CompiereService.java index 75f04413ea..148efc89e4 100644 --- a/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/CompiereService.java +++ b/org.idempiere.webservices/WEB-INF/src/org/idempiere/adinterface/CompiereService.java @@ -279,6 +279,9 @@ public class CompiereService { session = MSession.get (getCtx(), true); } session.setWebSession("WebService"); + + session.setDescription(session.getDescription() + "\nUser Agent: " + getCtx().getProperty("#UserAgent")); + session.saveEx(); m_loggedin = true; 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 60af5d5e5f..c2925f582a 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 @@ -41,6 +41,7 @@ import javax.jws.WebService; import javax.xml.namespace.QName; import javax.xml.ws.WebServiceContext; +import org.apache.commons.codec.binary.Base64; import org.apache.cxf.jaxrs.ext.MessageContext; import org.apache.xmlbeans.StringEnumAbstractBase.Table; import org.compiere.model.I_AD_Column; @@ -1391,10 +1392,13 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic String columnName = poinfo.getColumnName(i); if (m_webservicetype.isOutputColumnNameAllowed(columnName)) { DataField dfid = dr.addNewField(); - dfid.setColumn(columnName); - if (po.get_Value(i) != null) - dfid.setVal(po.get_Value(i).toString()); - else + dfid.setColumn(columnName); + if (po.get_Value(i) != null){ + if(po.get_Value(i) instanceof byte[]){ + dfid.setVal(new String(Base64.encodeBase64((byte[]) po.get_Value(i)))); + }else + dfid.setVal(po.get_Value(i).toString()); + }else dfid.setVal(null); } } @@ -1538,10 +1542,13 @@ public class ModelADServiceImpl extends AbstractService implements ModelADServic DataRow dr = ds.addNewDataRow(); for (int i = 0; i < poinfo.getColumnCount(); i++) { String columnName = poinfo.getColumnName(i); - if (m_webservicetype.isOutputColumnNameAllowed(columnName)) { + if (m_webservicetype.isOutputColumnNameAllowed(columnName)) { DataField dfid = dr.addNewField(); dfid.setColumn(columnName); - dfid.setVal(rsquery.getString(columnName)); + if(rsquery.getObject(columnName) instanceof byte[]) + dfid.setVal(new String(Base64.encodeBase64(rsquery.getBytes(columnName)))); + else + dfid.setVal(rsquery.getString(columnName)); } } } diff --git a/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/AbstractService.java b/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/AbstractService.java index a7d1d347b8..413c04dcce 100644 --- a/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/AbstractService.java +++ b/org.idempiere.webservices/WEB-INF/src/org/idempiere/webservices/AbstractService.java @@ -119,6 +119,8 @@ public class AbstractService { Env.setContext(m_cs.getCtx(), "#AD_User_ID", user.getAD_User_ID() ); Env.setContext(m_cs.getCtx(), "#AD_User_Name", user.getName() ); Env.setContext(m_cs.getCtx(), "#SalesRep_ID", user.getAD_User_ID() ); + String userAgent = getHttpServletRequest().getHeader("User-Agent"); + Env.setContext(m_cs.getCtx(), "#UserAgent", userAgent == null ? "Unknown" : userAgent); } KeyNamePair[] roles = login.getRoles(loginRequest.getUser(), selectedClient); @@ -331,7 +333,11 @@ public class AbstractService { OutputField outField= outputFields.addNewOutputField(); outField.setColumn(colName); if(po.get_Value(indCol)!=null){ - outField.setValue(po.get_Value(indCol).toString()); + if(po.get_Value(indCol) instanceof byte[]) + outField.setValue(new String(Base64.encodeBase64((byte[]) po.get_Value(indCol)))); + else + outField.setValue(po.get_Value(indCol).toString()); + Lookup lookup = poInfo.getColumnLookup(indCol); if(lookup != null){ //Setting text