@Override public void scan(File file, String webappPath, boolean isWebapp) throws IOException { WebXml fragment = new WebXml(); fragment.setWebappJar(isWebapp); fragment.setDelegate(delegate); File fragmentFile = new File(file, FRAGMENT_LOCATION); try { if (fragmentFile.isFile()) { try (InputStream stream = new FileInputStream(fragmentFile)) { InputSource source = new InputSource(fragmentFile.toURI().toURL().toString()); source.setByteStream(stream); if (!webXmlParser.parseWebXml(source, fragment, true)) { ok = false; } } } else { // If there is no web.xml, normal folder no impact on // distributable fragment.setDistributable(true); } } finally { fragment.setURL(file.toURI().toURL()); if (fragment.getName() == null) { fragment.setName(fragment.getURL().toString()); } fragment.setJarName(file.getName()); fragments.put(fragment.getName(), fragment); } }
@Override public int getEffectiveMajorVersion() { return webXml.getMajorVersion(); }
/** * Returns the web site ID - as configured in the web application's <code>web.xml</code> file, * or <code>null</code> if no web site ID was found. * * @param webAppInfo * @throws IOException * @throws SAXException */ public static String getWebSiteId(WebappInfo webAppInfo) throws IOException, SAXException { Assert.notNull("webAppInfo", webAppInfo); WebXml webXml = getWebXml(webAppInfo); return webXml.getContextParams().get("webSiteId"); }
protected void processAnnotations(Set<WebXml> fragments, boolean handlesTypesOnly, Map<String,JavaClassCacheEntry> javaClassCache) { for(WebXml fragment : fragments) { // Only need to scan for @HandlesTypes matches if any of the // following are true: // - it has already been determined only @HandlesTypes is required // (e.g. main web.xml has metadata-complete="true" // - this fragment is for a container JAR (Servlet 3.1 section 8.1) // - this fragment has metadata-complete="true" boolean htOnly = handlesTypesOnly || !fragment.getWebappJar() || fragment.isMetadataComplete(); WebXml annotations = new WebXml(); // no impact on distributable annotations.setDistributable(true); URL url = fragment.getURL(); processAnnotationsUrl(url, annotations, htOnly, javaClassCache); Set<WebXml> set = new HashSet<>(); set.add(annotations); // Merge annotations into fragment - fragment takes priority fragment.merge(set); } }
WebXml temp = new WebXml(); if (!mergeMap(fragment.getContextParams(), contextParams, temp.getContextParams(), fragment, "Context Parameter")) { return false; contextParams.putAll(temp.getContextParams()); String value = fragment.getDisplayName(); if (value != null) { if (temp.getDisplayName() == null) { temp.setDisplayName(value); } else { log.error(sm.getString( "webXml.mergeConflictDisplayName", fragment.getName(), fragment.getURL())); return false; displayName = temp.getDisplayName(); if (fragment.getDenyUncoveredHttpMethods()) { denyUncoveredHttpMethods = true; break; if (fragment.getRequestCharacterEncoding() != null) { requestCharacterEncoding = fragment.getRequestCharacterEncoding(); if (fragment.getResponseCharacterEncoding() != null) {
context.setPublicId(webxml.getPublicId()); context.setEffectiveMajorVersion(webxml.getMajorVersion()); context.setEffectiveMinorVersion(webxml.getMinorVersion()); for (Entry<String, String> entry : webxml.getContextParams().entrySet()) { context.addParameter(entry.getKey(), entry.getValue()); webxml.getDenyUncoveredHttpMethods()); context.setDisplayName(webxml.getDisplayName()); context.setDistributable(webxml.isDistributable()); for (ContextLocalEjb ejbLocalRef : webxml.getEjbLocalRefs().values()) { context.getNamingResources().addLocalEjb(ejbLocalRef); for (ContextEjb ejbRef : webxml.getEjbRefs().values()) { context.getNamingResources().addEjb(ejbRef); for (ContextEnvironment environment : webxml.getEnvEntries().values()) { context.getNamingResources().addEnvironment(environment); for (ErrorPage errorPage : webxml.getErrorPages().values()) { context.addErrorPage(errorPage); for (FilterDef filter : webxml.getFilters().values()) { if (filter.getAsyncSupported() == null) { filter.setAsyncSupported("false"); for (FilterMap filterMap : webxml.getFilterMappings()) { context.addFilterMap(filterMap);
boolean absoluteOrdering = getAbsoluteOrdering() != null; boolean orderingPresent = false; Set<String> requestedOrder = getAbsoluteOrdering(); fragment.getBeforeOrdering().iterator(); while (before.hasNext()) { orderingPresent = true; before.remove(); } else { beforeFragment.addAfterOrdering(fragment.getName()); Iterator<String> after = fragment.getAfterOrdering().iterator(); while (after.hasNext()) { orderingPresent = true; after.remove(); } else { afterFragment.addBeforeOrdering(fragment.getName()); if (fragment.getBeforeOrdering().contains(ORDER_OTHERS)) { makeBeforeOthersExplicit(fragment.getAfterOrdering(), fragments); if (fragment.getAfterOrdering().contains(ORDER_OTHERS)) { makeAfterOthersExplicit(fragment.getBeforeOrdering(), fragments); if (fragment.getBeforeOrdering().contains(ORDER_OTHERS)) { beforeSet.add(fragment);
private WebXml buildMergedWebXml(boolean validate, boolean blockExternal) throws JasperException { WebXml webXml = new WebXml(); WebXmlParser webXmlParser = new WebXmlParser(validate, validate, blockExternal); if (webXml.isMetadataComplete()) { return webXml; Set<String> absoluteOrdering = webXml.getAbsoluteOrdering(); if (absoluteOrdering != null && absoluteOrdering.isEmpty()) { return webXml; Set<WebXml> orderedFragments = WebXml.orderWebFragments(webXml, fragments, this); webXml.merge(orderedFragments); return webXml;
@Override protected void processClasses(final WebXml webXml, final Set<WebXml> orderedFragments) { final ClassLoader loader = context.getLoader().getClassLoader(); orderedFragments.forEach(fragment -> { final WebXml annotations = new WebXml(); annotations.setDistributable(true); final URL url = fragment.getURL(); final Collection<Class<?>> classes = webClasses.get(url.toExternalForm()); if (classes == null) { return; } classes.forEach(clazz -> { try (final InputStream stream = loader.getResourceAsStream(clazz.getName().replace('.', '/') + ".class")) { processClass(annotations, new ClassParser(stream).parse()); } catch (final IOException e) { new LogFacade(MeecrowaveContextConfig.class.getName()).error("Can't parse " + clazz); } }); fragment.merge(singleton(annotations)); }); }
String javaeeNamespace = null; String webXmlSchemaLocation = null; String version = getVersion(); if ("2.4".equals(version)) { javaeeNamespace = XmlIdentifiers.JAVAEE_1_4_NS; sb.append("\"\n"); sb.append(" version=\""); sb.append(getVersion()); sb.append("\""); if ("2.4".equals(version)) { appendElement(sb, INDENT2, "display-name", displayName); if (isDistributable()) { sb.append(" <distributable/>\n\n"); appendElement(sb, INDENT4, "param-name", entry.getKey()); appendElement(sb, INDENT4, "param-value", entry.getValue()); sb.append(" </context-param>\n"); if (getMajorVersion() > 2 || getMinorVersion() > 2) { for (Map.Entry<String, FilterDef> entry : filters.entrySet()) { FilterDef filterDef = entry.getValue(); sb.append(" <filter>\n"); appendElement(sb, INDENT4, "description", filterDef.getDescription()); appendElement(sb, INDENT4, "display-name", filterDef.getDisplayName());
WebXml.orderWebFragments(webXml, fragments, sContext); if (!webXml.isMetadataComplete() || typeInitializerMap.size() > 0) { webXml.isMetadataComplete()); orderedFragments, webXml.isMetadataComplete()); if (!webXml.isMetadataComplete()) { ok = webXml.merge(orderedFragments); webXml.merge(defaults); webXml.merge(defaults); convertJsps(webXml); configureContext(webXml); String mergedWebXml = webXml.toXml(); sContext.setAttribute( org.apache.tomcat.util.scan.Constants.MERGED_WEB_XML,
ServletDef servletDef = fragment.getServlets().get(servletName); fragment.addServlet(servletDef); if (!fragment.getServletMappings().containsValue(servletName)) { for (String urlPattern : urlPatterns) { fragment.addServletMapping(urlPattern, servletName);
FilterDef filterDef = fragment.getFilters().get(filterName); FilterMap filterMap = new FilterMap(); fragment.addFilter(filterDef); if (urlPatternsSet || servletNamesSet) { filterMap.setFilterName(filterName); fragment.addFilterMapping(filterMap); Set<FilterMap> fmap = fragment.getFilterMappings(); FilterMap descMap = null; for (FilterMap map : fmap) {
private List<URL> scanForResourceJARs(Set<WebXml> orderedFragments, Collection<WebXml> fragments) throws JasperException { List<URL> resourceJars = new ArrayList<>(); // Build list of potential resource JARs. Use same ordering as ContextConfig Set<WebXml> resourceFragments = new LinkedHashSet<>(); for (WebXml fragment : orderedFragments) { resourceFragments.add(fragment); } for (WebXml fragment : fragments) { if (!resourceFragments.contains(fragment)) { resourceFragments.add(fragment); } } for (WebXml resourceFragment : resourceFragments) { try (Jar jar = JarFactory.newInstance(resourceFragment.getURL())) { if (jar.exists("META-INF/resources/")) { // This is a resource JAR resourceJars.add(resourceFragment.getURL()); } } catch (IOException ioe) { throw new JasperException(ioe); } } return resourceJars; }
String servletMapping = null; WebXml webXml = getWebXml(webAppInfo); for (ServletDef servletDef : webXml.getServlets().values()) { if ("org.apache.ofbiz.webapp.control.ControlServlet".equals(servletDef.getServletClass()) || "org.apache.ofbiz.product.category.SeoControlServlet".equals(servletDef.getServletClass())) { String servletName = servletDef.getServletName(); for (Entry<String, String> entry : webXml.getServletMappings().entrySet()) { if (servletName.equals(entry.getValue())) { servletMapping = entry.getKey();
protected WebXml createWebXml() { return new WebXml(); }
@Override public void begin(String namespace, String name, Attributes attributes) throws Exception { WebXml webxml = (WebXml) digester.peek(digester.getCount() - 1); String value = attributes.getValue("metadata-complete"); if ("true".equals(value)) { webxml.setMetadataComplete(true); } else if ("false".equals(value)) { webxml.setMetadataComplete(false); } if (digester.getLogger().isDebugEnabled()) { digester.getLogger().debug (webxml.getClass().getName() + ".setMetadataComplete( " + webxml.isMetadataComplete() + ")"); } }
private void convertJsps(WebXml webXml) { Map<String,String> jspInitParams; ServletDef jspServlet = webXml.getServlets().get("jsp"); if (jspServlet == null) { jspInitParams = new HashMap<>(); Wrapper w = (Wrapper) context.findChild("jsp"); if (w != null) { String[] params = w.findInitParameters(); for (String param : params) { jspInitParams.put(param, w.findInitParameter(param)); } } } else { jspInitParams = jspServlet.getParameterMap(); } for (ServletDef servletDef: webXml.getServlets().values()) { if (servletDef.getJspFile() != null) { convertJsp(servletDef, jspInitParams); } } }
Set<String> absoluteOrder = application.getAbsoluteOrdering(); if (absoluteOrder != null && absoluteOrder.isEmpty() && !context.getXmlValidation()) {