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 public DefaultHttpRequestParser(
57 final Http1Config http1Config,
58 final LineParser parser,
59 final HttpRequestFactory<T> requestFactory) {
60 super(http1Config, parser);
61 this.requestFactory = Args.notNull(requestFactory, "Request factory");
62 }
63
64
65
66
67 public DefaultHttpRequestParser(final Http1Config http1Config, final HttpRequestFactory<T> requestFactory) {
68 this(http1Config, null, requestFactory);
69 }
70
71
72
73
74 @Deprecated
75 public DefaultHttpRequestParser(final HttpRequestFactory<T> requestFactory, final Http1Config http1Config) {
76 this(requestFactory, null, http1Config);
77 }
78
79
80
81
82 @Deprecated
83 public DefaultHttpRequestParser(
84 final HttpRequestFactory<T> requestFactory,
85 final LineParser parser,
86 final Http1Config http1Config) {
87 this(http1Config, parser, requestFactory);
88 }
89
90
91
92
93 public DefaultHttpRequestParser(final HttpRequestFactory<T> requestFactory) {
94 this(null, null, requestFactory);
95 }
96
97 @Override
98 public T parse(final SessionInputBuffer sessionBuffer, final boolean endOfStream) throws IOException, HttpException {
99 try {
100 return super.parse(sessionBuffer, endOfStream);
101 } catch (final MessageConstraintException ex) {
102 throw new RequestHeaderFieldsTooLargeException(ex.getMessage(), ex);
103 }
104 }
105
106 @Override
107 protected T createMessage(final CharArrayBuffer buffer) throws HttpException {
108 final RequestLine requestLine = getLineParser().parseRequestLine(buffer);
109 final T request = this.requestFactory.newHttpRequest(requestLine.getMethod(), requestLine.getUri());
110 request.setVersion(requestLine.getProtocolVersion());
111 return request;
112 }
113
114 }