2011-05-31 22 views
5

Estoy tratando de proporcionar un API REST/XML programado en Java. La aplicación recibe un parámetro y luego devuelve contenido XML a través de HTTP.REST/XML Api con Java

En PHP la forma en que lo resolvería teniendo un archivo rest_api.php al que se proporciona el parámetro & string = helloworld por la aplicación usando mi API, luego leo esta cadena, hago cálculos o búsquedas con ella, modifico el datos para cumplir con mi esquema XML y responder a estos datos un eco que lo envía de vuelta con la respuesta HTTP.

¿Cómo hago esto correctamente con Java?

Respuesta

7

Dos Java funcionan de maravilla en concierto con este fin:

  • JAX-RS (Jersey implementación de referencia)
  • JAXB (implementación de referencia de metro)

Ambos están incluidos con el Glassfish Java EE 5 y 6 implementación de referencia.

En JAX-RS, cortos permite declarar un método sencillo como un servicio web mediante la adición de uno de los @GET, @POST, @PUT o @DELETE anotaciones. JAX-RS también tiene anotaciones para el análisis automático de los parámetros de búsqueda de ruta y URL, y se encarga de construir los objetos de respuesta adecuados en la mayoría de los casos.

JAXB traduce automáticamente los objetos planos (POJO) desde y hacia XML mediante la adición de @XmlRootElement, @XmlElement, @XmlID, etc. Cuando se combina con JAX-RS, de clasificación y unmarshalling se hace transparente.

Por ejemplo:

// 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); 
    } 
} 

El XML resultante será algo como esto:

<sensor name="foo"> 
    <id>123</id> 
    <sensor-value>42</sensor-value> 
</sensor> 
+0

+1 - Para ver un ejemplo completo visite: http://bdoughan.blogspot.com/2010/08/creating-restful-web-service-part-45.html –

2

El marco RESTlet debe haber un comienzo bastante bueno

3

Yo personalmente he utilizado tanto,

que puedo tanto recomendar. Encontré a Restlet un poco más fácil para empezar, pero Jersey ofrece las mejores posibilidades de integración (al menos por cómo lo usé).

extensiones
1

No he probado Restlet o Jersey, pero he estado muy satisfechos con Apache Wink. Funcionó bien en nuestro entorno de producción sin problemas.