From: fhanik Date: Sat, 20 Oct 2007 14:57:18 +0000 (+0000) Subject: Added NIO connector to server.xml parser warnings X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=b95c2abf8c246368255661487d6972600f30e5c1;p=tomcat7.0 Added NIO connector to server.xml parser warnings git-svn-id: https://svn.apache.org/repos/asf/tomcat/tc6.0.x/trunk@586738 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/STATUS b/STATUS index d61e9a237..edbc6442e 100644 --- a/STATUS +++ b/STATUS @@ -25,13 +25,6 @@ $Revision$ $Date$ PATCHES PROPOSED TO BACKPORT: [ New proposals should be added at the end of the list ] -* Make server.xml parsing warnings more generic, add support for the NIO connector -* Connector is no longer an exception case. Any new component can still use setProperty and return a boolean -* to accept or reject the property - http://people.apache.org/~fhanik/patches/digester-attribute-warnings.patch - +1: fhanik, yoavs,funkman - -1: - * IcedTea support. Upcoming Linux distributions will package a (working) open source JRE, available in /usr. As a result, it could now be possible to use a "/usr/bin/java" binary if one is present and expect results. [tested on Fedora 8 test 3] diff --git a/java/org/apache/catalina/connector/Connector.java b/java/org/apache/catalina/connector/Connector.java index 1a870755f..012601d9d 100644 --- a/java/org/apache/catalina/connector/Connector.java +++ b/java/org/apache/catalina/connector/Connector.java @@ -313,29 +313,14 @@ public class Connector /** * Set a configured property. */ - public void setProperty(String name, String value) { + public boolean setProperty(String name, String value) { String repl = name; if (replacements.get(name) != null) { repl = (String) replacements.get(name); } - if (!IntrospectionUtils.setProperty(protocolHandler, repl, value)) { - log.warn("Property " + name + " not found on the protocol handler."); - } - } - - - /** - * Set a configured property. - */ - public void setPropertyInternal(String name, String value) { - String repl = name; - if (replacements.get(name) != null) { - repl = (String) replacements.get(name); - } - IntrospectionUtils.setProperty(protocolHandler, repl, value); + return IntrospectionUtils.setProperty(protocolHandler, repl, value); } - /** * Return a configured property. */ @@ -402,7 +387,7 @@ public class Connector public void setAllowTrace(boolean allowTrace) { this.allowTrace = allowTrace; - setPropertyInternal("allowTrace", String.valueOf(allowTrace)); + setProperty("allowTrace", String.valueOf(allowTrace)); } @@ -480,7 +465,7 @@ public class Connector public void setEmptySessionPath(boolean emptySessionPath) { this.emptySessionPath = emptySessionPath; - setPropertyInternal("emptySessionPath", String.valueOf(emptySessionPath)); + setProperty("emptySessionPath", String.valueOf(emptySessionPath)); } @@ -503,7 +488,7 @@ public class Connector public void setEnableLookups(boolean enableLookups) { this.enableLookups = enableLookups; - setPropertyInternal("enableLookups", String.valueOf(enableLookups)); + setProperty("enableLookups", String.valueOf(enableLookups)); } @@ -573,7 +558,7 @@ public class Connector public void setMaxSavePostSize(int maxSavePostSize) { this.maxSavePostSize = maxSavePostSize; - setPropertyInternal("maxSavePostSize", String.valueOf(maxSavePostSize)); + setProperty("maxSavePostSize", String.valueOf(maxSavePostSize)); } @@ -595,7 +580,7 @@ public class Connector public void setPort(int port) { this.port = port; - setPropertyInternal("port", String.valueOf(port)); + setProperty("port", String.valueOf(port)); } @@ -759,7 +744,7 @@ public class Connector if(proxyName != null && proxyName.length() > 0) { this.proxyName = proxyName; - setPropertyInternal("proxyName", proxyName); + setProperty("proxyName", proxyName); } else { this.proxyName = null; removeProperty("proxyName"); @@ -786,7 +771,7 @@ public class Connector public void setProxyPort(int proxyPort) { this.proxyPort = proxyPort; - setPropertyInternal("proxyPort", String.valueOf(proxyPort)); + setProperty("proxyPort", String.valueOf(proxyPort)); } @@ -811,7 +796,7 @@ public class Connector public void setRedirectPort(int redirectPort) { this.redirectPort = redirectPort; - setPropertyInternal("redirectPort", String.valueOf(redirectPort)); + setProperty("redirectPort", String.valueOf(redirectPort)); } @@ -860,7 +845,7 @@ public class Connector public void setSecure(boolean secure) { this.secure = secure; - setPropertyInternal("secure", Boolean.toString(secure)); + setProperty("secure", Boolean.toString(secure)); } /** @@ -881,7 +866,7 @@ public class Connector public void setURIEncoding(String URIEncoding) { this.URIEncoding = URIEncoding; - setPropertyInternal("uRIEncoding", URIEncoding); + setProperty("uRIEncoding", URIEncoding); } @@ -904,7 +889,7 @@ public class Connector public void setUseBodyEncodingForURI(boolean useBodyEncodingForURI) { this.useBodyEncodingForURI = useBodyEncodingForURI; - setPropertyInternal + setProperty ("useBodyEncodingForURI", String.valueOf(useBodyEncodingForURI)); } @@ -932,7 +917,7 @@ public class Connector */ public void setXpoweredBy(boolean xpoweredBy) { this.xpoweredBy = xpoweredBy; - setPropertyInternal("xpoweredBy", String.valueOf(xpoweredBy)); + setProperty("xpoweredBy", String.valueOf(xpoweredBy)); } /** @@ -943,7 +928,7 @@ public class Connector */ public void setUseIPVHosts(boolean useIPVHosts) { this.useIPVHosts = useIPVHosts; - setPropertyInternal("useIPVHosts", String.valueOf(useIPVHosts)); + setProperty("useIPVHosts", String.valueOf(useIPVHosts)); } /** diff --git a/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java b/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java index 68aa27167..95a9f0c5d 100644 --- a/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java +++ b/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java @@ -406,8 +406,8 @@ public class SimpleTcpCluster * @param name * @param value */ - public void setProperty(String name, String value) { - setProperty(name, (Object) value); + public boolean setProperty(String name, String value) { + return setProperty(name, (Object) value); } /** @@ -416,29 +416,9 @@ public class SimpleTcpCluster * @param name * @param value */ - public void setProperty(String name, Object value) { - if (log.isTraceEnabled()) - log.trace(sm.getString("SimpleTcpCluster.setProperty", name, value,properties.get(name))); + public boolean setProperty(String name, Object value) { properties.put(name, value); - //using a dynamic way of setting properties is nice, but a security risk - //if exposed through JMX. This way you can sit and try to guess property names, - //we will only allow explicit property names - log.warn("Dynamic setProperty("+name+",value) has been disabled, please use explicit properties for the element you are trying to identify"); - if(started) { - // FIXME Hmm, is that correct when some DeltaManagers are direct configured inside Context? - // Why we not support it for other elements, like sender, receiver or membership? - // Must we restart element after change? -// if (name.startsWith("manager")) { -// String key = name.substring("manager".length() + 1); -// String pvalue = value.toString(); -// for (Iterator iter = managers.values().iterator(); iter.hasNext();) { -// Manager manager = (Manager) iter.next(); -// if(manager instanceof DeltaManager && ((ClusterManager) manager).isDefaultMode()) { -// IntrospectionUtils.setProperty(manager, key, pvalue ); -// } -// } -// } - } + return false; } /** diff --git a/java/org/apache/catalina/ha/util/IDynamicProperty.java b/java/org/apache/catalina/ha/util/IDynamicProperty.java index f88d66b48..b5873805a 100644 --- a/java/org/apache/catalina/ha/util/IDynamicProperty.java +++ b/java/org/apache/catalina/ha/util/IDynamicProperty.java @@ -32,7 +32,7 @@ public interface IDynamicProperty { * @param name * @param value */ - public void setProperty(String name, Object value) ; + public boolean setProperty(String name, Object value) ; /** * get current config diff --git a/java/org/apache/catalina/startup/Embedded.java b/java/org/apache/catalina/startup/Embedded.java index c1d8760d4..d3e21ff55 100644 --- a/java/org/apache/catalina/startup/Embedded.java +++ b/java/org/apache/catalina/startup/Embedded.java @@ -427,7 +427,7 @@ public class Embedded extends StandardService implements Lifecycle { connector = new Connector(); connector.setScheme("https"); connector.setSecure(true); - connector.setPropertyInternal("SSLEnabled","true"); + connector.setProperty("SSLEnabled","true"); // FIXME !!!! SET SSL PROPERTIES } else { connector = new Connector(protocol); diff --git a/java/org/apache/coyote/http11/Http11NioProtocol.java b/java/org/apache/coyote/http11/Http11NioProtocol.java index b56081f09..231d8ffa2 100644 --- a/java/org/apache/coyote/http11/Http11NioProtocol.java +++ b/java/org/apache/coyote/http11/Http11NioProtocol.java @@ -94,13 +94,13 @@ public class Http11NioProtocol implements ProtocolHandler, MBeanRegistration /** * Set a property. */ - public void setProperty(String name, String value) { + public boolean setProperty(String name, String value) { + setAttribute(name, value); if ( name!=null && (name.startsWith("socket.") ||name.startsWith("selectorPool.")) ){ - ep.setProperty(name, value); + return ep.setProperty(name, value); } else { - ep.setProperty(name,value); //make sure we at least try to set all properties + return ep.setProperty(name,value); //make sure we at least try to set all properties } - setAttribute(name, value); } /** diff --git a/java/org/apache/tomcat/util/IntrospectionUtils.java b/java/org/apache/tomcat/util/IntrospectionUtils.java index b1134befb..4338acfd8 100644 --- a/java/org/apache/tomcat/util/IntrospectionUtils.java +++ b/java/org/apache/tomcat/util/IntrospectionUtils.java @@ -266,7 +266,8 @@ public final class IntrospectionUtils { try { Method methods[] = findMethods(o.getClass()); - Method setPropertyMethod = null; + Method setPropertyMethodVoid = null; + Method setPropertyMethodBool = null; // First, the ideal case - a setFoo( String ) method for (int i = 0; i < methods.length; i++) { @@ -334,17 +335,37 @@ public final class IntrospectionUtils { // save "setProperty" for later if ("setProperty".equals(methods[i].getName())) { - setPropertyMethod = methods[i]; + if (methods[i].getReturnType()==Boolean.TYPE){ + setPropertyMethodBool = methods[i]; + }else { + setPropertyMethodVoid = methods[i]; + } + } } // Ok, no setXXX found, try a setProperty("name", "value") - if (setPropertyMethod != null) { + if (setPropertyMethodBool != null || setPropertyMethodVoid != null) { Object params[] = new Object[2]; params[0] = name; params[1] = value; - setPropertyMethod.invoke(o, params); - return true; + if (setPropertyMethodBool != null) { + try { + return (Boolean) setPropertyMethodBool.invoke(o, params); + }catch (IllegalArgumentException biae) { + //the boolean method had the wrong + //parameter types. lets try the other + if (setPropertyMethodVoid!=null) { + setPropertyMethodVoid.invoke(o, params); + return true; + }else { + throw biae; + } + } + } else { + setPropertyMethodVoid.invoke(o, params); + return true; + } } } catch (IllegalArgumentException ex2) { diff --git a/java/org/apache/tomcat/util/net/NioEndpoint.java b/java/org/apache/tomcat/util/net/NioEndpoint.java index 23550e581..426e23cc1 100644 --- a/java/org/apache/tomcat/util/net/NioEndpoint.java +++ b/java/org/apache/tomcat/util/net/NioEndpoint.java @@ -510,19 +510,20 @@ public class NioEndpoint { /** * Generic properties, introspected */ - public void setProperty(String name, String value) { + public boolean setProperty(String name, String value) { final String selectorPoolName = "selectorPool."; final String socketName = "socket."; try { if (name.startsWith(selectorPoolName)) { - IntrospectionUtils.setProperty(selectorPool, name.substring(selectorPoolName.length()), value); + return IntrospectionUtils.setProperty(selectorPool, name.substring(selectorPoolName.length()), value); } else if (name.startsWith(socketName)) { - IntrospectionUtils.setProperty(socketProperties, name.substring(socketName.length()), value); + return IntrospectionUtils.setProperty(socketProperties, name.substring(socketName.length()), value); } else { - IntrospectionUtils.setProperty(this,name,value); + return IntrospectionUtils.setProperty(this,name,value); } }catch ( Exception x ) { log.error("Unable to set attribute \""+name+"\" to \""+value+"\"",x); + return false; } } diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml index 43517ba8c..3909fbe09 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -45,6 +45,7 @@ + Add NIO connector to server.xml parsing warning, remove Connector as exception case 43653Fix SSL buffer mixup when response is unable to write more than socket buffer can handle 43643If connector doesn't support external executor, display warning 43641Property bind multicast address for cluster membership