# Language it-IT translations for PACKAGE package.
# Automatically generated, 2008.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: http://bugs.kde.org\n"
"POT-Creation-Date: 2009-11-15 10:18+0000\n"
"PO-Revision-Date: 2009-11-21 21:08+0100\n"
"Last-Translator: Nicola Benaglia <nico.benaz@gmail.com>\n"
"Language-Team: none\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#. Tag: title
#: Webservices.xml:2
#, no-c-format
msgid "Web Services"
msgstr "Web Service"

#. Tag: para
#: Webservices.xml:4
#, no-c-format
msgid "Seam integrates with JBossWS to allow standard JEE web services to take full advantage of Seam's contextual framework, including support for conversational web services. This chapter walks through the steps required to allow web services to run within a Seam environment."
msgstr "Seam si integra con JBossWS per consentire allo standard JEE web service di sfruttrare pienamente il framework contestuale di Seam, includendo il supporto ai web service conversazionali. Questo capitolo passa in rassegna tutti i passi richiesti per consentire ai web service di funzionare in ambiente Seam."

#. Tag: title
#: Webservices.xml:11
#, no-c-format
msgid "Configuration and Packaging"
msgstr "Configurazione ed impacchettamento"

#. Tag: para
#: Webservices.xml:12
#, no-c-format
msgid "To allow Seam to intercept web service requests so that the necessary Seam contexts can be created for the request, a special SOAP handler must be configured; <literal>org.jboss.seam.webservice.SOAPRequestHandler</literal> is a <literal>SOAPHandler</literal> implementation that does the work of managing Seam's lifecycle during the scope of a web service request."
msgstr "Per consentire a Seam di intercettare le richieste web service in modo tale da creare i contesti Seam necessari per la richiesta, deve essere configurato uno speciale handler SOAP; <literal>org.jboss.seam.webservice.SOAPRequestHandler</literal> è un'implementazione <literal>SOAPHandler</literal> che esegue il lavoro di gestione del ciclo di vita di Seam durante lo scope di una richiesta web service."

#. Tag: para
#: Webservices.xml:19
#, no-c-format
msgid "A special configuration file, <literal>standard-jaxws-endpoint-config.xml</literal> should be placed into the <literal>META-INF</literal> directory of the <literal>jar</literal> file that contains the web service classes. This file contains the following SOAP handler configuration:"
msgstr "Uno speciale file di configurazione, <literal>standard-jaxws-endpoint-config.xml</literal>, deve essere collocato nella directory <literal>META-INF</literal> del file <literal>jar</literal> che contiene le classi web service. Questo file contiene la seguente configurazione handler SOAP:"

#. Tag: programlisting
#: Webservices.xml:25
#, no-c-format
msgid ""
"<![CDATA[<jaxws-config xmlns=\"urn:jboss:jaxws-config:2.0\" \n"
"              xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \n"
"              xmlns:javaee=\"http://java.sun.com/xml/ns/javaee\"\n"
"              xsi:schemaLocation=\"urn:jboss:jaxws-config:2.0 jaxws-config_2_0.xsd\">\n"
"   <endpoint-config>\n"
"      <config-name>Seam WebService Endpoint</config-name>\n"
"      <pre-handler-chains>\n"
"         <javaee:handler-chain>\n"
"            <javaee:protocol-bindings>##SOAP11_HTTP</javaee:protocol-bindings>\n"
"            <javaee:handler>\n"
"               <javaee:handler-name>SOAP Request Handler</javaee:handler-name>\n"
"               <javaee:handler-class>org.jboss.seam.webservice.SOAPRequestHandler</javaee:handler-class>\n"
"            </javaee:handler>\n"
"         </javaee:handler-chain>\n"
"      </pre-handler-chains>\n"
"   </endpoint-config>\n"
"</jaxws-config>]]>"
msgstr ""
"<![CDATA[<jaxws-config xmlns=\"urn:jboss:jaxws-config:2.0\" \n"
"              xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" \n"
"              xmlns:javaee=\"http://java.sun.com/xml/ns/javaee\"\n"
"              xsi:schemaLocation=\"urn:jboss:jaxws-config:2.0 jaxws-config_2_0.xsd\">\n"
"   <endpoint-config>\n"
"      <config-name>Seam WebService Endpoint</config-name>\n"
"      <pre-handler-chains>\n"
"         <javaee:handler-chain>\n"
"            <javaee:protocol-bindings>##SOAP11_HTTP</javaee:protocol-bindings>\n"
"            <javaee:handler>\n"
"               <javaee:handler-name>SOAP Request Handler</javaee:handler-name>\n"
"               <javaee:handler-class>org.jboss.seam.webservice.SOAPRequestHandler</javaee:handler-class>\n"
"            </javaee:handler>\n"
"         </javaee:handler-chain>\n"
"      </pre-handler-chains>\n"
"   </endpoint-config>\n"
"</jaxws-config>]]>"

#. Tag: title
#: Webservices.xml:30
#, no-c-format
msgid "Conversational Web Services"
msgstr "Web Service conversazionali"

#. Tag: para
#: Webservices.xml:31
#, no-c-format
msgid "So how are conversations propagated between web service requests? Seam uses a SOAP header element present in both the SOAP request and response messages to carry the conversation ID from the consumer to the service, and back again. Here's an example of a web service request that contains a conversation ID:"
msgstr "Quindi come vengono propagate le conversazioni tra le richieste web service? Seam usa un elemento di intestazione SOAP presente in entrambi i messaggi di richiesta e di risposta SOAP per portare l'ID della conversazione dal consumatore al servizio, e viceversa. Ecco un esempio di richiesta web service che contiene un ID di conversazione:"

#. Tag: programlisting
#: Webservices.xml:37
#, no-c-format
msgid ""
"<![CDATA[<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" \n"
"    xmlns:seam=\"http://seambay.example.seam.jboss.org/\">\n"
"  <soapenv:Header>\n"
"    <seam:conversationId xmlns:seam='http://www.jboss.org/seam/webservice'>2</seam:conversationId>\n"
"  </soapenv:Header>\n"
"  <soapenv:Body>\n"
"    <seam:confirmAuction/>\n"
"  </soapenv:Body>\n"
"</soapenv:Envelope>    \n"
"    ]]>"
msgstr ""
"<![CDATA[<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" \n"
"    xmlns:seam=\"http://seambay.example.seam.jboss.org/\">\n"
"  <soapenv:Header>\n"
"    <seam:conversationId xmlns:seam='http://www.jboss.org/seam/webservice'>2</seam:conversationId>\n"
"  </soapenv:Header>\n"
"  <soapenv:Body>\n"
"    <seam:confirmAuction/>\n"
"  </soapenv:Body>\n"
"</soapenv:Envelope>    \n"
"    ]]>"

#. Tag: para
#: Webservices.xml:39
#, no-c-format
msgid "As you can see in the above SOAP message, there is a <literal>conversationId</literal> element within the SOAP header that contains the conversation ID for the request, in this case <literal>2</literal>. Unfortunately, because web services may be consumed by a variety of web service clients written in a variety of languages, it is up to the developer to implement conversation ID propagation between individual web services that are intended to be used within the scope of a single conversation."
msgstr "Come si può vedere nel messaggio SOAP sovrastante, dentro l'header SOAP c'è un elemento <literal>conversationId</literal> che contiene l'ID della conversazione di appartenenza della richiesta, in questo caso <literal>2</literal>. Purtroppo, poiché i web services possono essere utilizzati da una varietà di client scritti in diversi linguaggi, spetta allo sviluppatore implementare la propagazione dell'ID della conversazione tra i distinti web service che si intende usare nell'ambito di una singola conversazione."

