protected ServiceInfo createServiceInfo(
     ApiService service, String langCode, String defaultLangCode) {
   String description = service.getDescription().getProperty(langCode);
   if (null == description || description.trim().length() == 0) {
     description = service.getDescription().getProperty(defaultLangCode);
   }
   ServiceInfo smallService =
       new ServiceInfo(service.getKey(), description, service.getTag(), service.isMyEntando());
   String[] freeParameters = service.getFreeParameters();
   if (null != freeParameters && freeParameters.length > 0) {
     for (int i = 0; i < freeParameters.length; i++) {
       String freeParameter = freeParameters[i];
       ApiMethodParameter apiParameter = service.getMaster().getParameter(freeParameter);
       if (null != apiParameter) {
         ServiceParameterInfo spi = new ServiceParameterInfo(apiParameter);
         ApsProperties serviceParameters = service.getParameters();
         String defaultValue =
             (null != serviceParameters) ? serviceParameters.getProperty(freeParameter) : null;
         if (null != defaultValue) {
           spi.setDefaultValue(defaultValue);
           spi.setRequired(false);
         }
         smallService.addParameter(spi);
       }
     }
   }
   return smallService;
 }
 @Override
 public String edit() {
   try {
     String check = this.checkService(this.getServiceKey());
     if (null != check) return check;
     ApiService apiService = this.getApiCatalogManager().getApiService(this.getServiceKey());
     this.setApiParameters(apiService.getMaster().getParameters());
     this.setApiMethodName(apiService.getMaster().getMethodName());
     this.setApiParameterValues(apiService.getParameters());
     this.setDescriptions(apiService.getDescription());
     this.setPublicService(apiService.isPublicService());
     this.setActiveService(apiService.isActive());
     this.setMyEntandoService(apiService.isMyEntando());
     this.setServiceKey(apiService.getKey());
     if (null != apiService.getFreeParameters()) {
       List<String> freeParams = Arrays.asList(apiService.getFreeParameters());
       this.setFreeParameters(freeParams);
     }
     this.setTag(apiService.getTag());
     this.setStrutsAction(ApsAdminSystemConstants.EDIT);
   } catch (Throwable t) {
     ApsSystemUtils.logThrowable(t, this, "edit");
     return FAILURE;
   }
   return SUCCESS;
 }
 public void updateService(ApiService service) {
   Connection conn = null;
   PreparedStatement stat = null;
   try {
     conn = this.getConnection();
     conn.setAutoCommit(false);
     stat = conn.prepareStatement(UPDATE_SERVICE);
     // SET resource = ? , description = ? , parameters = ? , tag = ? , freeparameters = ? ,
     // isactive = ? , ispublic = ? WHERE servicekey = ? ";
     stat.setString(1, service.getMaster().getResourceName());
     stat.setString(2, service.getDescription().toXml());
     stat.setString(3, service.getParameters().toXml());
     stat.setString(4, service.getTag());
     if (null == service.getFreeParameters() || service.getFreeParameters().length == 0) {
       stat.setNull(5, Types.VARCHAR);
     } else {
       ServiceExtraConfigDOM dom = new ServiceExtraConfigDOM();
       stat.setString(5, dom.extractXml(service.getFreeParameters()));
     }
     int isActive = (service.isActive()) ? 1 : 0;
     stat.setInt(6, isActive);
     int isPublic = (service.isPublicService()) ? 1 : 0;
     stat.setInt(7, isPublic);
     int isMyEntando = (service.isMyEntando()) ? 1 : 0;
     stat.setInt(8, isMyEntando);
     stat.setString(9, service.getKey());
     stat.executeUpdate();
     conn.commit();
   } catch (Throwable t) {
     this.executeRollback(conn);
     processDaoException(t, "Error while updating a service", "updateService");
   } finally {
     closeDaoResources(null, stat, conn);
   }
 }
 public Object getService(Properties properties) throws ApiException {
   Object response = null;
   String key = (String) properties.get("key");
   try {
     ApiService service = this.getApiCatalogManager().getApiService(key);
     if (null == service) {
       throw new ApiException(
           IApiErrorCodes.API_SERVICE_INVALID, "Service '" + key + "' does not exist");
     }
     if (!service.isActive()) {
       throw new ApiException(
           IApiErrorCodes.API_SERVICE_ACTIVE_FALSE, "Service '" + key + "' is not active");
     }
     this.checkServiceAuthorization(service, properties, true);
     Properties serviceParameters = new Properties();
     serviceParameters.putAll(service.getParameters());
     Iterator<Object> paramIter = properties.keySet().iterator();
     List<String> reservedParameters = Arrays.asList(SystemConstants.API_RESERVED_PARAMETERS);
     while (paramIter.hasNext()) {
       Object paramName = paramIter.next();
       String paramNameString = paramName.toString();
       if (reservedParameters.contains(paramNameString)
           || service.isFreeParameter(paramNameString)) {
         serviceParameters.put(paramNameString, properties.get(paramName));
       }
     }
     response = this.getResponseBuilder().createResponse(service.getMaster(), serviceParameters);
   } catch (ApiException e) {
     throw e;
   } catch (Throwable t) {
     ApsSystemUtils.logThrowable(
         t, this, "getService", "Error invocating service - key '" + key + "'");
     throw new ApiException(IApiErrorCodes.SERVER_ERROR, "Internal error");
   }
   return response;
 }