Hi community. I am working on embedding a Tomcat server into my project. I have 2 domain name called localhost1 and localhost2. I created a Host instance with the localhost1 domain name.
Host host = new StandardHost(); host.setAppBase(CATALINA_HOSTS_HOME); host.setName("localhost1"); host.setDeployOnStartup(false); host.setBackgroundProcessorDelay(5); host.setAutoDeploy(false); host.setRealm(engine.getRealm()); engine.addChild(host); Then I added the localhost2 as a alias. host.addAlias("localhost2"); If I entered localhost1 at a browser then it works fine but if I entered localhost2 at the browser then I got an error: Nov 21, 2011 1:29:26 PM org.apache.coyote.http11.AbstractHttp11Processor process SEVERE: Error processing request java.lang.ClassCastException: org.apache.tomcat.util.http.mapper.Mapper$Host cannot be cast to org.apache.catalina.Host at org.apache.catalina.connector.Request.getHost(Request.java:631) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:105) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:619) I solved this problem by adding some codes into the trunk: Index: java/org/apache/tomcat/util/http/mapper/Mapper.java =================================================================== --- java/org/apache/tomcat/util/http/mapper/Mapper.java (revision 1204361) +++ java/org/apache/tomcat/util/http/mapper/Mapper.java (working copy) @@ -149,6 +149,10 @@ newHost.contextList = realHost.contextList; newHost.object = realHost; if (insertMap(hosts, newHosts, newHost)) { + Object object = newHost.object; + if (object instanceof Mapper.Host) { + newHost.object = ((Mapper.Host) object).object; + } hosts = newHosts; } } Do you think I am doing in the right track and this fixed should be committed into the trunk? If not, could you please give me a solution to solve the problem? Regards, Chatree Srichart