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