|
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; |
@@ -230,6 +231,20 @@ public class RESTServiceTest { |
230 | 231 | private static final XmldbURI TEST_XML_DOC_WITH_XSLPI_URI = XmldbURI.create("test-with-xslpi.xml"); |
231 | 232 |
|
232 | 233 |
|
| 234 | + private static final String TEST_PRODUCES_XML_XQUERY = |
| 235 | + "xquery version \"3.0\";\n" + |
| 236 | + "declare namespace output = \"http://www.w3.org/2010/xslt-xquery-serialization\";\n" + |
| 237 | + "declare option output:method \"xml\";\n" + |
| 238 | + "declare option output:media-type \"application/xml\";\n" + |
| 239 | + "<test>xml</test>"; |
| 240 | + |
| 241 | + private static final String TEST_PRODUCES_JSON_XQUERY = |
| 242 | + "xquery version \"3.0\";\n" + |
| 243 | + "declare namespace output = \"http://www.w3.org/2010/xslt-xquery-serialization\";\n" + |
| 244 | + "declare option output:method \"json\";\n" + |
| 245 | + "declare option output:media-type \"application/json\";\n" + |
| 246 | + "<test><json1>json</json1> <json2>json</json2></test>"; |
| 247 | + |
233 | 248 | private static String credentials; |
234 | 249 | private static String badCredentials; |
235 | 250 |
|
@@ -1189,6 +1204,113 @@ public void getDocWithXslPi_twice() throws IOException { |
1189 | 1204 | getDocWithXslPi(); |
1190 | 1205 | } |
1191 | 1206 |
|
| 1207 | + @Test |
| 1208 | + public void queryProducesXmlWithAcceptXml() throws IOException { |
| 1209 | + doPut(TEST_PRODUCES_XML_XQUERY, "produces-xml.xq", HttpStatus.CREATED_201); |
| 1210 | + final String uri = getCollectionUri() + "/produces-xml.xq"; |
| 1211 | + |
| 1212 | + final HttpResponse response = Request.Get(uri) |
| 1213 | + .setHeader("Accept", MediaType.APPLICATION_XML) |
| 1214 | + .setHeader("Authorization", "Basic " + credentials) |
| 1215 | + .execute() |
| 1216 | + .returnResponse(); |
| 1217 | + |
| 1218 | + final int resultStatusCode = response.getStatusLine().getStatusCode(); |
| 1219 | + final String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8"); |
| 1220 | + assertEquals("Server returned response code: " + resultStatusCode, HttpStatus.OK_200, resultStatusCode); |
| 1221 | + assertResponseMediaType(MediaType.APPLICATION_XML, response); |
| 1222 | + assertEquals("<test>xml</test>", responseBody); |
| 1223 | + } |
| 1224 | + |
| 1225 | + @Test |
| 1226 | + public void queryProducesJsonWithAcceptXml() throws IOException { |
| 1227 | + doPut(TEST_PRODUCES_JSON_XQUERY, "produces-json.xq", HttpStatus.CREATED_201); |
| 1228 | + final String uri = getCollectionUri() + "/produces-json.xq"; |
| 1229 | + |
| 1230 | + final HttpResponse response = Request.Get(uri) |
| 1231 | + .setHeader("Authorization", "Basic " + credentials) |
| 1232 | + .setHeader("Accept", MediaType.APPLICATION_XML) |
| 1233 | + .execute() |
| 1234 | + .returnResponse(); |
| 1235 | + |
| 1236 | + final int resultStatusCode = response.getStatusLine().getStatusCode(); |
| 1237 | + final String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8"); |
| 1238 | + assertEquals("Server returned response code: " + resultStatusCode, HttpStatus.OK_200, resultStatusCode); |
| 1239 | + assertResponseMediaType("application/json", response); |
| 1240 | + assertEquals("{ \"json1\" : \"json\", \"json2\" : \"json\" }", responseBody); |
| 1241 | + } |
| 1242 | + |
| 1243 | + @Test |
| 1244 | + public void queryProducesXmlWithAcceptJson() throws IOException { |
| 1245 | + doPut(TEST_PRODUCES_XML_XQUERY, "produces-xml.xq", HttpStatus.CREATED_201); |
| 1246 | + final String uri = getCollectionUri() + "/produces-xml.xq"; |
| 1247 | + |
| 1248 | + final HttpResponse response = Request.Get(uri) |
| 1249 | + .setHeader("Authorization", "Basic " + credentials) |
| 1250 | + .setHeader("Accept", "application/json") |
| 1251 | + .execute() |
| 1252 | + .returnResponse(); |
| 1253 | + |
| 1254 | + final int resultStatusCode = response.getStatusLine().getStatusCode(); |
| 1255 | + final String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8"); |
| 1256 | + assertEquals("Server returned response code: " + resultStatusCode, HttpStatus.OK_200, resultStatusCode); |
| 1257 | + assertResponseMediaType(MediaType.APPLICATION_XML, response); |
| 1258 | + assertEquals("<test>xml</test>", responseBody); |
| 1259 | + } |
| 1260 | + |
| 1261 | + @Test |
| 1262 | + public void queryProducesJsonWithAcceptJson() throws IOException { |
| 1263 | + doPut(TEST_PRODUCES_JSON_XQUERY, "produces-json.xq", HttpStatus.CREATED_201); |
| 1264 | + final String uri = getCollectionUri() + "/produces-json.xq"; |
| 1265 | + |
| 1266 | + final HttpResponse response = Request.Get(uri) |
| 1267 | + .setHeader("Authorization", "Basic " + credentials) |
| 1268 | + .setHeader("Accept", "application/json") |
| 1269 | + .execute() |
| 1270 | + .returnResponse(); |
| 1271 | + |
| 1272 | + final int resultStatusCode = response.getStatusLine().getStatusCode(); |
| 1273 | + final String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8"); |
| 1274 | + assertEquals("Server returned response code: " + resultStatusCode, HttpStatus.OK_200, resultStatusCode); |
| 1275 | + assertResponseMediaType("application/json", response); |
| 1276 | + assertEquals("{ \"json1\" : \"json\", \"json2\" : \"json\" }", responseBody); |
| 1277 | + } |
| 1278 | + |
| 1279 | + @Test |
| 1280 | + public void queryProducesXmlWithNoAccept() throws IOException { |
| 1281 | + doPut(TEST_PRODUCES_XML_XQUERY, "produces-xml.xq", HttpStatus.CREATED_201); |
| 1282 | + final String uri = getCollectionUri() + "/produces-xml.xq"; |
| 1283 | + |
| 1284 | + final HttpResponse response = Request.Get(uri) |
| 1285 | + .setHeader("Authorization", "Basic " + credentials) |
| 1286 | + .execute() |
| 1287 | + .returnResponse(); |
| 1288 | + |
| 1289 | + final int resultStatusCode = response.getStatusLine().getStatusCode(); |
| 1290 | + final String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8"); |
| 1291 | + assertEquals("Server returned response code: " + resultStatusCode, HttpStatus.OK_200, resultStatusCode); |
| 1292 | + assertResponseMediaType(MediaType.APPLICATION_XML, response); |
| 1293 | + assertEquals("<test>xml</test>", responseBody); |
| 1294 | + } |
| 1295 | + |
| 1296 | + @Test |
| 1297 | + public void queryProducesJsonWithNoAccept() throws IOException { |
| 1298 | + doPut(TEST_PRODUCES_JSON_XQUERY, "produces-json.xq", HttpStatus.CREATED_201); |
| 1299 | + final String uri = getCollectionUri() + "/produces-json.xq"; |
| 1300 | + |
| 1301 | + final HttpResponse response = Request.Get(uri) |
| 1302 | + .setHeader("Authorization", "Basic " + credentials) |
| 1303 | + .execute() |
| 1304 | + .returnResponse(); |
| 1305 | + |
| 1306 | + final int resultStatusCode = response.getStatusLine().getStatusCode(); |
| 1307 | + final String responseBody = EntityUtils.toString(response.getEntity(), "UTF-8"); |
| 1308 | + assertEquals("Server returned response code: " + resultStatusCode, HttpStatus.OK_200, resultStatusCode); |
| 1309 | + assertResponseMediaType("application/json", response); |
| 1310 | + assertEquals("{ \"json1\" : \"json\", \"json2\" : \"json\" }", responseBody); |
| 1311 | + } |
| 1312 | + |
| 1313 | + |
1192 | 1314 | private void chmod(final String resourcePath, final String mode) throws IOException { |
1193 | 1315 | final String uri = getCollectionUri() +"?_query=" + URLEncoder.encode( |
1194 | 1316 | "sm:chmod(xs:anyURI('" + resourcePath + "'), '" + mode + "')", |
|
0 commit comments