回答編集履歴
4
動作に必要だったjarを追記した。
test
CHANGED
@@ -251,3 +251,21 @@
|
|
251
251
|
}
|
252
252
|
|
253
253
|
```
|
254
|
+
|
255
|
+
|
256
|
+
|
257
|
+
動作確認に使ったjarは、以下の通りです。
|
258
|
+
|
259
|
+
```
|
260
|
+
|
261
|
+
commons-logging-1.1.1.jar
|
262
|
+
|
263
|
+
google-http-client-1.20.0.jar
|
264
|
+
|
265
|
+
google-http-client-jackson-1.20.0.jar
|
266
|
+
|
267
|
+
lombok.jar
|
268
|
+
|
269
|
+
jackson-core-asl-1.9.11.jar
|
270
|
+
|
271
|
+
```
|
3
実際にリクエストを実行するコードを追記した。
test
CHANGED
@@ -201,3 +201,53 @@
|
|
201
201
|
-(略)-
|
202
202
|
|
203
203
|
```
|
204
|
+
|
205
|
+
### [追記]実際にリクエストからパースする場合
|
206
|
+
|
207
|
+
以下のコードで、実際にHTTPリクエストを送って結果をパースすることができました。
|
208
|
+
|
209
|
+
変更点は、
|
210
|
+
|
211
|
+
1.Factoryを使って`JsonObjectParser`を追加した。
|
212
|
+
|
213
|
+
2`.asInstagramObject(res.parseAsString())`していたのを、`parseAs(クラスA.class)`に変更した。
|
214
|
+
|
215
|
+
3.動作確認のために`instagramData.getInstagramImageData();`を追加した。
|
216
|
+
|
217
|
+
|
218
|
+
|
219
|
+
```lang-java
|
220
|
+
|
221
|
+
try {
|
222
|
+
|
223
|
+
HttpRequestFactory requestFactory = httpTransport.createRequestFactory();
|
224
|
+
|
225
|
+
GenericUrl genericUrl = new GenericUrl(url);
|
226
|
+
|
227
|
+
HttpRequest req = requestFactory.buildGetRequest(genericUrl);
|
228
|
+
|
229
|
+
req.setParser(new JacksonFactory().createJsonObjectParser()); // 1.追加
|
230
|
+
|
231
|
+
HttpResponse res = req.execute();
|
232
|
+
|
233
|
+
|
234
|
+
|
235
|
+
try {
|
236
|
+
|
237
|
+
instagramData = res.parseAs(クラスA.class); // 2.変更
|
238
|
+
|
239
|
+
instagramData.getInstagramImageData(); // 3.動作確認のために追加
|
240
|
+
|
241
|
+
} finally {
|
242
|
+
|
243
|
+
res.disconnect();
|
244
|
+
|
245
|
+
}
|
246
|
+
|
247
|
+
} finally {
|
248
|
+
|
249
|
+
httpTransport.shutdown();
|
250
|
+
|
251
|
+
}
|
252
|
+
|
253
|
+
```
|
2
原因の推測について追記した。
test
CHANGED
@@ -157,3 +157,47 @@
|
|
157
157
|
}
|
158
158
|
|
159
159
|
```
|
160
|
+
|
161
|
+
|
162
|
+
|
163
|
+
###推測される原因
|
164
|
+
|
165
|
+
おそらく、ライブラリ側からパース時に`DataBreakdown`などのインスタンスをnewするために、
|
166
|
+
|
167
|
+
ライブラリからアクセス可能なデフォルトコンストラクタが必要なことが原因です。
|
168
|
+
|
169
|
+
`public static`を付けない場合に、以下のような例外が発生したためです。
|
170
|
+
|
171
|
+
試してはいませんが、内部クラスをやめて、publicなクラスにしても成功すると思います。
|
172
|
+
|
173
|
+
```
|
174
|
+
|
175
|
+
Exception in thread "main" java.lang.IllegalArgumentException:
|
176
|
+
|
177
|
+
at com.google.api.client.json.JsonParser.parseValue(JsonParser.java:880)
|
178
|
+
|
179
|
+
at com.google.api.client.json.JsonParser.parse(JsonParser.java:381)
|
180
|
+
|
181
|
+
at com.google.api.client.json.JsonParser.parse(JsonParser.java:354)
|
182
|
+
|
183
|
+
at com.google.api.client.json.JsonObjectParser.parseAndClose(JsonObjectParser.java:98)
|
184
|
+
|
185
|
+
at com.google.api.client.json.JsonObjectParser.parseAndClose(JsonObjectParser.java:92)
|
186
|
+
|
187
|
+
at sandbox.httpclient.クラスA.main(クラスA.java:46)
|
188
|
+
|
189
|
+
-(略)-
|
190
|
+
|
191
|
+
Caused by: java.lang.IllegalArgumentException: unable to create new instance of class sandbox.httpclient.クラスA$DataBreakdown because it is not static and possibly because it is not public
|
192
|
+
|
193
|
+
at com.google.api.client.util.Types.handleExceptionForNewInstance(Types.java:165)
|
194
|
+
|
195
|
+
at com.google.api.client.util.Types.newInstance(Types.java:120)
|
196
|
+
|
197
|
+
at com.google.api.client.json.JsonParser.parseValue(JsonParser.java:763)
|
198
|
+
|
199
|
+
... 9 more
|
200
|
+
|
201
|
+
-(略)-
|
202
|
+
|
203
|
+
```
|
1
@Getterを削除したことを追記した。
test
CHANGED
@@ -1,4 +1,16 @@
|
|
1
1
|
[HTTP Client Library for Java](https://developers.google.com/api-client-library/java/google-http-java-client/)の1.20.0で試したところ、以下のコードでうまくいきました。
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
変更点は
|
6
|
+
|
7
|
+
1.@Getterを削除した。
|
8
|
+
|
9
|
+
2.自分でFactoryを作った。
|
10
|
+
|
11
|
+
3.`class DataBreakdown`を`public static class DataBreakdown`に直した。
|
12
|
+
|
13
|
+
です。
|
2
14
|
|
3
15
|
|
4
16
|
|
@@ -6,9 +18,7 @@
|
|
6
18
|
|
7
19
|
同じ現象は発生しませんでしたが、少なくとも
|
8
20
|
|
9
|
-
`class DataBreakdown`を`public static class DataBreakdown`に直さないと、
|
10
|
-
|
11
|
-
例外が発生して動作しませんでした。
|
21
|
+
3.を実施しないと、例外が発生して動作しませんでした。
|
12
22
|
|
13
23
|
|
14
24
|
|