#. Tag: para
#: Webservices.xml:47
#, no-c-format
msgid "An important thing to note is that the <literal>conversationId</literal> header element must be qualified with a namespace of <literal>http://www.jboss.org/seam/webservice</literal>, otherwise Seam will not be able to read the conversation ID from the request. Here's an example of a response to the above request message:"
msgstr "E' importante notare che l'elemento <literal>conversationId</literal> dell'header deve essere qualificato con il namespace <literal>http://www.jboss.org/seam/webservice</literal>, altrimenti Seam non sarà in grado di leggere l'ID della conversazione dalla richiesta. Ecco un esempio di una risposta al messagio della richiesta di cui sopra:"

#. Tag: programlisting
#: Webservices.xml:53
#, no-c-format
msgid ""
"<![CDATA[<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>\n"
"  <env:Header>\n"
"    <seam:conversationId xmlns:seam='http://www.jboss.org/seam/webservice'>2</seam:conversationId>\n"
"  </env:Header>\n"
"  <env:Body>\n"
"    <confirmAuctionResponse xmlns=\"http://seambay.example.seam.jboss.org/\"/>\n"
"  </env:Body>\n"
"</env:Envelope>    \n"
"    ]]>"
msgstr ""
"<![CDATA[<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>\n"
"  <env:Header>\n"
"    <seam:conversationId xmlns:seam='http://www.jboss.org/seam/webservice'>2</seam:conversationId>\n"
"  </env:Header>\n"
"  <env:Body>\n"
"    <confirmAuctionResponse xmlns=\"http://seambay.example.seam.jboss.org/\"/>\n"
"  </env:Body>\n"
"</env:Envelope>    \n"
"    ]]>"

#. Tag: para
#: Webservices.xml:55
#, no-c-format
msgid "As you can see, the response message contains the same <literal>conversationId</literal> element as the request."
msgstr "Come si può vedere, il messaggio di risposta contiene lo stesso elemento <literal>conversationId</literal> della richiesta."

#. Tag: title
#: Webservices.xml:60
#, no-c-format
msgid "A Recommended Strategy"
msgstr "Una strategia raccomandata"

# facade=interfaccia? (non è lo stesso....)
#. Tag: para
#: Webservices.xml:62
#, no-c-format
msgid "As web services must be implemented as either a stateless session bean or POJO, it is recommended that for conversational web services, the web service acts as a facade to a conversational Seam component."
msgstr "Dal momento che i web service devono essere implementati come stateless session bean oppure come POJO, per web service conversazionali si raccomanda che fungano da facade ad un componente Seam conversazionale."

#. Tag: para
#: Webservices.xml:76
#, no-c-format
msgid "If the web service is written as a stateless session bean, then it is also possible to make it a Seam component by giving it a <literal>@Name</literal>. Doing this allows Seam's bijection (and other) features to be used in the web service class itself."
msgstr "Se il web service è scritto come session bean stateless, allora è pure possibile farlo diventare un componente Seam dandogli un nome, <literal>@Name</literal>. Ciò abilita la bijection di Seam ed altre caratteristiche che possono essere utilizzate nella classe stessa del web service."

#. Tag: title
#: Webservices.xml:87
#, no-c-format
msgid "An example web service"
msgstr "Esempio di web service"

#. Tag: para
#: Webservices.xml:89
#, no-c-format
msgid "Let's walk through an example web service. The code in this section all comes from the seamBay example application in Seam's <literal>/examples</literal> directory, and follows the recommended strategy as described in the previous section. Let's first take a look at the web service class and one of its web service methods:"
msgstr "Esaminiamo un web service di esempio. Il codice di questa sezione proviene tutto dall'applicazione di esempio seamBay nella directory <literal>/examples</literal> di Seam, e segue la strategia raccomandata nella precedente sezione. Diamo innanzitutto un'occhiata alla classe del web service e a uno dei suoi metodi esposti come web service:"

#. Tag: programlisting
#: Webservices.xml:96
#, no-c-format
msgid ""
"<![CDATA[@Stateless\n"
"@WebService(name = \"AuctionService\", serviceName = \"AuctionService\")\n"
"public class AuctionService implements AuctionServiceRemote\n"
"{\n"
"   @WebMethod\n"
"   public boolean login(String username, String password)\n"
"   {\n"
"      Identity.instance().setUsername(username);\n"
"      Identity.instance().setPassword(password);\n"
"      Identity.instance().login();\n"
"      return Identity.instance().isLoggedIn();\n"
"   }\n"
"\n"
"   // snip\n"
"}]]>"
msgstr ""
"<![CDATA[@Stateless\n"
"@WebService(name = \"AuctionService\", serviceName = \"AuctionService\")\n"
"public class AuctionService implements AuctionServiceRemote\n"
"{\n"
"   @WebMethod\n"
"   public boolean login(String username, String password)\n"
"   {\n"
"      Identity.instance().setUsername(username);\n"
"      Identity.instance().setPassword(password);\n"
"      Identity.instance().login();\n"
"      return Identity.instance().isLoggedIn();\n"
"   }\n"
"\n"
"   // snip\n"
"}]]>"

#. Tag: para
#: Webservices.xml:98
#, no-c-format
msgid "As you can see, our web service is a stateless session bean, and is annotated using the JWS annotations from the <literal>javax.jws</literal> package, as defined by JSR-181. The <literal>@WebService</literal> annotation tells the container that this class implements a web service, and the <literal>@WebMethod</literal> annotation on the <literal>login()</literal> method identifies the method as a web service method. The <literal>name</literal> and <literal>serviceName</literal> attributes in the <literal>@WebService</literal> annotation are optional."
msgstr "Come si può notare, il nostro web service è un session bean stateless, ed è annotato usando l'annotazione JWS del package <literal>javax.jws</literal>, come specificato dalla JSR-181. L'annotazione <literal>@WebService</literal> comunica al container che questa classe implementa un web service, e l'annotazione <literal>@WebMethod</literal> sul metodo <literal>login()</literal> lo identifica come metodo di tipo web service. Gli attributi <literal>name</literal> e <literal>serviceName</literal> dell'annotazione <literal>@WebService</literal> sono opzionali."

#. Tag: para
#: Webservices.xml:107
#, no-c-format
msgid "As is required by the specification, each method that is to be exposed as a web service method must also be declared in the remote interface of the web service class (when the web service is a stateless session bean). In the above example, the <literal>AuctionServiceRemote</literal> interface must declare the <literal>login()</literal> method as it is annotated as a <literal>@WebMethod</literal>."
msgstr "Come richiesto dalle specifiche, ogni metodo che deve essere esposto come web service deve essere dichiarato anche nell'interfaccia remota della classe del web service (quando il web service è un session bean stateless). Nell'esempio suddetto, l'interfaccia <literal>AuctionServiceRemote</literal> deve dichiarare il metodo <literal>login()</literal> poiché esso è annotato come <literal>@WebMethod</literal>."

#. Tag: para
#: Webservices.xml:114
#, no-c-format
msgid "As you can see in the above code, the web service implements a <literal>login()</literal> method that delegates to Seam's built-in <literal>Identity</literal> component. In keeping with our recommended strategy, the web service is written as a simple facade, passing off the real work to a Seam component. This allows for the greatest reuse of business logic between web services and other clients."
msgstr "Come si può notare nel codice sovrastante, il web service implementa un metodo <literal>login()</literal> che delega l'esecuzione al componente <literal>Identity</literal> di Seam. Attenendoci alla strategia da noi raccomandata, il web service è scritto come un semplice facade, che inoltra il lavoro vero e proprio ad un componente Seam. Questo permette il massimo riutilizzo di business logic tra web service e altri clients."

