private static InternalKieModule fetchKModule(URL url, String fixedURL) {
    if (url.getPath().endsWith("-spring.xml")) {
      // the entire kmodule creation is happening in the kie-spring module,
      // hence we force a null return
      fetchKModuleFromSpring(url, fixedURL);
      return null;
    }
    KieModuleModel kieProject = KieModuleModelImpl.fromXML(url);

    setDefaultsforEmptyKieModule(kieProject);

    String pomProperties = getPomProperties(fixedURL);
    if (pomProperties == null) {
      log.warn(
          "Cannot find maven pom properties for this project. Using the container's default ReleaseId");
    }

    ReleaseId releaseId =
        pomProperties != null
            ? ReleaseIdImpl.fromPropertiesString(pomProperties)
            : KieServices.Factory.get().getRepository().getDefaultReleaseId();

    String rootPath = fixedURL;
    if (rootPath.lastIndexOf(':') > 0) {
      rootPath = IoUtils.asSystemSpecificPath(rootPath, rootPath.lastIndexOf(':'));
    }

    return createInternalKieModule(url, fixedURL, kieProject, releaseId, rootPath);
  }
  public static String getPomProperties(String urlPathToAdd) {
    String pomProperties = null;
    String rootPath = urlPathToAdd;
    if (rootPath.lastIndexOf(':') > 0) {
      rootPath = IoUtils.asSystemSpecificPath(rootPath, rootPath.lastIndexOf(':'));
    }

    if (urlPathToAdd.endsWith(".jar") || urlPathToAdd.endsWith("/content")) {
      pomProperties = getPomPropertiesFromZipFile(rootPath);
    } else {
      pomProperties = getPomPropertiesFromFileSystem(rootPath);
      if (pomProperties == null) {
        int webInf = rootPath.indexOf("/WEB-INF");
        if (webInf > 0) {
          rootPath = rootPath.substring(0, webInf);
          pomProperties = getPomPropertiesFromFileSystem(rootPath);
        }
      }
      if (pomProperties == null) {
        pomProperties = generatePomPropertiesFromPom(rootPath);
      }
    }

    if (pomProperties == null) {
      log.warn("Unable to load pom.properties from" + urlPathToAdd);
    }
    return pomProperties;
  }
  @Test
  public void testTimerStartDateISO() throws Exception {

    byte[] content =
        IoUtils.readBytesFromInputStream(
            this.getClass().getResourceAsStream("/BPMN2-TimerStartDate.bpmn2"));
    String processContent = new String(content, "UTF-8");

    DateTime now = new DateTime(System.currentTimeMillis());
    now = now.plus(2000);

    processContent = processContent.replaceFirst("#\\{date\\}", now.toString());
    Resource resource = ResourceFactory.newReaderResource(new StringReader(processContent));
    resource.setSourcePath("/BPMN2-TimerStartDate.bpmn2");
    resource.setTargetPath("/BPMN2-TimerStartDate.bpmn2");
    KieBase kbase = createKnowledgeBaseFromResources(resource);

    ksession = createKnowledgeSession(kbase);
    final List<Long> list = new ArrayList<Long>();
    ksession.addEventListener(
        new DefaultProcessEventListener() {
          public void afterProcessStarted(ProcessStartedEvent event) {
            list.add(event.getProcessInstance().getId());
          }
        });
    assertEquals(0, list.size());
    Thread.sleep(3000);
    assertEquals(1, list.size());
  }
  public static String fixURLFromKProjectPath(URL url) {
    String urlPath = url.toExternalForm();

    // determine resource type (eg: jar, file, bundle)
    String urlType = "file";
    int colonIndex = urlPath.indexOf(":");
    if (colonIndex != -1) {
      urlType = urlPath.substring(0, colonIndex);
    }

    urlPath = url.getPath();

    if ("jar".equals(urlType)) {
      // switch to using getPath() instead of toExternalForm()
      if (urlPath.indexOf('!') > 0) {
        urlPath = urlPath.substring(0, urlPath.indexOf('!'));
      }
    } else if ("vfs".equals(urlType)) {
      urlPath = getPathForVFS(url);
    } else {
      if (url.toString().contains("-spring.xml")) {
        urlPath =
            urlPath.substring(
                0, urlPath.length() - ("/" + KieModuleModelImpl.KMODULE_SPRING_JAR_PATH).length());
      } else {
        urlPath =
            urlPath.substring(
                0, urlPath.length() - ("/" + KieModuleModelImpl.KMODULE_JAR_PATH).length());
      }
    }

    if (urlPath.endsWith(".jar!")) {
      urlPath = urlPath.substring(0, urlPath.length() - 1);
    }

    // remove any remaining protocols, normally only if it was a jar
    int firstSlash = urlPath.indexOf('/');
    colonIndex = firstSlash > 0 ? urlPath.lastIndexOf(":", firstSlash) : urlPath.lastIndexOf(":");
    if (colonIndex >= 0) {
      urlPath = IoUtils.asSystemSpecificPath(urlPath, colonIndex);
    }

    try {
      urlPath = URLDecoder.decode(urlPath, "UTF-8");
    } catch (UnsupportedEncodingException e) {
      throw new IllegalArgumentException("Error decoding URL (" + url + ") using UTF-8", e);
    }

    log.debug("KieModule URL type=" + urlType + " url=" + urlPath);

    return urlPath;
  }