# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.


#
# CoyoteConnector
#
coyoteConnector.cannotRegisterProtocol=Cannot register MBean for the Protocol
coyoteConnector.protocolHandlerDestroyFailed=Protocol handler destroy failed
coyoteConnector.protocolHandlerInitializationFailed=Protocol handler initialization failed
coyoteConnector.protocolHandlerInstantiationFailed=Protocol handler instantiation failed
coyoteConnector.protocolHandlerStartFailed=Protocol handler start failed
coyoteConnector.protocolRegistrationFailed=Protocol JMX registration failed
coyoteConnector.protocolHandlerPauseFailed=Protocol handler pause failed
coyoteConnector.protocolHandlerResumeFailed=Protocol handler resume failed
coyoteConnector.MapperRegistration=register Mapper: {0}
coyoteConnector.protocolUnregistrationFailed=Protocol handler stop failed
coyoteConnector.parseBodyMethodNoTrace=TRACE method MUST NOT include an entity (see RFC 2616 Section 9.6)

#
# CoyoteAdapter
#
coyoteAdapter.service=An exception or error occurred in the container during the request processing
coyoteAdapter.read=The servlet did not read all available bytes during the processing of the read event
coyoteAdapter.parsePathParam=Unable to parse the path parameters using encoding [{0}]. The path parameters in the URL will be ignored.
coyoteAdapter.debug=The variable [{0}] has value [{1}]
coyoteAdapter.accesslogFail=Exception while attempting to add an entry to the access log

#
# CoyoteResponse
#
coyoteResponse.getOutputStream.ise=getWriter() has already been called for this response
coyoteResponse.getWriter.ise=getOutputStream() has already been called for this response
coyoteResponse.resetBuffer.ise=Cannot reset buffer after response has been committed
coyoteResponse.sendError.ise=Cannot call sendError() after the response has been committed
coyoteResponse.sendRedirect.ise=Cannot call sendRedirect() after the response has been committed
coyoteResponse.setBufferSize.ise=Cannot change buffer size after data has been written

#
# CoyoteRequest
#
coyoteRequest.getInputStream.ise=getReader() has already been called for this request
coyoteRequest.getReader.ise=getInputStream() has already been called for this request
coyoteRequest.sessionCreateCommitted=Cannot create a session after the response has been committed
coyoteRequest.setAttribute.namenull=Cannot call setAttribute with a null name
coyoteRequest.listenerStart=Exception sending context initialized event to listener instance of class {0}
coyoteRequest.listenerStop=Exception sending context destroyed event to listener instance of class {0}
coyoteRequest.attributeEvent=Exception thrown by attributes event listener
coyoteRequest.parseParameters=Exception thrown whilst processing POSTed parameters
coyoteRequest.postTooLarge=Parameters were not parsed because the size of the posted data was too big. Use the maxPostSize attribute of the connector to resolve this if the application should accept large POSTs.
coyoteRequest.chunkedPostTooLarge=Parameters were not parsed because the size of the posted data was too big. Because this request was a chunked request, it could not be processed further. Use the maxPostSize attribute of the connector to resolve this if the application should accept large POSTs.
coyoteRequest.alreadyAuthenticated=This is request has already been authenticated
coyoteRequest.noLoginConfig=No authentication mechanism has been configured for this context
coyoteRequest.authenticate.ise=Cannot call authenticate() after the reponse has been committed
coyoteRequest.uploadLocationInvalid=The temporary upload location [{0}] is not valid
coyoteRequest.sessionEndAccessFail=Exception triggered ending access to session while recycling request

requestFacade.nullRequest=The request object has been recycled and is no longer associated with this facade

responseFacade.nullResponse=The response object has been recycled and is no longer associated with this facade

cometEvent.nullRequest=The event object has been recycled and is no longer associated with a request

#
# MapperListener
#
mapperListener.unknownDefaultHost=Unknown default host [{0}] for connector [{1}]
mapperListener.registerHost=Register host [{0}] at domain [{1}] for connector [{2}]
mapperListener.unregisterHost=Unregister host [{0}] at domain [{1}] for connector [{2}]
mapperListener.registerContext=Register Context [{0}] for connector [{1}]
mapperListener.unregisterContext=Unregister Context [{0}] for connector [{1}]
mapperListener.registerWrapper=Register Wrapper [{0}] in Context [{1}] for connector [{2}]
mapperListener.unregisterWrapper=Unregister Wrapper [{0}] in Context [{1}] for connector [{2}]
mapperListener.addMBeanListenerFail=Failed to add MBean notification listener for connector [{0}] in domain [{1}]. Adding Hosts, Contexts and Wrappers will not be visible to the connector.
mapperListener.removeMBeanListenerFail=Failed to remove MBean notification listener for connector [{0}] in domain [{1}]. This may result in a memory leak.
mapperListener.lifecycleListenerFail=Failed to add Lifecycle listener to object [{0}]. Changes in the object state may not be correctly reflected in the mapper for connector [{1}] in domain [{2}].

inputBuffer.streamClosed=Stream closed