#. Tag: para
#: Webservices.xml:121
#, no-c-format
msgid "Let's look at another example. This web service method begins a new conversation by delegating to the <literal>AuctionAction.createAuction()</literal> method:"
msgstr "Vediamo un altro esempio. Questo metodo web service inizia una nuova conversazione delegando l'esecuzione al metodo <literal>AuctionAction.createAuction()</literal>:"

#. Tag: programlisting
#: Webservices.xml:126
#, no-c-format
msgid ""
"<![CDATA[   @WebMethod\n"
"   public void createAuction(String title, String description, int categoryId)\n"
"   {\n"
"      AuctionAction action = (AuctionAction) Component.getInstance(AuctionAction.class, true);\n"
"      action.createAuction();\n"
"      action.setDetails(title, description, categoryId);\n"
"   }]]>"
msgstr ""
"<![CDATA[   @WebMethod\n"
"   public void createAuction(String title, String description, int categoryId)\n"
"   {\n"
"      AuctionAction action = (AuctionAction) Component.getInstance(AuctionAction.class, true);\n"
"      action.createAuction();\n"
"      action.setDetails(title, description, categoryId);\n"
"   }]]>"

#. Tag: para
#: Webservices.xml:128
#, no-c-format
msgid "And here's the code from <literal>AuctionAction</literal>:"
msgstr "Ed ecco il codice di <literal>AuctionAction</literal>:"

#. Tag: programlisting
#: Webservices.xml:132
#, no-c-format
msgid ""
"<![CDATA[   @Begin\n"
"   public void createAuction()\n"
"   {\n"
"      auction = new Auction();\n"
"      auction.setAccount(authenticatedAccount);\n"
"      auction.setStatus(Auction.STATUS_UNLISTED);        \n"
"      durationDays = DEFAULT_AUCTION_DURATION;\n"
"   }]]>"
msgstr ""
"<![CDATA[   @Begin\n"
"   public void createAuction()\n"
"   {\n"
"      auction = new Auction();\n"
"      auction.setAccount(authenticatedAccount);\n"
"      auction.setStatus(Auction.STATUS_UNLISTED);        \n"
"      durationDays = DEFAULT_AUCTION_DURATION;\n"
"   }]]>"

#. Tag: para
#: Webservices.xml:134
#, no-c-format
msgid "From this we can see how web services can participate in long running conversations, by acting as a facade and delegating the real work to a conversational Seam component."
msgstr "Da ciò si può notare come i web service possano partecipare a conversazioni long running, svolgendo il ruolo di facade e delegando il vero lavoro a un componente Seam conversazionale."

#. Tag: title
#: Webservices.xml:142
#, no-c-format
msgid "RESTful HTTP webservices with RESTEasy"
msgstr "Webservice RESTful HTTP con RESTEasy"

#. Tag: para
#: Webservices.xml:144
#, no-c-format
msgid "Seam integrates the RESTEasy implementation of the JAX-RS specification (JSR 311). You can decide how \"deep\" the integration into your Seam application is going to be:"
msgstr "Seam integra l'implementazone RESTEasy delle specifiche  JAX-RS (JSR 311). E' possibile decidere quanto  l'integrazione alla vostra applicazione debba spingersi in profondità:"

#. Tag: para
#: Webservices.xml:151
#, no-c-format
msgid "Seamless integration of RESTEasy bootstrap and configuration, automatic detection of resources and providers."
msgstr "Integrazione trasparente della configurazione e del bootstrap RESTEasy, rilevamento automatico di risorse e providers."

#. Tag: para
#: Webservices.xml:157
#, no-c-format
msgid "Serving HTTP/REST requests with the SeamResourceServlet, no external servlet or configuration in web.xml required."
msgstr "Gestione di richieste HTTP/REST con SeamResourceServlet, senza richiedere alcuna configurazione del servlet esterna o nel file web.xml."

#. Tag: para
#: Webservices.xml:163
#, no-c-format
msgid "Writing resources as Seam components, with full Seam lifecycle management and interception (bijection)."
msgstr "Scrivere risorse come componenti Seam, con gestione completa del ciclo di vita e della interception (biJection) di Seam."

#. Tag: title
#: Webservices.xml:170
#, no-c-format
msgid "RESTEasy configuration and request serving"
msgstr "Configurazione RESTEasy e gestione delle richieste"

#. Tag: para
#: Webservices.xml:172
#, no-c-format
msgid "First, get the RESTEasy libraries and the <literal>jaxrs-api.jar</literal>, deploy them with the other libraries of your application. Also deploy the integration library, <literal>jboss-seam-resteasy.jar</literal>."
msgstr "Innanzitutto, si prendano le librerie RESTEasy e <literal>jaxrs-api.jar</literal>, e le si installi con le altre librerie della vostra applicazione. Si installi anche la libreria di integrazione, <literal>jboss-seam-resteasy.jar</literal>."

#. Tag: para
#: Webservices.xml:178
#, no-c-format
msgid "On startup, all classes annotated <literal>@javax.ws.rs.Path</literal> will be discovered automatically and registered as HTTP resources. Seam automatically accepts and serves HTTP requests with its built-in <literal>SeamResourceServlet</literal>. The URI of a resource is build as follows:"
msgstr "All'avvio, saranno automaticamente individuate e registrate come risorse HTTP tutte le classi annotate con <literal>@javax.ws.rs.Path</literal>. Seam accetta e gestisce automaticamente richieste HTTP col proprio componente <literal>SeamResourceServlet</literal>. L'URI di una risorsa è costruito come segue:"

#. Tag: para
#: Webservices.xml:186
#, no-c-format
msgid "The URI starts with the host and context path of your application, e.g. <literal>http://your.hostname/myapp</literal>."
msgstr "L'URI inizia con l'host ed il percorso del contesto dell'applicazione, es. <literal>http://your.hostname/myapp</literal>."

#. Tag: para
#: Webservices.xml:192
#, no-c-format
msgid "Then the pattern mapped in <literal>web.xml</literal> for the <literal>SeamResourceServlet</literal>, e.g <literal>/seam/resource</literal> if you follow the common examples, is appended. Change this setting to expose your RESTful resources under a different base. Note that this is a global change and other Seam resources (e.g. <literal>s:graphicImage</literal>) are then also served under that base path."
msgstr "Quindi viene accodato il pattern mappato in <literal>web.xml</literal> per il servlet <literal>SeamResourceServlet</literal>, ad esempio <literal>/seam/resource</literal>, se si seguono gli esempi comuni. Modificate questa impostazione per esporre le risorse RESTful con un diverso percorso di base. Si noti che questo cambiamento è globale e anche altre risorse Seam (ad esempio <literal>s:graphicImage</literal>) saranno servite sotto questo percorso di base."

#. Tag: para
#: Webservices.xml:201
#, no-c-format
msgid "The RESTEasy integration for Seam then appends a configurable string to the base path, by default this is <literal>/rest</literal>. Hence, the full base path of your resources would e.g. be <literal>/myapp/seam/resource/rest</literal>. We recommend that you change this string in your application, you could for example add a version number to prepare for a future REST API upgrade of your services (old clients would keep the old URI base): <literal>/myapp/seam/resource/restv1</literal>."
msgstr "L'integrazione RESTEasy di Seam accoda allora una stringa configurabile al percorso base, di default <literal>/rest</literal>. Quindi, il percorso completo delle risorse sarebbe, ad esempio, <literal>/myapp/seam/resource/rest</literal>. Si raccomanda di modificare questa stringa nella vostra applicazione. Ad esempio, si potrebbe aggiungere un numero di versione per prepararsi a futuri aggiornamenti di versione delle API REST dei vostri servizi (i vecchi client manterrebbero il vecchio URI di base): <literal>/seam/resource/restv1</literal>."

