|
60 | 60 | import org.apache.http.HttpResponse; |
61 | 61 | import org.apache.http.client.fluent.Request; |
62 | 62 | import org.apache.http.entity.ContentType; |
| 63 | +import org.apache.http.util.EntityUtils; |
63 | 64 | import org.eclipse.jetty.http.HttpStatus; |
64 | 65 | import org.exist.EXistException; |
65 | 66 | import org.exist.Namespaces; |
@@ -234,6 +235,20 @@ public class RESTServiceTest { |
234 | 235 | private static final XmldbURI TEST_XMLDECL_COLLECTION_URI = XmldbURI.ROOT_COLLECTION_URI.append("rest-test-xmldecl"); |
235 | 236 | private static final XmldbURI TEST_XML_DOC_WITH_XMLDECL_URI = XmldbURI.create("test-with-xmldecl.xml"); |
236 | 237 |
|
| 238 | + private static final String TEST_PRODUCES_XML_XQUERY = |
| 239 | + "xquery version \"3.0\";\n" + |
| 240 | + "declare namespace output = \"http://www.w3.org/2010/xslt-xquery-serialization\";\n" + |
| 241 | + "declare option output:method \"xml\";\n" + |
| 242 | + "declare option output:media-type \"application/xml\";\n" + |
| 243 | + "<test>xml</test>"; |
| 244 | + |
| 245 | + private static final String TEST_PRODUCES_JSON_XQUERY = |
| 246 | + "xquery version \"3.0\";\n" + |
| 247 | + "declare namespace output = \"http://www.w3.org/2010/xslt-xquery-serialization\";\n" + |
| 248 | + "declare option output:method \"json\";\n" + |
| 249 | + "declare option output:media-type \"application/json\";\n" + |
| 250 | + "<test><json1>json</json1> <json2>json</json2></test>"; |
| 251 | + |
237 | 252 | private static String credentials; |
238 | 253 | private static String badCredentials; |
239 | 254 |
|
@@ -1249,6 +1264,111 @@ public void getXmlDeclYes() throws IOException { |
1249 | 1264 | assertEquals("<bookmap id=\"bookmap-2\"/>\r\n", responseBody); |
1250 | 1265 | } |
1251 | 1266 |
|
| 1267 | + @Test |
| 1268 | + public void queryProducesXmlWithAcceptXml() throws IOException { |
| 1269 | + doPut(TEST_PRODUCES_XML_XQUERY, "produces-xml.xq", HttpStatus.CREATED_201); |
| 1270 | + final String uri = getCollectionUri() + "/produces-xml.xq"; |
| 1271 | + |
| 1272 | + final HttpResponse response = Request.Get(uri) |
| 1273 | + .setHeader("Accept", MediaType.APPLICATION_XML) |
| 1274 | + .setHeader("Authorization", "Basic " + credentials) |
| 1275 | + .execute() |
| 1276 | + .returnResponse(); |
| 1277 | + |
| 1278 | + final int resultStatusCode = response.getStatusLine().getStatusCode(); |
| 1279 | + final String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8"); |
| 1280 | + assertEquals("Server returned response code: " + resultStatusCode, HttpStatus.OK_200, resultStatusCode); |
| 1281 | + assertResponseMediaType(MediaType.APPLICATION_XML, response); |
| 1282 | + assertEquals("<test>xml</test>", responseBody); |
| 1283 | + } |
| 1284 | + |
| 1285 | + @Test |
| 1286 | + public void queryProducesJsonWithAcceptXml() throws IOException { |
| 1287 | + doPut(TEST_PRODUCES_JSON_XQUERY, "produces-json.xq", HttpStatus.CREATED_201); |
| 1288 | + final String uri = getCollectionUri() + "/produces-json.xq"; |
| 1289 | + |
| 1290 | + final HttpResponse response = Request.Get(uri) |
| 1291 | + .setHeader("Authorization", "Basic " + credentials) |
| 1292 | + .setHeader("Accept", MediaType.APPLICATION_XML) |
| 1293 | + .execute() |
| 1294 | + .returnResponse(); |
| 1295 | + |
| 1296 | + final int resultStatusCode = response.getStatusLine().getStatusCode(); |
| 1297 | + final String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8"); |
| 1298 | + assertEquals("Server returned response code: " + resultStatusCode, HttpStatus.OK_200, resultStatusCode); |
| 1299 | + assertResponseMediaType("application/json", response); |
| 1300 | + assertEquals("{ \"json1\" : \"json\", \"json2\" : \"json\" }", responseBody); |
| 1301 | + } |
| 1302 | + |
| 1303 | + @Test |
| 1304 | + public void queryProducesXmlWithAcceptJson() throws IOException { |
| 1305 | + doPut(TEST_PRODUCES_XML_XQUERY, "produces-xml.xq", HttpStatus.CREATED_201); |
| 1306 | + final String uri = getCollectionUri() + "/produces-xml.xq"; |
| 1307 | + |
| 1308 | + final HttpResponse response = Request.Get(uri) |
| 1309 | + .setHeader("Authorization", "Basic " + credentials) |
| 1310 | + .setHeader("Accept", "application/json") |
| 1311 | + .execute() |
| 1312 | + .returnResponse(); |
| 1313 | + |
| 1314 | + final int resultStatusCode = response.getStatusLine().getStatusCode(); |
| 1315 | + final String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8"); |
| 1316 | + assertEquals("Server returned response code: " + resultStatusCode, HttpStatus.OK_200, resultStatusCode); |
| 1317 | + assertResponseMediaType(MediaType.APPLICATION_XML, response); |
| 1318 | + assertEquals("<test>xml</test>", responseBody); |
| 1319 | + } |
| 1320 | + |
| 1321 | + @Test |
| 1322 | + public void queryProducesJsonWithAcceptJson() throws IOException { |
| 1323 | + doPut(TEST_PRODUCES_JSON_XQUERY, "produces-json.xq", HttpStatus.CREATED_201); |
| 1324 | + final String uri = getCollectionUri() + "/produces-json.xq"; |
| 1325 | + |
| 1326 | + final HttpResponse response = Request.Get(uri) |
| 1327 | + .setHeader("Authorization", "Basic " + credentials) |
| 1328 | + .setHeader("Accept", "application/json") |
| 1329 | + .execute() |
| 1330 | + .returnResponse(); |
| 1331 | + |
| 1332 | + final int resultStatusCode = response.getStatusLine().getStatusCode(); |
| 1333 | + final String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8"); |
| 1334 | + assertEquals("Server returned response code: " + resultStatusCode, HttpStatus.OK_200, resultStatusCode); |
| 1335 | + assertResponseMediaType("application/json", response); |
| 1336 | + assertEquals("{ \"json1\" : \"json\", \"json2\" : \"json\" }", responseBody); |
| 1337 | + } |
| 1338 | + |
| 1339 | + @Test |
| 1340 | + public void queryProducesXmlWithNoAccept() throws IOException { |
| 1341 | + doPut(TEST_PRODUCES_XML_XQUERY, "produces-xml.xq", HttpStatus.CREATED_201); |
| 1342 | + final String uri = getCollectionUri() + "/produces-xml.xq"; |
| 1343 | + |
| 1344 | + final HttpResponse response = Request.Get(uri) |
| 1345 | + .setHeader("Authorization", "Basic " + credentials) |
| 1346 | + .execute() |
| 1347 | + .returnResponse(); |
| 1348 | + |
| 1349 | + final int resultStatusCode = response.getStatusLine().getStatusCode(); |
| 1350 | + final String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8"); |
| 1351 | + assertEquals("Server returned response code: " + resultStatusCode, HttpStatus.OK_200, resultStatusCode); |
| 1352 | + assertResponseMediaType(MediaType.APPLICATION_XML, response); |
| 1353 | + assertEquals("<test>xml</test>", responseBody); |
| 1354 | + } |
| 1355 | + |
| 1356 | + @Test |
| 1357 | + public void queryProducesJsonWithNoAccept() throws IOException { |
| 1358 | + doPut(TEST_PRODUCES_JSON_XQUERY, "produces-json.xq", HttpStatus.CREATED_201); |
| 1359 | + final String uri = getCollectionUri() + "/produces-json.xq"; |
| 1360 | + |
| 1361 | + final HttpResponse response = Request.Get(uri) |
| 1362 | + .setHeader("Authorization", "Basic " + credentials) |
| 1363 | + .execute() |
| 1364 | + .returnResponse(); |
| 1365 | + |
| 1366 | + final int resultStatusCode = response.getStatusLine().getStatusCode(); |
| 1367 | + final String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8"); |
| 1368 | + assertEquals("Server returned response code: " + resultStatusCode, HttpStatus.OK_200, resultStatusCode); |
| 1369 | + assertResponseMediaType("application/json", response); |
| 1370 | + assertEquals("{ \"json1\" : \"json\", \"json2\" : \"json\" }", responseBody); |
| 1371 | + } |
1252 | 1372 |
|
1253 | 1373 |
|
1254 | 1374 | private void chmod(final String resourcePath, final String mode) throws IOException { |
|
0 commit comments