Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
enseignement:sw:projet:2012 [2012/12/14 17:04]
ecoquery [smix-camel]
enseignement:sw:projet:2012 [2012/12/21 16:13] (Version actuelle)
ecoquery [Mise à jour]
Ligne 4: Ligne 4:
  
 ===== Mise à jour ===== ===== Mise à jour =====
-  * 2012-12-14: Nouvelle version de vysper-run (serveur jabber) [[http://liris.cnrs.fr/~ecoquery/files/vysper-run-2012.1-jar-with-dependencies.jar|disponible ici]]. Cette version ajoute automatiquement rapidodvd@localhost comme contact de tous les autres utilisateurs et réciproquement. Requis pour une bonne communication entre les utilisateurs (en particulier pour la réception des messages à destination de //RapidoDVD// via servicemix).+  * 2012-12-21: Exemple de code pour le bean transformation + routage dans la section [[#smix-camel|camel]]. 
 +  * 2012-12-14:  
 +    * Nouvelle version de vysper-run (serveur jabber) [[http://liris.cnrs.fr/~ecoquery/files/vysper-run-2012.1-jar-with-dependencies.jar|disponible ici]]. Cette version ajoute automatiquement rapidodvd@localhost comme contact de tous les autres utilisateurs et réciproquement. Requis pour une bonne communication entre les utilisateurs (en particulier pour la réception des messages à destination de //RapidoDVD// via servicemix)
 +    * Mise à jour de la section [[#smix-camel|camel]] sur l'utilisation des beans. Concerne la transformation de message et le routage dynamique.
   * 2012-12-13: Ajout de tips pour l'utilisation de beans dans servicemix: utile pour les transformations de messages et le routage dynamique.   * 2012-12-13: Ajout de tips pour l'utilisation de beans dans servicemix: utile pour les transformations de messages et le routage dynamique.
   * 2012-12-05: projet fourni pour le dispositif de paiement. Archive: {{:enseignement:sw:projet:tiw5-2012-fourni.zip|}}. Voir les détails sur le paiement.   * 2012-12-05: projet fourni pour le dispositif de paiement. Archive: {{:enseignement:sw:projet:tiw5-2012-fourni.zip|}}. Voir les détails sur le paiement.
Ligne 214: Ligne 217:
  <bean id="myRouter" class="tiw5.smix.camel.TestingDynamicRouter" />  <bean id="myRouter" class="tiw5.smix.camel.TestingDynamicRouter" />
  
 +</code></note>
 +
 +<note tip>Nouvelle version qui fait un routage XMPP et extrait le message du XML<code java TestingDynamicRouter.java>
 +package tiw5.smix.camel;
 +
 +import java.io.StringReader;
 +import java.io.StringWriter;
 +import java.util.logging.Logger;
 +
 +import javax.xml.stream.XMLInputFactory;
 +import javax.xml.stream.XMLStreamException;
 +import javax.xml.stream.XMLStreamReader;
 +import javax.xml.transform.Source;
 +import javax.xml.transform.Transformer;
 +import javax.xml.transform.TransformerException;
 +import javax.xml.transform.TransformerFactory;
 +import javax.xml.transform.stream.StreamResult;
 +
 +import org.apache.camel.Exchange;
 +
 +
 +public class TestingDynamicRouter {
 +
 + private static final Logger LOG = Logger
 + .getLogger(TestingDynamicRouter.class.getCanonicalName());
 +
 + private static Transformer copy;
 +
 + static {
 + try {
 + copy = TransformerFactory.newInstance().newTransformer();
 + } catch (Exception e) {
 + e.printStackTrace();
 + copy = null;
 + }
 + }
 +
 + public void changeHeaderRoute(Exchange exchange)
 + throws TransformerException, XMLStreamException {
 + // Copie du body dans une string
 + Source inBody = exchange.getIn().getBody(Source.class);
 + StringWriter sw = new StringWriter();
 + copy.transform(inBody, new StreamResult(sw));
 + // Utilisation d'un XMLStreamReader (API StAX) pour lire le XML depuis
 + // la string
 + // Rmq: le parsing de document pour faire du DOM semble buggé (document
 + //     avec un corps vide)
 + // Rmq: La fabrication directe du XMLStreamReader depuis la Source
 + //     (sans passer par la String intermédiaire) échoue
 + XMLStreamReader reader = XMLInputFactory.newInstance()
 + .createXMLStreamReader(new StringReader(sw.toString()));
 + String txt = null;
 + // Boucle qui cherche un tag appelé "in"
 + while (reader.hasNext()) {
 + int type = reader.next();
 + if (type == XMLStreamReader.START_ELEMENT
 + && "in".equals(reader.getLocalName()))
 + break;
 + }
 + // Utilisation du texte dans le tag "in" pour le message
 + if (reader.hasNext() && XMLStreamReader.CHARACTERS == reader.next()) {
 + txt = reader.getText();
 + }
 + reader.close();
 + // On fait un setBody avec une String pour envoyer à Jabber
 + exchange.getOut().setBody("Message: " + txt);
 + // Headers pour le routage dynamique
 + exchange.getOut().setHeaders(exchange.getIn().getHeaders());
 + String destinataire = "titi@localhost"; // normalement calculé dynamiquement
 + String dest = "log:toxmpp,xmpp://rapidodvd@localhost/" + destinataire
 + + "?password=rapidomdp";
 + exchange.getOut().setHeader("myHeader", dest);
 + LOG.info("Ajout du header 'myHeader' au message "
 + + exchange.getOut().getMessageId() + ": " + dest);
 + }
 +
 +}
 </code></note> </code></note>
 ==== smix-sa ==== ==== smix-sa ====