운영시 서버 에러 (NullPointerException at org.apache.tomcat.util.buf.CharChunk.append) 코-오드

서버를 설치하고 톰캣을 설치하고 프로젝트를 구동하니 작동이 잘된다.
아무 이상 없는 줄 알고 지나갔다가 몇 일뒤에 로그를 확인 하니 온통 에러로그다. 
유형을 보니 2가지 이다. 서비스 운영은 정상적으로 되고 있지만 찜찜한 마음에 수정법을 찾아 보았다.

1. defaultHost 변경에 따른 로그.

DD-Dec-YYYY hh:mm:ss.sss SEVERE [http-nio-80-exec-8] org.apache.coyote.http11.Http11Processor.service Error processing request
 java.lang.NullPointerException
at org.apache.tomcat.util.buf.CharChunk.append(CharChunk.java:331)
at org.apache.catalina.mapper.Mapper.map(Mapper.java:694)
at org.apache.catalina.connector.CoyoteAdapter.postParseRequest(CoyoteAdapter.java:679)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:336)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)

찾아보니 기능상의 에러는 아니고 톰캣 기본 설정을 변경해서 사용한 것이 원인이었다.

톰캣 소스 중 org.apache.catalina.mapper.Mapper.map에서 아래와 같이 디폴트 호스트 네임을 호출하는 부분이 있다.

if (host.isNull()) {
      host.getCharChunk().append(this.defaultHostName);
    }
defaultHostName은 아래의 부분에서 설정되는데
<Engine name="Catalina" defaultHost="localhost">

<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"></Host>이 부분을 수정하면서 
Host name을 변경한것이 원인으로 파악된다.

에러로그가 뜨지 않게 하기 위해서
- <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"></Host>을 추가해주거나
- <Engine name="Catalina" defaultHost="localhost">의 defaultHost를 사용하고 있는 Host name 중 하나로 변경해 주었다.






adsense