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.http.impl;
29
30 import org.apache.http.HttpRequest;
31 import org.apache.http.HttpRequestFactory;
32 import org.apache.http.MethodNotSupportedException;
33 import org.apache.http.RequestLine;
34 import org.apache.http.annotation.ThreadingBehavior;
35 import org.apache.http.annotation.Contract;
36 import org.apache.http.message.BasicHttpEntityEnclosingRequest;
37 import org.apache.http.message.BasicHttpRequest;
38 import org.apache.http.util.Args;
39
40
41
42
43
44
45 @Contract(threading = ThreadingBehavior.IMMUTABLE)
46 public class DefaultHttpRequestFactory implements HttpRequestFactory {
47
48 public static final DefaultHttpRequestFactoryml#DefaultHttpRequestFactory">DefaultHttpRequestFactory INSTANCE = new DefaultHttpRequestFactory();
49
50 private static final String[] RFC2616_COMMON_METHODS = {
51 "GET"
52 };
53
54 private static final String[] RFC2616_ENTITY_ENC_METHODS = {
55 "POST",
56 "PUT"
57 };
58
59 private static final String[] RFC2616_SPECIAL_METHODS = {
60 "HEAD",
61 "OPTIONS",
62 "DELETE",
63 "TRACE",
64 "CONNECT"
65 };
66
67 private static final String[] RFC5789_ENTITY_ENC_METHODS = {
68 "PATCH"
69 };
70
71 public DefaultHttpRequestFactory() {
72 super();
73 }
74
75 private static boolean isOneOf(final String[] methods, final String method) {
76 for (final String method2 : methods) {
77 if (method2.equalsIgnoreCase(method)) {
78 return true;
79 }
80 }
81 return false;
82 }
83
84 @Override
85 public HttpRequest newHttpRequest(final RequestLine requestline)
86 throws MethodNotSupportedException {
87 Args.notNull(requestline, "Request line");
88 final String method = requestline.getMethod();
89 if (isOneOf(RFC2616_COMMON_METHODS, method)) {
90 return new BasicHttpRequest(requestline);
91 } else if (isOneOf(RFC2616_ENTITY_ENC_METHODS, method)) {
92 return new BasicHttpEntityEnclosingRequest(requestline);
93 } else if (isOneOf(RFC2616_SPECIAL_METHODS, method)) {
94 return new BasicHttpRequest(requestline);
95 } else if (isOneOf(RFC5789_ENTITY_ENC_METHODS, method)) {
96 return new BasicHttpEntityEnclosingRequest(requestline);
97 } else {
98 throw new MethodNotSupportedException(method + " method not supported");
99 }
100 }
101
102 @Override
103 public HttpRequest newHttpRequest(final String method, final String uri)
104 throws MethodNotSupportedException {
105 if (isOneOf(RFC2616_COMMON_METHODS, method)) {
106 return new BasicHttpRequest(method, uri);
107 } else if (isOneOf(RFC2616_ENTITY_ENC_METHODS, method)) {
108 return new BasicHttpEntityEnclosingRequest(method, uri);
109 } else if (isOneOf(RFC2616_SPECIAL_METHODS, method)) {
110 return new BasicHttpRequest(method, uri);
111 } else if (isOneOf(RFC5789_ENTITY_ENC_METHODS, method)) {
112 return new BasicHttpEntityEnclosingRequest(method, uri);
113 } else {
114 throw new MethodNotSupportedException(method
115 + " method not supported");
116 }
117 }
118
119 }