Sei sicuro di voler Axis2?
Se hai solo bisogno di servire un po 'di XML o JSON in risposta ad alcune richieste GET, e forse un po' di dati di creare / aggiornare / cancellare tramite POST, PUT e DELETE richieste allora RESTEasy è una buona scelta. È un'implementazione di JAX-RS ed è banale per funzionare.
L'adozione di un approccio RESTful aiuterà la tua applicazione a rimanere senza stato (nessuna sessione da condividere) che a sua volta ti permetterà scalare molto più facilmente in seguito. Lavorerai a stretto contatto con le specifiche HTTP e la tua applicazione dovrebbe essere semplice da gestire a livello web.
Se riesci a evitare tutti i problemi con le buste di richiesta SOAP e tutto il resto, ti farai un favore.
Semplice esempio di markup JAX-RS
Ad esempio, si supponga di voler inviare un documento XML come richiesta PUT per attivare un aggiornamento all'archivio permanente. In genere avresti
- un front-end Web (
MyWebService
),
- un po 'di markup JAXB e JPA (leggi Hibernate) su un oggetto dominio rappresentato dall'XML (chiamalo
MyDomain
),
- alcuni markup di transazione sul livello di servizio (
MyService
),
- un DAO per gestire l'aggiornamento (
MyDao
)
Il tuo front-end Web potrebbe essere simile a questo (tutte le annotazioni provengono da JAX-RS):
@Path("/MyWebService")
public class MyWebService {
private MyService service = new MyService(); // Use injection via setters and Spring
@PUT
@Consumes("application/xml")
@Path("/UpdateMyDomain")
public Response updateMyDomain(MyDomain myDomain) {
// Do some validation then hand over
service.updateDomain(myDomain);
return Response.ok("All done").build(); // for a PUT you'd really have a Location etc
}
}
La richiesta HTTP descritta di seguito sarà diretta al metodo precedente
PUT /MyWebService/UpdateMyDomain
Content-Type: application/xml
<?xml ... >
<MyDomain>
...
</MyDomain>
Il tuo web.xml sembrerebbe un po 'come questo
<!-- Provide Spring context -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:my-application-context.xml
</param-value>
</context-param>
<listener>
<listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
</listener>
<listener>
<listener-class>
org.jboss.resteasy.plugins.spring.SpringContextLoaderListener
</listener-class>
</listener>
<servlet>
<servlet-name>RESTEasy</servlet-name>
<servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RESTEasy</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
Non c'è molto altro che ti serve. Beh, forse la lista delle dipendenze di Maven sarebbe utile (forse usare la versione 1.2GA o successiva):
<!-- RESTEasy JAX-RS JBoss implementation -->
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>jaxrs-api</artifactId>
</dependency>
<!-- RESTEasy Core library -->
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxrs</artifactId>
</dependency>
<!-- RESTEasy JAXB support -->
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxb-provider</artifactId>
</dependency>
<!-- RESTEasy multipart/form-data and multipart/mixed support -->
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-multipart-provider</artifactId>
</dependency>
<!-- RESTEasy Spring integration -->
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-spring</artifactId>
</dependency>
Sei sicuro di volere Tomcat?
Forse il leggero Jetty (che può essere usato come Il plugin Maven per consentire agli sviluppatori di eseguire più applicazioni localmente) sarebbe una scelta migliore. Se tutto ciò di cui hai bisogno è un contenitore di servlet in grado di fornire una connessione al database tramite JNDI, Tomcat probabilmente è eccessivo.