#. Tag: para
#: Webservices.xml:210
#, no-c-format
msgid "Finally, the actual resource is available under the defined <literal>@Path</literal>, e.g. a resource mapped with <literal>@Path(\"/customer\")</literal> would be available under <literal>/myapp/seam/resource/rest/customer</literal>."
msgstr "Infine, la risorsa vera e propria è disponibile sotto il<literal>@Path</literal> definito, ad esempio una risorsa mappata con <literal>@Path(\"/customer\")</literal> sarebbe raggiungibile sotto <literal>/myapp/seam/resource/rest/customer</literal>."

#. Tag: para
#: Webservices.xml:218
#, no-c-format
msgid "As an example, the following resource definition would return a plaintext representation for any GET requests using the URI <literal>http://your.hostname/myapp/seam/resource/rest/customer/123</literal>:"
msgstr "Come esempio, la seguente definizione di risorsa restituirebbe una rappresentazione puramente testuale for ogni richiesta GET diretta all'URI <literal>http://your.hostname/myapp/seam/resource/rest/customer/123</literal>:"

#. Tag: programlisting
#: Webservices.xml:223
#, no-c-format
msgid ""
"<![CDATA[@Path(\"/customer\")\n"
"public class MyCustomerResource {\n"
"\n"
"    @GET\n"
"    @Path(\"/{customerId}\")\n"
"    @Produces(\"text/plain\")\n"
"    public String getCustomer(@PathParam(\"customerId\") int id) {\n"
"         return ...;\n"
"    }\n"
"\n"
"}]]>"
msgstr ""
"<![CDATA[@Path(\"/customer\")\n"
"public class MyCustomerResource {\n"
"\n"
"    @GET\n"
"    @Path(\"/{customerId}\")\n"
"    @Produces(\"text/plain\")\n"
"    public String getCustomer(@PathParam(\"customerId\") int id) {\n"
"         return ...;\n"
"    }\n"
"\n"
"}]]>"

#. Tag: para
#: Webservices.xml:225
#, no-c-format
msgid "No additional configuration is required, you do not have to edit <literal>web.xml</literal> or any other setting if these defauls are acceptable. However, you can configure RESTEasy in your Seam application. First import the <literal>resteasy</literal> namespace into your XML configuration file header:"
msgstr "Non è richiesta alcuna configurazione addizionale, non è necessario editare il file <literal>web.xml</literal> o nessun altra configurazione se questi valori di default sono accettabili. Comunque, è possibile procedere alla configurazione RESTEasy in un'applicazione Seam. Innanzitutto, occorre importare il namespace <literal>resteasy</literal> nell'header del file di configurazione XML:"

#. Tag: programlisting
#: Webservices.xml:231
#, no-c-format
msgid ""
"<![CDATA[<components\n"
"   xmlns=\"http://jboss.org/schema/seam/components\"\n"
"   xmlns:resteasy=\"http://jboss.org/schema/seam/resteasy\"\n"
"   xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
"   xsi:schemaLocation=\n"
"     http://jboss.org/schema/seam/resteasy\n"
"         http://jboss.org/schema/seam/resteasy-2.3.xsd\n"
"     http://jboss.org/schema/seam/components\n"
"         http://jboss.org/schema/seam/components-2.3.xsd\">]]>"
msgstr ""
"<![CDATA[<components\n"
"   xmlns=\"http://jboss.org/schema/seam/components\"\n"
"   xmlns:resteasy=\"http://jboss.org/schema/seam/resteasy\"\n"
"   xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n"
"   xsi:schemaLocation=\n"
"     http://jboss.org/schema/seam/resteasy\n"
"         http://jboss.org/schema/seam/resteasy-2.3.xsd\n"
"     http://jboss.org/schema/seam/components\n"
"         http://jboss.org/schema/seam/components-2.3.xsd\">]]>"

#. Tag: para
#: Webservices.xml:233
#, no-c-format
msgid "You can then change the <literal>/rest</literal> prefix as mentioned earlier:"
msgstr "Allora è possibile modificare il prefisso <literal>/rest</literal> come accennato in precedenza:"

#. Tag: programlisting
#: Webservices.xml:237
#, no-c-format
msgid "<![CDATA[<resteasy:application resource-path-prefix=\"/restv1\"/>]]>"
msgstr "<![CDATA[<resteasy:application resource-path-prefix=\"/restv1\"/>]]>"

#. Tag: para
#: Webservices.xml:239
#, no-c-format
msgid "The full base path to your resources is now <literal>/myapp/seam/resource/restv1/{resource}</literal> - note that your <literal>@Path</literal> definitions and mappings do NOT change. This is an application-wide switch usually used for versioning of the HTTP interface."
msgstr "Il percorso completo alle risorse è ora <literal>/myapp/seam/resource/restv1/{resource}</literal> - si noti che che le definizioni e le mappature di tipo path <literal>@Path</literal> NON cambiano. Questo è uno \"switch\" a livello di applicazione di solito usato per la gestione delle versioni delle API HTTP."

#. Tag: para
#: Webservices.xml:245
#, no-c-format
msgid "Seam will scan your classpath for any deployed <literal>@javax.ws.rs.Path</literal> resources and any <literal>@javax.ws.rs.ext.Provider</literal> classes. You can disable scanning and configure these classes manually:"
msgstr "Seam scandaglierà il classpath alla ricerca delle risorsa <literal>@javax.ws.rs.Path</literal> e di ogni classe <literal>@javax.ws.rs.ext.Provider</literal>. E' possibile disabilitare la ricerca e configurare queste classi manualmente:"

#. Tag: programlisting
#: Webservices.xml:251
#, no-c-format
msgid ""
"<![CDATA[<resteasy:application\n"
"     scan-providers=\"false\"\n"
"     scan-resources=\"false\"\n"
"     use-builtin-providers=\"true\">\n"
"\n"
"     <resteasy:resource-class-names>\n"
"         <value>org.foo.MyCustomerResource</value>\n"
"         <value>org.foo.MyOrderResource</value>\n"
"         <value>org.foo.MyStatelessEJBImplementation</value>\n"
"     </resteasy:resource-class-names>\n"
"\n"
"     <resteasy:provider-class-names>\n"
"         <value>org.foo.MyFancyProvider</value>\n"
"     </resteasy:provider-class-names>\n"
"\n"
" </resteasy:application>]]>"
msgstr ""
"<![CDATA[<resteasy:application\n"
"     scan-providers=\"false\"\n"
"     scan-resources=\"false\"\n"
"     use-builtin-providers=\"true\">\n"
"\n"
"     <resteasy:resource-class-names>\n"
"         <value>org.foo.MyCustomerResource</value>\n"
"         <value>org.foo.MyOrderResource</value>\n"
"         <value>org.foo.MyStatelessEJBImplementation</value>\n"
"     </resteasy:resource-class-names>\n"
"\n"
"     <resteasy:provider-class-names>\n"
"         <value>org.foo.MyFancyProvider</value>\n"
"     </resteasy:provider-class-names>\n"
"\n"
" </resteasy:application>]]>"

# interni, precostituiti=built-in???
# marshalling=serializzazione, invio???
#. Tag: para
#: Webservices.xml:253
#, no-c-format
msgid "The <literal>use-built-in-providers</literal> switch enables (default) or disables the RESTEasy built-in providers. We recommend you leave them enabled, as they provide plaintext, JSON, and JAXB marshalling out of the box."
msgstr "L'interruttore <literal>use-built-in-providers</literal> abilita (default) o disabilita i provider RESTEasy precostituiti. Si raccomanda di lasciarli abilitati, poiché essi forniscono automaticamente la gestione del \"marshalling\" testuale, JSON, e JAXB."

