I'm writing a Java client to the Atlassian Crucible REST API to return all reviews for a given changeset, and cannot seen to get it working.
The code looks correct, but returns HTTP Code 500 and a non-specific message.
Here is the code:
/** * @see * https://docs.atlassian.com/fisheye-crucible/latest/wadl/fisheye.html#rest-service-fe:search-v1:reviewsForChangeset:repository */ List<Review> searchReviewsForChangeset(String repo, String changeset) { HttpResponse response; try { String command = String.format("%s/reviewsForChangeset/%s", SEARCH, repo); CrucibleUrl crucibleUrl = new CrucibleUrl(url + command); HttpContent content = new UrlEncodedContent(new Object() { @Key String cs = changeset; }); HttpRequest request = requestFactory.buildPostRequest(crucibleUrl, content); request.setLoggingEnabled(true); // request.setUnsuccessfulResponseHandler(this); response = request.execute(); Reviews x = response.parseAs(Reviews.class); return x.list; } catch (IOException ex) { Logger.getLogger(Crucible.class.getName()).log(Level.SEVERE, null, ex); return Collections.emptyList(); } }
The HttpRequestFactory is initialized like this:
HttpTransport transport = new NetHttpTransport(); JsonFactory jsonFactory = new GsonFactory(); HttpRequestFactory requestFactory = transport.createRequestFactory(request -> { request.setParser(new JsonObjectParser(jsonFactory)); HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.setContentType("application/json"); httpHeaders.setAccept("application/json"); request.setHeaders(httpHeaders); });
Here is the output I get (with logging turned on in the Google HTTP Client):
CONFIG: -------------- REQUEST -------------- POST http://crucible.snt.bst.bls.com:8060/rest-service-fe/search-v1/reviewsForChangeset/BBNMS-JBBOS Accept: application/json Accept-Encoding: gzip Authorization: <Not Logged> Content-Type: application/json User-Agent: Google-HTTP-Java-Client/1.20.0 (gzip) Content-Type: application/x-www-form-urlencoded; charset=UTF-8 Content-Length: 9 Nov 03, 2015 4:05:21 PM com.google.api.client.http.HttpRequest execute CONFIG: curl -v --compressed -X POST -H 'Accept: application/json' -H 'Accept-Encoding: gzip' -H 'Authorization: <Not Logged>' -H 'Content-Type: application/json' -H 'User-Agent: Google-HTTP-Java-Client/1.20.0 (gzip)' -H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' -d '@-' -- 'http://crucible.snt.bst.bls.com:8060/rest-service-fe/search-v1/reviewsForChangeset/BBNMS-JBBOS' << $$$ Nov 03, 2015 4:05:21 PM com.google.api.client.util.LoggingByteArrayOutputStream close CONFIG: Total: 9 bytes Nov 03, 2015 4:05:21 PM com.google.api.client.util.LoggingByteArrayOutputStream close CONFIG: cs=161883 Nov 03, 2015 4:05:21 PM com.google.api.client.http.HttpResponse <init> CONFIG: -------------- RESPONSE -------------- HTTP/1.1 500 Internal Server Error Transfer-Encoding: chunked Server: Jetty(6.1.26) Cache-Control: private X-AUSERNAME: jw9615 Set-Cookie: FESESSIONID=qbewjdhe9f17q9ykuetqqzbv;Path=/;HttpOnly Set-Cookie: crucibleprefs1="D%3D1446584721687";Path=/;Expires=Wed, 02-Nov-2016 21:05:21 GMT Set-Cookie: remember=;Path=/;Expires=Thu, 01-Jan-1970 00:00:00 GMT;HttpOnly Expires: Thu, 01-Jan-1970 00:00:00 GMT Content-Type: application/json Nov 03, 2015 4:05:21 PM com.google.api.client.util.LoggingByteArrayOutputStream close CONFIG: Total: 12,071 bytes Nov 03, 2015 4:05:21 PM com.google.api.client.util.LoggingByteArrayOutputStream close CONFIG: {"code":"WebApplication","message":null,"stacktrace":"javax.ws.rs.WebApplicationException\n\tat com.sun.jersey.server.impl.uri.rules.TerminatingRule.accept(TerminatingRule.java:66)\n\tat com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)\n\tat com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)\n\tat com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)\n\tat com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1469)\n\tat com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400) ... many more lines elided ... at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:945)\n\tat org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756)\n\tat org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)\n\tat org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)\n\tat org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)\n\tat org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:451)\n"}
What am I doing wrong? I can provide the entire stacktrace as needed.
Here is a list of my dependencies:
Java 8u40, plus the following:
<dependency> <groupId>commons-cli</groupId> <artifactId>commons-cli</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>commons-configuration</groupId> <artifactId>commons-configuration</artifactId> <version>1.10</version> </dependency> <dependency> <groupId>com.google.http-client</groupId> <artifactId>google-http-client</artifactId> <version>1.20.0</version> </dependency> <dependency> <groupId>com.google.http-client</groupId> <artifactId>google-http-client-gson</artifactId> <version>1.20.0</version> </dependency>
Hi @Jeff Wilson,
I think the problem is caused by repeated Content-Type header - it is set to application/json first, but then set again to application/x-www-form-urlencoded; charset=UTF-8.
As you are submitting form-urlencoded data try removing
httpHeaders.setContentType("application/json");
That should help.
Online forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.