You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by Chatree Srichart <ch...@gmail.com> on 2011/11/21 07:52:28 UTC

Multiple Aliases Problem

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

Re: Multiple Aliases Problem

Posted by Chatree Srichart <ch...@gmail.com>.
I have already got it work.
Thank you.

Regards,
Chatree Srichart

On Tue, Nov 22, 2011 at 2:17 PM, Konstantin Kolinko
<kn...@gmail.com>wrote:

> Confirming that it is a bug. I filed an issue:
> https://issues.apache.org/bugzilla/show_bug.cgi?id=52225
>
>
> You would avoid this bug if you reorder your lines:
> call "host.addAlias()" before you call "engine.addChild()".
>
> That is what Digester does when parsing server.xml:
> "engine.addChild()" method is called on the closing "</Host>" tag.
>
> Best regards,
> Konstantin Kolinko
>
> 2011/11/22 Chatree Srichart <ch...@gmail.com>:
> > Any comment?
> >
> > On Mon, Nov 21, 2011 at 1:52 PM, Chatree Srichart <
> > chatree.srichart@gmail.com> wrote:
> >
> >> 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
> >>
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
> For additional commands, e-mail: dev-help@tomcat.apache.org
>
>

Re: Multiple Aliases Problem

Posted by Konstantin Kolinko <kn...@gmail.com>.
Confirming that it is a bug. I filed an issue:
https://issues.apache.org/bugzilla/show_bug.cgi?id=52225


You would avoid this bug if you reorder your lines:
call "host.addAlias()" before you call "engine.addChild()".

That is what Digester does when parsing server.xml:
"engine.addChild()" method is called on the closing "</Host>" tag.

Best regards,
Konstantin Kolinko

2011/11/22 Chatree Srichart <ch...@gmail.com>:
> Any comment?
>
> On Mon, Nov 21, 2011 at 1:52 PM, Chatree Srichart <
> chatree.srichart@gmail.com> wrote:
>
>> 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
>>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org


Re: Multiple Aliases Problem

Posted by Chatree Srichart <ch...@gmail.com>.
Any comment?

On Mon, Nov 21, 2011 at 1:52 PM, Chatree Srichart <
chatree.srichart@gmail.com> wrote:

> 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
>