# Seam <literal>jndi-pattern</literal> su <literal>&lt;core:init/&gt;</literal>????????????
#. Tag: para
#: Webservices.xml:259
#, no-c-format
msgid "RESTEasy supports plain EJBs (EJBs that are not Seam components) as resources. Instead of configuring the JNDI names in a non-portable fashion in <literal>web.xml</literal> (see RESTEasy documentation), you can simply list the EJB implementation classes, not the business interfaces, in <literal>components.xml</literal> as shown above. Note that you have to annotate the <literal>@Local</literal> interface of the EJB with <literal>@Path</literal>, <literal>@GET</literal>, and so on - not the bean implementation class. This allows you to keep your application deployment-portable with the global Seam <literal>jndi-pattern</literal> switch on <literal>&lt;core:init/&gt;</literal>. Note that plain (non-Seam component) EJB resources will not be found even if scanning of resources is enabled, you always have to list them manually. Again, this whole paragraph is only relevant for EJB resources that are not also Seam components and that do not have an <literal>@Name</literal> annotation."
msgstr "RESTEasy supporta gli EJB semplici (EJB che non sono componenti Seam) alla stregua di risorse. Invece di configurare i nomi JNDI in modo non portabile nel file<literal>web.xml</literal> (si veda la documentazione RESTEasy), è possibile elencare semplicemente le classi di implementazione degli EJB, non le interfacce di business, nel file <literal>components.xml</literal>, come mostrato sopra. Si noti che si deve annotare l'interfaccia <literal>@Local</literal> dell'EJB con <literal>@Path</literal>, <literal>@GET</literal>, e così via - non la classe di implementazione del bean. Ciò permette di mantenere l'applicazione portabile rispetto al tipo di deploy con lo switch globale di Seam <literal>jndi-pattern</literal> su <literal>&lt;core:init/&gt;</literal>. Si noti che le risorse EJB (componenti non-Seam) non verranno trovate anche se la ricerca delle risorse è abilitata, bisogna sempre elencarle manualmente. Di nuovo, ciò è rilevante solo per risorse EJB che non sono anche componenti Seam e che non hanno l'annotazione <literal>@Name</literal>."

# verificare, molto aprossimativo
#. Tag: para
#: Webservices.xml:272
#, no-c-format
msgid "Finally, you can configure media type and language URI extensions:"
msgstr "Infine, è possibile configurare le estensioni degli URI dei tipi di media e dei linguaggi:"

#. Tag: programlisting
#: Webservices.xml:276
#, no-c-format
msgid ""
"<![CDATA[<resteasy:application>\n"
"\n"
"    <resteasy:media-type-mappings>\n"
"       <key>txt</key><value>text/plain</value>\n"
"    </resteasy:media-type-mappings>\n"
"\n"
"    <resteasy:language-mappings>\n"
"       <key>deutsch</key><value>de-DE</value>\n"
"    </resteasy:language-mappings>\n"
"\n"
"</resteasy:application>]]>"
msgstr ""
"<![CDATA[<resteasy:application>\n"
"\n"
"    <resteasy:media-type-mappings>\n"
"       <key>txt</key><value>text/plain</value>\n"
"    </resteasy:media-type-mappings>\n"
"\n"
"    <resteasy:language-mappings>\n"
"       <key>deutsch</key><value>de-DE</value>\n"
"    </resteasy:language-mappings>\n"
"\n"
"</resteasy:application>]]>"

# VERIFICARE
#. Tag: para
#: Webservices.xml:278
#, no-c-format
msgid "This definition would map the URI suffix of <literal>.txt.deutsch</literal> to additional <literal>Accept</literal> and <literal>Accept-Language</literal> header values <literal>text/plain</literal> and <literal>de-DE</literal>."
msgstr "Questa definizione mapperebbe il suffisso dell'URI di <literal>.txt.deutsch</literal> sui valori aggiuntivi <literal>text/plain</literal> and <literal>de-DE</literal> ripettivamente degli header <literal>Accept</literal> e <literal>Accept-Language</literal>."

#. Tag: title
#: Webservices.xml:287
#, no-c-format
msgid "Resources as Seam components"
msgstr "Risorse come componenti Seam"

#. Tag: para
#: Webservices.xml:289
#, no-c-format
msgid "Any resource and provider instances are managed by RESTEasy by default. That means a resource class will be instantiated by RESTEasy and serve a single request, after which it will be destroyed. This is the default JAX-RS lifecycle. Providers are instantiated once for the whole application and are effectively singletons and supposed to be stateless."
msgstr "Qualunque istanza di risorsa e di provider è gestita da RESTEasy di default. Ciò significa che la classe di una risorsa sarà istanziata da RESTEasy e servirà una singola richiesta, dopo di ché sarà distrutta. I provider sono istanziati una sola volta per tutta l'applicazione e in effetti sono dei singletons che sono supposti stateless."

#. Tag: para
#: Webservices.xml:296
#, no-c-format
msgid "You can write resources as Seam components and benefit from the richer lifecycle management of Seam, and interception for bijection, security, and so on. Simply make your resource class a Seam component:"
msgstr "E' possibile scrivere risorse come componenti Seam e trarre beneficio dalla più ricca gestione del ciclo di vita di Seam e dall'interception, dalla bijection, dalla sicurezza e così via. Occorre semplicemente rendere la classe della risorsa un componente Seam:"

#. Tag: programlisting
#: Webservices.xml:302
#, no-c-format
msgid ""
"<![CDATA[@Name(\"customerResource\")\n"
"@Path(\"/customer\")\n"
"public class MyCustomerResource {\n"
"\n"
"    @In\n"
"    CustomerDAO customerDAO;\n"
"\n"
"    @GET\n"
"    @Path(\"/{customerId}\")\n"
"    @Produces(\"text/plain\")\n"
"    public String getCustomer(@PathParam(\"customerId\") int id) {\n"
"         return customerDAO.find(id).getName();\n"
"    }\n"
"\n"
"}]]>"
msgstr ""
"<![CDATA[@Name(\"customerResource\")\n"
"@Path(\"/customer\")\n"
"public class MyCustomerResource {\n"
"\n"
"    @In\n"
"    CustomerDAO customerDAO;\n"
"\n"
"    @GET\n"
"    @Path(\"/{customerId}\")\n"
"    @Produces(\"text/plain\")\n"
"    public String getCustomer(@PathParam(\"customerId\") int id) {\n"
"         return customerDAO.find(id).getName();\n"
"    }\n"
"\n"
"}]]>"

#. Tag: para
#: Webservices.xml:304
#, no-c-format
msgid "An instance of <literal>customerResource</literal> is now handled by Seam when a request hits the server. This is a Seam JavaBean component that is <literal>EVENT</literal>-scoped, hence no different than the default JAX-RS lifecycle. You get full Seam injection and interception support, and all other Seam components and contexts are available to you. Currently also supported are <literal>APPLICATION</literal> and <literal>STATELESS</literal> resource Seam components. These three scopes allow you to create an effectively stateless Seam middle-tier HTTP request-processing application."
msgstr "Quando una richiesta raggiunge il server, un'istanza di <literal>customerResource</literal> viene ora gestita da Seam. Si tratta di un componente JavaBean di Seam con scope <literal>EVENT</literal>, quindi in nulla diverso dal ciclo di vita del JAX-RS di default. Si ottiene il completo supporto di Seam per la bijection e tutti gli altri componenti e contesti di Seam sono disponibili. Attualmente sono supportati anche i componenti Seam che sono risorse di tipo <literal>APPLICATION</literal> e <literal>STATELESS</literal>. Questi tre scope permettono di creare un'applicazione Seam middle-tier che processa le richieste HTTP in modo stateless."

#. Tag: para
#: Webservices.xml:313
#, no-c-format
msgid "You can annotate an interface and keep the implementation free from JAX-RS annotations:"
msgstr "Si può annotare un'interfaccia e mantenere l'implementazione libera da annotazioni JAX-RS:"

