Два Java-расширения прекрасно работают с этой целью:
- JAX-RS (эталонная реализация Джерси)
- JAXB (эталонная реализация Metro)
Оба включены в эталонную реализацию Glassfish Java EE 5 и 6.
Короче говоря, JAX-RS позволяет объявлятьпростой метод в качестве веб-службы, добавив одну из аннотаций @GET
, @POST
, @PUT
или @DELETE
.JAX-RS также имеет аннотации для автоматического анализа параметров запроса пути и URL-адреса, и в большинстве случаев он заботится о построении правильных объектов ответа.
JAXB автоматически переводит простые объекты (POJO) в и из XML, добавляя@XmlRootElement
, @XmlElement
, @XmlID
и т. Д. При объединении с JAX-RS маршалинг и демаршаллинг выполняется прозрачно.
Например:
// POJO with JAXB annotations
@XmlRootElement(name = "sensor")
public class MyObject {
@XmlID
@XmlElement
private String id;
@XmlAttribute
private String name;
@XmlElement(name = "sensor-value")
private Integer value;
@XmlTransient // don't translate to XML
private Double computedValue;
// ...getters and setters
}
// POJO with REST interface
@Path("/mywebservice")
public class MyWebService {
@EJB
MySensorController controller;
@GET
@Produces("application/xml")
public MyObject getCurrentSensorValue(@QueryParam("ID") String id) {
// automatic unmarshalling from MyObject to XML
return controller.getSensorValue(id);
}
}
Полученный XML будетвыглядеть примерно так:
<sensor name="foo">
<id>123</id>
<sensor-value>42</sensor-value>
</sensor>