1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package org.apache.hc.core5.http.impl.nio;
29
30 import java.io.IOException;
31
32 import org.apache.hc.core5.http.HttpException;
33 import org.apache.hc.core5.http.HttpRequest;
34 import org.apache.hc.core5.http.HttpRequestFactory;
35 import org.apache.hc.core5.http.MessageConstraintException;
36 import org.apache.hc.core5.http.RequestHeaderFieldsTooLargeException;
37 import org.apache.hc.core5.http.config.Http1Config;
38 import org.apache.hc.core5.http.message.LineParser;
39 import org.apache.hc.core5.http.message.RequestLine;
40 import org.apache.hc.core5.http.nio.SessionInputBuffer;
41 import org.apache.hc.core5.util.Args;
42 import org.apache.hc.core5.util.CharArrayBuffer;
43
44
45
46
47
48
49 public class DefaultHttpRequestParser<T extends HttpRequest> extends AbstractMessageParser<T> {
50
51 private final HttpRequestFactory<T> requestFactory;
52
53
54
55
56
57
58
59
60
61
62
63
64 public DefaultHttpRequestParser(
65 final HttpRequestFactory<T> requestFactory,
66 final LineParser parser,
67 final Http1Config http1Config) {
68 super(parser, http1Config);
69 this.requestFactory = Args.notNull(requestFactory, "Request factory");
70 }
71
72
73
74
75 public DefaultHttpRequestParser(final HttpRequestFactory<T> requestFactory, final Http1Config http1Config) {
76 this(requestFactory, null, http1Config);
77 }
78
79
80
81
82 public DefaultHttpRequestParser(final HttpRequestFactory<T> requestFactory) {
83 this(requestFactory, null);
84 }
85
86 @Override
87 public T parse(final SessionInputBuffer sessionBuffer, final boolean endOfStream) throws IOException, HttpException {
88 try {
89 return super.parse(sessionBuffer, endOfStream);
90 } catch (final MessageConstraintException ex) {
91 throw new RequestHeaderFieldsTooLargeException(ex.getMessage(), ex);
92 }
93 }
94
95 @Override
96 protected T createMessage(final CharArrayBuffer buffer) throws HttpException {
97 final RequestLine requestLine = getLineParser().parseRequestLine(buffer);
98 final T request = this.requestFactory.newHttpRequest(requestLine.getMethod(), requestLine.getUri());
99 request.setVersion(requestLine.getProtocolVersion());
100 return request;
101 }
102
103 }