#. Tag: programlisting
#: Webservices.xml:317
#, no-c-format
msgid ""
"<![CDATA[@Path(\"/customer\")\n"
"public interface MyCustomerResource {\n"
"\n"
"    @GET\n"
"    @Path(\"/{customerId}\")\n"
"    @Produces(\"text/plain\")\n"
"    public String getCustomer(@PathParam(\"customerId\") int id);\n"
"\n"
"}]]>"
msgstr ""
"<![CDATA[@Path(\"/customer\")\n"
"public interface MyCustomerResource {\n"
"\n"
"    @GET\n"
"    @Path(\"/{customerId}\")\n"
"    @Produces(\"text/plain\")\n"
"    public String getCustomer(@PathParam(\"customerId\") int id);\n"
"\n"
"}]]>"

#. Tag: programlisting
#: Webservices.xml:319
#, no-c-format
msgid ""
"<![CDATA[@Name(\"customerResource\")\n"
"@Scope(ScopeType.STATELESS)\n"
"public class MyCustomerResourceBean implements MyCustomerResource {\n"
"\n"
"    @In\n"
"    CustomerDAO customerDAO;\n"
"\n"
"    public String getCustomer(int id) {\n"
"         return customerDAO.find(id).getName();\n"
"    }\n"
"\n"
"}]]>"
msgstr ""
"<![CDATA[@Name(\"customerResource\")\n"
"@Scope(ScopeType.STATELESS)\n"
"public class MyCustomerResourceBean implements MyCustomerResource {\n"
"\n"
"    @In\n"
"    CustomerDAO customerDAO;\n"
"\n"
"    public String getCustomer(int id) {\n"
"         return customerDAO.find(id).getName();\n"
"    }\n"
"\n"
"}]]>"

#. Tag: para
#: Webservices.xml:321
#, no-c-format
msgid "You can use <literal>SESSION</literal>-scoped Seam components. By default, the session will however be shortened to a single request. In other words, when an HTTP request is being processed by the RESTEasy integration code, an HTTP session will be created so that Seam components can utilize that context. When the request has been processed, Seam will look at the session and decide if the session was created only to serve that single request (no session identifier has been provided with the request, or no session existed for the request). If the session has been created only to serve this request, the session will be destroyed after the request!"
msgstr "E' possibile utilizzare componenti Seam con scope <literal>SESSION</literal>. Di default, la sessione sarà comunque ridotta ad una singola richiesta. In altre parole, mentre una richiesta HTTP viene processata dal codice di integrazione RESTEasy, viene creata una sessione HTTP in modo che i componenti Seam possano utilizzare tale contesto. Dopo che la richiesta è stata processata, Seam esamina la sessione e decide se è stata creata soltanto per servire quella singola richiesta (nessun identificatore di sessione è stato fornito con la richiesta o nessuna sessione esiste per la richiesta). Se la sessione è stata creata solo per servire la richiesta corrente, essa sarà distrutta al termine della richiesta!"

#. Tag: para
#: Webservices.xml:330
#, no-c-format
msgid "Assuming that your Seam application only uses event, application, or stateless components, this procedure prevents exhaustion of available HTTP sessions on the server. The RESTEasy integration with Seam assumes by default that sessions are not used, hence anemic sessions would add up as every REST request would start a session that will only be removed when timed out."
msgstr "Assumendo che l'applicazione Seam usi solo componenti evento, applicazione o stateless, questa procedura previene l'esaurimento delle sessioni HTTP sul server. L'integrazione RESTEasy di Seam assume di default che le sessioni non siano usate, poiché si aggiungerebbero sessioni anemiche all'avvio di una sessione da parte di ciascuna richiesta REST, sessione che sarà rimossa solo alla scadenza."

#. Tag: para
#: Webservices.xml:337
#, no-c-format
msgid "If your RESTful Seam application has to preserve session state across REST HTTP requests, disable this behavior in your configuration file:"
msgstr "Se l'applicazione RESTful di Seam deve preservare lo stato della sessione fra richieste HTTP REST, occorre disabilitare questo comportamento nel file di configurazione:"

#. Tag: programlisting
#: Webservices.xml:342
#, no-c-format
msgid "<![CDATA[<resteasy:application destroy-session-after-request=\"false\"/>]]>"
msgstr "<![CDATA[<resteasy:application destroy-session-after-request=\"false\"/>]]>"

#. Tag: para
#: Webservices.xml:344
#, no-c-format
msgid "Every REST HTTP request will now create a new session that will only be removed by timeout or explicit invalidation in your code through <literal>Session.instance().invalidate()</literal>. It is your responsibility to pass a valid session identifier along with your HTTP requests, if you want to utilize the session context across requests."
msgstr "Tutte le richieste HTTP RESTful creeranno ora una nuova sessione che sarà rimossa soltanto alla sua scadenza o per invalidazione esplicita da parte del codice dell'applicazione usando <literal>Session.instance().invalidate()</literal>. E' responsabilità dello sviluppatore passare un identificatore di sessione valido insieme a ciascuna richiesta HTTP, se si vuole utilizzare il contesto di sessione tra una richiesta e l'altra."

#. Tag: para
#: Webservices.xml:351
#, no-c-format
msgid "<literal>CONVERSATION</literal>-scoped resource components and mapping of conversations to temporary HTTP resources and paths is planned but currently not supported."
msgstr "Risorse che siano componenti con scope <literal>CONVERSATION</literal> e la mappatura delle conversazioni su risorse e percorsi HTTP temporanei è nei piani ma non ancora supportato."

#. Tag: para
#: Webservices.xml:356
#, no-c-format
msgid "EJB Seam components are supported as REST resources. Always annotate the local business interface, not the EJB implementation class, with JAX-RS annotations. The EJB has to be <literal>STATELESS</literal>."
msgstr "I componenti EJB Seam vengono supportati come risorse REST. Si annoti sempre l'interfaccia locale di business, non la classe di implementazione EJB, con le annotazioni JAX-RS. L'EJB deve essere <literal>STATELESS</literal>."

#. Tag: para
#: Webservices.xml:362
#, no-c-format
msgid "Sub-resources as defined in the JAX RS specification, section 3.4.1, can not be Seam component instances at this time. Only root resource classes can be registered as Seam components. In other words, do not return a Seam component instance from a root resource method."
msgstr "Le sotto-risorse come definite nella specifica JAX RS, sezione 3.4.1, non possono essere al momento istanze componenti Seam. Solo le classi di risorsa radice possono venire registrate come componenti Seam. In altre parole, non si restituisce un'istanza componente da un metodo di risorsa radice."

#. Tag: para
#: Webservices.xml:370
#, no-c-format
msgid "Provider classes can currently not be Seam components. Although you can configure an <literal>@Provider</literal> annotated class as a Seam component, it will at runtime be managed by RESTEasy as a singleton with no Seam interception, bijection, etc. The instance will not be a Seam component instance. We plan to support Seam component lifecycle for JAX-RS providers in the future."
msgstr "Le classi provider non possono al momento essere componenti Seam. Sebbene si possa configurare una classe annotata con <literal>@Provider</literal> come componente Seam, a runtime verrà gestita da RESTEasy come un singleton senza intercettazione Seam, bijection, ecc. L'istanza non sarà un'istanza componente Seam. Programmiamo per il futuro di supportare il ciclo di vita dei componenti Seam per i provider JAX-RS."

#. Tag: title
#: Webservices.xml:382
#, no-c-format
msgid "Securing resources"
msgstr "Sicurezza della risorse"

