My team and I are working on trying to find best Java client to consume Hal REST services. I was trying HalBuilder and took me a time to figure a few tweaks to make the simple example describe in the website to work. Perhaps, I was doing something wrong, but just in case someone is also stuck on that, here's the code:
Maven Dependencies:
<dependency> <groupId>com.theoryinpractise</groupId> <artifactId>halbuilder-api</artifactId> <version>2.2.1</version> </dependency> <dependency> <groupId>com.theoryinpractise</groupId> <artifactId>halbuilder-core</artifactId> <version>3.1.3</version> </dependency> <dependency> <groupId>com.theoryinpractise</groupId> <artifactId>halbuilder-json</artifactId> <version>3.1.3</version> </dependency> <dependency> <groupId>com.theoryinpractise</groupId> <artifactId>halbuilder-standard</artifactId> <version>3.0.1</version> </dependency> <dependency> <groupId>com.ning</groupId> <artifactId>async-http-client</artifactId> <version>1.8.9</version> </dependency>
Java code:
import java.io.IOException; import java.io.InputStreamReader; import java.util.concurrent.ExecutionException; import com.ning.http.client.AsyncHttpClient; import com.ning.http.client.Response; import com.theoryinpractise.halbuilder.api.ReadableRepresentation; import com.theoryinpractise.halbuilder.api.RepresentationFactory; import com.theoryinpractise.halbuilder.json.JsonRepresentationFactory; //http://gotohal.net/ public class TestHalBuilderAPI { public static void main(String[] args) throws InterruptedException, ExecutionException, IOException { RepresentationFactory representationFactory = new JsonRepresentationFactory(); representationFactory.withFlag(RepresentationFactory.PRETTY_PRINT); AsyncHttpClient asyncHttpClient = new AsyncHttpClient(); Response response = asyncHttpClient.prepareGet("http://gotohal.net/restbucks/api").execute().get(); InputStreamReader inputStreamReader = new InputStreamReader(response.getResponseBodyAsStream()); ReadableRepresentation representation = representationFactory.readRepresentation(inputStreamReader); String ordersLinkUrl = representation.getLinkByRel("orders").getHref(); System.out.println(ordersLinkUrl); asyncHttpClient.close(); } }