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.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.