Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
branch: master

This branch is 0 commits ahead and 0 commits behind master

Fetching latest commit…

Cannot retrieve the latest commit at this time

README.md

Clojure Programming, Chapter 9

Annotations

This project contains two examples related to using Java annotations from within Clojure.

Defining JUnit 4.x tests in Clojure

The com.clojurebook.annotations.junit namespace defines a Java class using gen-class that defines three methods, each of which has an org.junit.JUnitTest annotation applied.

Two of these tests are designed to fail (to demonstrate the expected effects of the annotations). All tests may be run via the standard JUnit test runner with:

mvn test

Defining JAX-RS services in Clojure

The com.clojurebook.annotations.jaxrs namespace defines a Java class using deftype that has a single greet method. That method, its argument, and the class itself each have javax.ws.rs annotations applied, which defines how the class and method should be exposed as an HTTP endpoint.

To test this, start a REPL with mvn clojure:repl, and start the web service using the Grizzly embedded container:

(com.sun.jersey.api.container.grizzly.GrizzlyWebContainerFactory/create
  "http://localhost:8180/"
  {"com.sun.jersey.config.property.packages" "com.clojurebook.annotations.jaxrs"})

In another terminal, you can get the web service's WADL at http://localhost:8180/application.wadl:

$ curl http://localhost:8180/application.wadl
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<application xmlns="http://research.sun.com/wadl/2006/10">
    <doc xmlns:jersey="http://jersey.java.net/" jersey:generatedBy="Jersey: 1.8 06/24/2011 12:17 PM"/>
    <resources base="http://localhost:8180/">
        <resource path="/greet/{visitorname}">
            <param xmlns:xs="http://www.w3.org/2001/XMLSchema" type="xs:string" style="template" name="visitorname"/>
            <method name="GET" id="greet">
                <response>
                    <representation mediaType="text/plain"/>
                </response>
            </method>
        </resource>
    </resources>
</application>

…and you can call the greet service implemented via the deftype class:

$ curl http://localhost:8180/greet/Rose
Hello Rose!
Something went wrong with that request. Please try again.