#. Tag: para
#: Webservices.xml:384
#, no-c-format
msgid "You can enable the Seam authentication filter for HTTP Basic and Digest authentication in <literal>components.xml</literal>:"
msgstr "Si può abilitare il filtro di autenticazione per l'autenticazione HTTP Basic e Digest in <literal>components.xml</literal>:"

#. Tag: programlisting
#: Webservices.xml:389
#, no-c-format
msgid "<![CDATA[<web:authentication-filter url-pattern=\"/seam/resource/rest/*\" auth-type=\"basic\"/>]]>"
msgstr "<![CDATA[<web:authentication-filter url-pattern=\"/seam/resource/rest/*\" auth-type=\"basic\"/>]]>"

#. Tag: para
#: Webservices.xml:391
#, no-c-format
msgid "See the Seam security chapter on how to write an authentication routine."
msgstr "Si veda il capitolo sulla sicurezza di Seam per sapere come scrivere la routine di autenticazione."

#. Tag: para
#: Webservices.xml:395
#, no-c-format
msgid "After successful authentication, authorization rules with the common <literal>@Restrict</literal> and <literal>@PermissionCheck</literal> annotations are in effect. You can also access the client <literal>Identity</literal>, work with permission mapping, and so on. All regular Seam security features for authorization are available."
msgstr "Dopo che l'autenticazione ha avuto successo, hanno effetto le regole di autorizzazione con le annotazioni <literal>@Restrict</literal> e <literal>@PermissionCheck</literal>. Si può anche accedere <literal>Identity</literal> del client, lavorare con la mappatura dei permessi, e così via. Sono disponibili tutte le caratteristiche di sicurezza di Seam per l'autorizzazione."

#. Tag: title
#: Webservices.xml:405
#, no-c-format
msgid "Mapping exceptions to HTTP responses"
msgstr "Mappare eccezioni e risposte HTTP"

# VERIFICARE ultima frase
#. Tag: para
#: Webservices.xml:407
#, no-c-format
msgid "Section 3.3.4 of the JAX-RS specification defines how checked or unchecked exceptions are handled by the JAX RS implementation. In addition to using an exception mapping provider as defined by JAX-RS, the integration of RESTEasy with Seam allows you to map exceptions to HTTP response codes within Seam's <literal>pages.xml</literal> facility. If you are already using <literal>pages.xml</literal> declarations, this is easier to maintain than potentially many JAX RS exception mapper classes."
msgstr "La sezione 3.3.4 delle specifiche JAX-RS definisce come le eccezioni di tipo checked o unchecked debbano essere trattate dall'implementazione JAX-RS. Oltre all'utilizzo di un provider della mappatura delle eccezioni come definito dalle JAX-RS, l'integrazione di RESTEasy con Seam permette di mappare le eccezioni con i codici di risposta HTTP all'interno del file <literal>pages.xml</literal> di Seam. Se si stanno già utilizzando dichiarazioni di <literal>pages.xml</literal>, ciò è più semplice da manutenetere delle numerose potenziali classi JAX RS di mappatura delle eccezioni."

# VERIFICARE: not - as some Seam examples might show - a request URI pattern that doesn't cover your REST request paths
#. Tag: para
#: Webservices.xml:415
#, no-c-format
msgid "Exception handling within Seam requires that the Seam filter is executed for your HTTP request. Ensure that you do filter <emphasis>all</emphasis> requests in your <literal>web.xml</literal>, not - as some Seam examples might show - a request URI pattern that doesn't cover your REST request paths. The following example intercepts <emphasis>all</emphasis> HTTP requests and enables Seam exception handling:"
msgstr "In Seam la gestione delle eccezioni richiede che il filtro di Seam intercetti le richieste HTTP. Assicuratevi di filtrare <emphasis>tutte</emphasis> le richieste nel file <literal>web.xml</literal>, e non - come mostrato in alcuni esempi di Seam - quelle corrispondenti ad URI di richiesta che non coprono i percorsi delle richieste REST. L'esempio seguente intercetta <emphasis>tutte</emphasis> le richieste HTTP e abilita la gestione delle eccezioni di Seam:"

#. Tag: programlisting
#: Webservices.xml:422
#, no-c-format
msgid ""
"<![CDATA[<filter>\n"
"    <filter-name>Seam Filter</filter-name>\n"
"    <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>\n"
"</filter>\n"
"\n"
"<filter-mapping>\n"
"    <filter-name>Seam Filter</filter-name>\n"
"    <url-pattern>/*</url-pattern>\n"
"</filter-mapping>]]>"
msgstr ""
"<![CDATA[<filter>\n"
"    <filter-name>Seam Filter</filter-name>\n"
"    <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>\n"
"</filter>\n"
"\n"
"<filter-mapping>\n"
"    <filter-name>Seam Filter</filter-name>\n"
"    <url-pattern>/*</url-pattern>\n"
"</filter-mapping>]]>"

#. Tag: para
#: Webservices.xml:424
#, no-c-format
msgid "To convert the unchecked <literal>UnsupportedOperationException</literal> thrown by your resource methods to a <literal>501 Not Implemented</literal> HTTP status response, add the following to your <literal>pages.xml</literal> descriptor:"
msgstr "Per convertire l'eccezione unchecked <literal>UnsupportedOperationException</literal> lanciata dai metodi delle risorse nel codice di riposta HTTP <literal>501 Not Implemented</literal> , occorre aggiungere ciò che segue al descrittore <literal>pages.xml</literal>:"

#. Tag: programlisting
#: Webservices.xml:430
#, no-c-format
msgid ""
"<![CDATA[<exception class=\"java.lang.UnsupportedOperationException\">\n"
"    <http-error error-code=\"501\">\n"
"        <message>The requested operation is not supported</message>\n"
"    </http-error>\n"
"</exception>]]>"
msgstr ""
"<![CDATA[<exception class=\"java.lang.UnsupportedOperationException\">\n"
"    <http-error error-code=\"501\">\n"
"        <message>The requested operation is not supported</message>\n"
"    </http-error>\n"
"</exception>]]>"

#. Tag: para
#: Webservices.xml:432
#, no-c-format
msgid "Custom or checked exceptions are handled the same:"
msgstr "Le eccezioni di tipo custom e di tipo checked sono gestite allo stesso modo:"

#. Tag: programlisting
#: Webservices.xml:436
#, no-c-format
msgid ""
"<![CDATA[<exception class=\"my.CustomException\" log=\"false\">\n"
"    <http-error error-code=\"503\">\n"
"        <message>Service not available: #{org.jboss.seam.handledException.message}</message>\n"
"    </http-error>\n"
"</exception>]]>"
msgstr ""
"<![CDATA[<exception class=\"my.CustomException\" log=\"false\">\n"
"    <http-error error-code=\"503\">\n"
"        <message>Service not available: #{org.jboss.seam.handledException.message}</message>\n"
"    </http-error>\n"
"</exception>]]>"

#. Tag: para
#: Webservices.xml:438
#, no-c-format
msgid "You do not have to send an HTTP error to the client if an exception occurs. Seam allows you to map the exception as a redirect to a view of your Seam application. As this feature is typically used for human clients (web browsers) and not for REST API remote clients, you should pay extra attention to conflicting exception mappings in <literal>pages.xml</literal>."
msgstr "Se si verifica un'eccezione, non è necessario inviare al client un codice di errore HTTP. Seam permette di mappare l'eccezione con la redirezione ad una vista dell'applicazione Seam . Poichè questa caratteristica è tipicamente usata per i client umani (browser web) e non per i client remoti dell'API REST, occorre prestare un'attenzione particolare a mappature di eccezioni in conflitto fra loro in <literal>pages.xml</literal>."

