Author: markt Date: Sat Oct 24 20:52:46 2009 New Revision: 829448 URL: http://svn.apache.org/viewvc?rev=829448&view=rev Log: Merge code for a few more elements
Modified: tomcat/trunk/java/org/apache/catalina/deploy/ErrorPage.java tomcat/trunk/java/org/apache/catalina/startup/LocalStrings.properties tomcat/trunk/java/org/apache/catalina/startup/WebXml.java Modified: tomcat/trunk/java/org/apache/catalina/deploy/ErrorPage.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/deploy/ErrorPage.java?rev=829448&r1=829447&r2=829448&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/deploy/ErrorPage.java (original) +++ tomcat/trunk/java/org/apache/catalina/deploy/ErrorPage.java Sat Oct 24 20:52:46 2009 @@ -167,5 +167,12 @@ } + public String getName() { + if (exceptionType == null) { + return Integer.toString(errorCode); + } else { + return exceptionType; + } + } } Modified: tomcat/trunk/java/org/apache/catalina/startup/LocalStrings.properties URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/LocalStrings.properties?rev=829448&r1=829447&r2=829448&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/startup/LocalStrings.properties (original) +++ tomcat/trunk/java/org/apache/catalina/startup/LocalStrings.properties Sat Oct 24 20:52:46 2009 @@ -117,5 +117,8 @@ webXml.mergeConflictContextParam=Context parameter [{0}] was defined in multiple fragments with different values including fragment with name [{1}] located at [{2}] webXml.mergeConflictDisplayName=The display name was defined in multiple fragments with different values including fragment with name [{0}] located at [{1}] webXml.mergeConflictEjbLocalRef=The EjbLocalRef [{0}] was defined in multiple fragments including fragment with name [{1}] located at [{2}] +webXml.mergeConflictEjbRef=The EjbRef [{0}] was defined in multiple fragments including fragment with name [{1}] located at [{2}] +webXml.mergeConflictEnvEntry=The Environment entry [{0}] was defined in multiple fragments including fragment with name [{1}] located at [{2}] +webXml.mergeConflictErrorPage=The Error Page for [{0}] was defined in multiple fragments including fragment with name [{1}] located at [{2}] webXml.mergeConflictListener=Listener [{0}] was defined in multiple fragments including fragment with name [{1}] located at [{2}] webXml.multipleOther=Multiple others entries in ordering Modified: tomcat/trunk/java/org/apache/catalina/startup/WebXml.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/WebXml.java?rev=829448&r1=829447&r2=829448&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/startup/WebXml.java (original) +++ tomcat/trunk/java/org/apache/catalina/startup/WebXml.java Sat Oct 24 20:52:46 2009 @@ -249,11 +249,11 @@ } // error-page - private Set<ErrorPage> errorPages = new HashSet<ErrorPage>(); + private Map<String,ErrorPage> errorPages = new HashMap<String,ErrorPage>(); public void addErrorPage(ErrorPage errorPage) { - errorPages.add(errorPage); + errorPages.put(errorPage.getName(), errorPage); } - public Set<ErrorPage> getErrorPages() { return errorPages; } + public Map<String,ErrorPage> getErrorPages() { return errorPages; } // Digester will check there is only one jsp-config // jsp-config/taglib or taglib (2.3 and earlier) @@ -317,9 +317,11 @@ // ejb-ref // TODO: Should support multiple description elements with language - private Set<ContextEjb> ejbRefs = new HashSet<ContextEjb>(); - public void addEjbRef(ContextEjb ejbRef) { ejbRefs.add(ejbRef); } - public Set<ContextEjb> getEjbRefs() { return ejbRefs; } + private Map<String,ContextEjb> ejbRefs = new HashMap<String,ContextEjb>(); + public void addEjbRef(ContextEjb ejbRef) { + ejbRefs.put(ejbRef.getName(),ejbRef); + } + public Map<String,ContextEjb> getEjbRefs() { return ejbRefs; } // ejb-local-ref // TODO: Should support multiple description elements with language @@ -454,13 +456,13 @@ for (ContextLocalEjb ejbLocalRef : ejbLocalRefs.values()) { context.getNamingResources().addLocalEjb(ejbLocalRef); } - for (ContextEjb ejbRef : ejbRefs) { + for (ContextEjb ejbRef : ejbRefs.values()) { context.getNamingResources().addEjb(ejbRef); } for (ContextEnvironment environment : envEntries.values()) { context.getNamingResources().addEnvironment(environment); } - for (ErrorPage errorPage : errorPages) { + for (ErrorPage errorPage : errorPages.values()) { context.addErrorPage(errorPage); } for (FilterDef filter : filters.values()) { @@ -574,6 +576,8 @@ // Merge rules vary from element to element. See SRV.8.2.3 WebXml temp = new WebXml(); + Map<String,Boolean> mergeInjectionFlags = + new HashMap<String, Boolean>(); for (WebXml fragment : fragments) { for (String contextParam : fragment.getContextParams().keySet()) { @@ -625,9 +629,7 @@ } } } - - Map<String,Boolean> mergeInjectionFlags = - new HashMap<String, Boolean>(); + for (WebXml fragment : fragments) { for (ContextLocalEjb ejbLocalRef : fragment.getEjbLocalRefs().values()) { @@ -665,6 +667,109 @@ } } ejbLocalRefs.putAll(temp.getEjbLocalRefs()); + mergeInjectionFlags.clear(); + + for (WebXml fragment : fragments) { + for (ContextEjb ejbRef : fragment.getEjbRefs().values()) { + String name = ejbRef.getName(); + boolean mergeInjectionFlag = false; + if (ejbRefs.containsKey(name)) { + if (mergeInjectionFlags.containsKey(name)) { + mergeInjectionFlag = + mergeInjectionFlags.get(name).booleanValue(); + } else { + if (ejbRefs.get( + name).getInjectionTargets().size() == 0) { + mergeInjectionFlag = true; + } + mergeInjectionFlags.put(name, + Boolean.valueOf(mergeInjectionFlag)); + } + if (mergeInjectionFlag) { + ejbRefs.get(name).getInjectionTargets().addAll( + ejbRef.getInjectionTargets()); + } + } else { + // Not defined in main web.xml + if (temp.getEjbRefs().containsKey(name)) { + log.error(sm.getString( + "webXml.mergeConflictEjbRef", + name, + fragment.getName(), + fragment.getURL())); + return false; + } else { + temp.getEjbRefs().put(name, ejbRef); + } + } + } + } + ejbRefs.putAll(temp.getEjbRefs()); + mergeInjectionFlags.clear(); + + for (WebXml fragment : fragments) { + for (ContextEnvironment envEntry : + fragment.getEnvEntries().values()) { + String name = envEntry.getName(); + boolean mergeInjectionFlag = false; + if (envEntries.containsKey(name)) { + if (mergeInjectionFlags.containsKey(name)) { + mergeInjectionFlag = + mergeInjectionFlags.get(name).booleanValue(); + } else { + if (envEntries.get( + name).getInjectionTargets().size() == 0) { + mergeInjectionFlag = true; + } + mergeInjectionFlags.put(name, + Boolean.valueOf(mergeInjectionFlag)); + } + if (mergeInjectionFlag) { + envEntries.get(name).getInjectionTargets().addAll( + envEntry.getInjectionTargets()); + } + } else { + // Not defined in main web.xml + if (temp.getEnvEntries().containsKey(name)) { + log.error(sm.getString( + "webXml.mergeConflictEnvEntry", + name, + fragment.getName(), + fragment.getURL())); + return false; + } else { + temp.getEnvEntries().put(name, envEntry); + } + } + } + } + envEntries.putAll(temp.getEnvEntries()); + mergeInjectionFlags.clear(); + + for (WebXml fragment : fragments) { + for (String errorPageKey : fragment.getErrorPages().keySet()) { + if (!errorPages.containsKey(errorPageKey)) { + // Not defined in main web.xml + ErrorPage errorPage = + fragment.getErrorPages().get(errorPageKey); + if (temp.getErrorPages().containsKey(errorPageKey)) { + if (!errorPage.getLocation().equals( + temp.getErrorPages().get( + errorPageKey).getLocation())) { + log.error(sm.getString( + "webXml.mergeConflictErrorPage", + errorPageKey, + fragment.getName(), + fragment.getURL())); + return false; + } + } else { + temp.addErrorPage(errorPage); + } + } + } + } + errorPages.putAll(temp.getErrorPages()); // TODO SERVLET3 - Merge remaining elements --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org