ServletRequestAdapterSync.kt
package com.hexagonkt.http.server.servlet
import com.hexagonkt.http.model.*
import com.hexagonkt.http.parseContentType
import jakarta.servlet.http.HttpServletRequest
import jakarta.servlet.http.Part
import java.security.cert.X509Certificate
import kotlin.UnsupportedOperationException
internal class ServletRequestAdapterSync(req: HttpServletRequest) : ServletRequestAdapter(req) {
private val parameters: Map<String, List<String>> by lazy {
req.parameterMap.map { it.key as String to it.value.toList() }.toMap()
}
override val parts: List<HttpPart> by lazy {
req.parts.map { servletPartAdapter(it) }
}
override val formParameters: FormParameters by lazy {
val fields = parameters
.filter { it.key !in queryParameters.httpFields.keys }
.map { (k, v) -> FormParameter(k, v) }
FormParameters(fields)
}
override fun with(
body: Any,
headers: Headers,
contentType: ContentType?,
method: HttpMethod,
protocol: HttpProtocol,
host: String,
port: Int,
path: String,
queryParameters: QueryParameters,
parts: List<HttpPart>,
formParameters: FormParameters,
cookies: List<Cookie>,
accept: List<ContentType>,
authorization: Authorization?,
certificateChain: List<X509Certificate>,
): HttpRequestPort =
throw UnsupportedOperationException()
override val body: Any by lazy {
req.inputStream.readAllBytes()
}
private fun servletPartAdapter(part: Part) : HttpPart {
val headerNames = part.headerNames.filterNotNull()
return HttpPart(
name = part.name,
body = part.inputStream.readAllBytes(),
headers = Headers(headerNames.map { Header(it, part.getHeaders(it).toList()) }),
contentType = part.contentType?.let { parseContentType(it) },
size = part.size,
submittedFileName = part.submittedFileName,
)
}
}