#. Tag: para
#: Webservices.xml:445
#, no-c-format
msgid "Note that the HTTP response still passes through the servlet container, so an additional mapping might apply if you have <literal>&lt;error-page&gt;</literal> mappings in your <literal>web.xml</literal> configuration. The HTTP status code would then be mapped to a rendered HTML error page with status <literal>200 OK</literal>!"
msgstr "Si noti che la risposta HTTP continua a passare attraverso il servlet container, così che è possibile apportare una mappatura aggiuntiva se nel file <literal>web.xml</literal> vi sono delle mappature <literal>&lt;error-page&gt;</literal>. Il codice di risposta HHTP sarebbe in questo caso mappato con una pagina HTML di errore con codice <literal>200 OK</literal>!"

#. Tag: title
#: Webservices.xml:454
#, no-c-format
msgid "Testing resources and providers"
msgstr "Test delle risorse e dei provider"

#. Tag: para
#: Webservices.xml:456
#, no-c-format
msgid "Seam includes a unit testing utility class that helps you create unit tests for a RESTful architecture. Extend the <literal>SeamTest</literal> class as usual and use the <literal>ResourceRequestEnvironment.ResourceRequest</literal> to emulate HTTP requests/response cycles:"
msgstr "Seam include una classe d'utilità che agevola la creazione di test d'unità per un architettura RESTful. Si estenda la classe <literal>SeamTest</literal> come al solito e si usi <literal>ResourceRequestEnvironment.ResourceRequest</literal> per emulare i cicli richiesta/risposta HTTP:"

#. Tag: programlisting
#: Webservices.xml:462
#, no-c-format
msgid ""
"<![CDATA[import org.jboss.seam.mock.ResourceRequestEnvironment;\n"
"import org.jboss.seam.mock.EnhancedMockHttpServletRequest;\n"
"import org.jboss.seam.mock.EnhancedMockHttpServletResponse;\n"
"import static org.jboss.seam.mock.ResourceRequestEnvironment.ResourceRequest;\n"
"import static org.jboss.seam.mock.ResourceRequestEnvironment.Method;\n"
"\n"
"public class MyTest extends SeamTest {\n"
"\n"
"   ResourceRequestEnvironment sharedEnvironment;\n"
"\n"
"   @BeforeClass\n"
"   public void prepareSharedEnvironment() throws Exception {\n"
"       sharedEnvironment = new ResourceRequestEnvironment(this) {\n"
"            @Override\n"
"            public Map<String, Object> getDefaultHeaders() {\n"
"               return new HashMap<String, Object>() {{\n"
"                   put(\"Accept\", \"text/plain\");\n"
"               }};\n"
"            }\n"
"         };\n"
"   }\n"
"\n"
"   @Test\n"
"   public void test() throws Exception\n"
"   {\n"
"      //Not shared: new ResourceRequest(new ResourceRequestEnvironment(this), Method.GET, \"/my/relative/uri)\n"
"\n"
"      new ResourceRequest(sharedEnvironment, Method.GET, \"/my/relative/uri)\n"
"      {\n"
"         @Override\n"
"         protected void prepareRequest(EnhancedMockHttpServletRequest request)\n"
"         {\n"
"            request.addQueryParameter(\"foo\", \"123\");\n"
"            request.addHeader(\"Accept-Language\", \"en_US, de\");\n"
"         }\n"
"\n"
"         @Override\n"
"         protected void onResponse(EnhancedMockHttpServletResponse response)\n"
"         {\n"
"            assert response.getStatus() == 200;\n"
"            assert response.getContentAsString().equals(\"foobar\");\n"
"         }\n"
"\n"
"      }.run();\n"
"   }\n"
"}]]>"
msgstr ""
"<![CDATA[import org.jboss.seam.mock.ResourceRequestEnvironment;\n"
"import org.jboss.seam.mock.EnhancedMockHttpServletRequest;\n"
"import org.jboss.seam.mock.EnhancedMockHttpServletResponse;\n"
"import static org.jboss.seam.mock.ResourceRequestEnvironment.ResourceRequest;\n"
"import static org.jboss.seam.mock.ResourceRequestEnvironment.Method;\n"
"\n"
"public class MyTest extends SeamTest {\n"
"\n"
"   ResourceRequestEnvironment sharedEnvironment;\n"
"\n"
"   @BeforeClass\n"
"   public void prepareSharedEnvironment() throws Exception {\n"
"       sharedEnvironment = new ResourceRequestEnvironment(this) {\n"
"            @Override\n"
"            public Map<String, Object> getDefaultHeaders() {\n"
"               return new HashMap<String, Object>() {{\n"
"                   put(\"Accept\", \"text/plain\");\n"
"               }};\n"
"            }\n"
"         };\n"
"   }\n"
"\n"
"   @Test\n"
"   public void test() throws Exception\n"
"   {\n"
"      //Not shared: new ResourceRequest(new ResourceRequestEnvironment(this), Method.GET, \"/my/relative/uri)\n"
"\n"
"      new ResourceRequest(sharedEnvironment, Method.GET, \"/my/relative/uri)\n"
"      {\n"
"         @Override\n"
"         protected void prepareRequest(EnhancedMockHttpServletRequest request)\n"
"         {\n"
"            request.addQueryParameter(\"foo\", \"123\");\n"
"            request.addHeader(\"Accept-Language\", \"en_US, de\");\n"
"         }\n"
"\n"
"         @Override\n"
"         protected void onResponse(EnhancedMockHttpServletResponse response)\n"
"         {\n"
"            assert response.getStatus() == 200;\n"
"            assert response.getContentAsString().equals(\"foobar\");\n"
"         }\n"
"\n"
"      }.run();\n"
"   }\n"
"}]]>"

#. Tag: para
#: Webservices.xml:464
#, no-c-format
msgid "This test only executes local calls, it does not communicate with the <literal>SeamResourceServlet</literal> through TCP. The mock request is passed through the Seam servlet and filters and the response is then available for test assertions. Overriding the <literal>getDefaultHeaders()</literal> method in a shared instance of <literal>ResourceRequestEnvironment</literal> allows you to set request headers for every test method in the test class."
msgstr "Questo test esegue soltanto chiamate locali, non comunica con <literal>SeamResourceServlet</literal> attraverso TCP. La richiesta mock viene passata attraverso il servlet ed i filtri Seam e la risposta è poi disponibile per asserzioni di test. L'override del metodo <literal>getDefaultHeaders()</literal> in un'istanza condivisa di <literal>ResourceRequestEnvironment</literal> consente di impostare gli header di richiesta per ogni metodo di test nella classe di test."

#. Tag: para
#: Webservices.xml:472
#, no-c-format
msgid "Note that a <literal>ResourceRequest</literal> has to be executed in a <literal>@Test</literal> method or in a <literal>@BeforeMethod</literal> callback. You can not execute it in any other callback, such as <literal>@BeforeClass</literal>."
msgstr "Si noti che <literal>ResourceRequest</literal> deve essere eseguita in un metodo <literal>@Test</literal> o in una callback <literal>@BeforeMethod</literal>. Si può, ma non si dovrebbe eseguirla in altre callback, come <literal>@BeforeClass</literal>."

#~ msgid ""
#~ "Provider classes can also be Seam components, only <literal>APPLICATION</"
#~ "literal>-scoped provider components are supported. You can annotate the "
#~ "bean interface or implementation with JAX-RS annotations. EJB Seam "
#~ "components as providers are currently <emphasis>NOT</emphasis> supported, "
#~ "only POJOs!"
#~ msgstr ""
#~ "Le classi del provider possono essere componenti Seam, vengono supportati "
#~ "solo i componenti provider con scope <literal>APPLICATION</literal>. Si "
#~ "può annotare l'interfaccia bean o l'implementazione con le annotazioni "
#~ "JAX-RS. I componenti EJB Seam come provider <emphasis>NON</emphasis> sono "
#~ "attualmente supportati, solo i POJO!"

