Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Dernière révision Les deux révisions suivantes | ||
enseignement:sw:projet:2012 [2012/12/14 11:27] ecoquery [Environnement de travail] |
enseignement:sw:projet:2012 [2012/12/21 16:11] ecoquery [smix-camel] |
||
---|---|---|---|
Ligne 4: | Ligne 4: | ||
===== Mise à jour ===== | ===== Mise à jour ===== | ||
+ | * 2012-12-14: | ||
+ | * Nouvelle version de vysper-run (serveur jabber) [[http:// | ||
+ | * Mise à jour de la section [[# | ||
+ | * 2012-12-13: Ajout de tips pour l' | ||
* 2012-12-05: projet fourni pour le dispositif de paiement. Archive: {{: | * 2012-12-05: projet fourni pour le dispositif de paiement. Archive: {{: | ||
* 2012-11-30: ajout de JMS dans l' | * 2012-11-30: ajout de JMS dans l' | ||
Ligne 9: | Ligne 13: | ||
<note important> | <note important> | ||
* 2012-11-29: précisions sur la partie CAHD | * 2012-11-29: précisions sur la partie CAHD | ||
- | |||
===== Introduction ===== | ===== Introduction ===== | ||
Ligne 121: | Ligne 124: | ||
Ce projet défini un processus BPEL qui agit comme un simple proxy vers un service de type HelloService. Les fichiers à étudier sont dans '' | Ce projet défini un processus BPEL qui agit comme un simple proxy vers un service de type HelloService. Les fichiers à étudier sont dans '' | ||
- | <note important> | + | <note important><del> |
==== smix-camel ==== | ==== smix-camel ==== | ||
Ligne 171: | Ligne 174: | ||
< | < | ||
</ | </ | ||
- | <note tip>Pour transformer le format des message le long d'une route Camel (utile pour fabriquer du XML à partir des messages XMPP), il est possible d' | + | <note tip>Pour transformer le format des message le long d'une route Camel (utile pour fabriquer du XML à partir des messages XMPP), il est possible d' |
+ | |||
+ | import java.util.logging.Logger; | ||
+ | |||
+ | import org.apache.camel.Exchange; | ||
+ | |||
+ | public class TestingDynamicRouter { | ||
+ | |||
+ | private static final Logger LOG = Logger | ||
+ | .getLogger(TestingDynamicRouter.class.getCanonicalName()); | ||
+ | |||
+ | private int courant = 0; | ||
+ | |||
+ | public void changeHeaderRoute(Exchange exchange) { | ||
+ | exchange.getOut().setBody(exchange.getIn().getBody()); | ||
+ | exchange.getOut().setHeaders(exchange.getIn().getHeaders()); | ||
+ | String dest = " | ||
+ | courant++; | ||
+ | exchange.getOut().setHeader(" | ||
+ | LOG.info(" | ||
+ | + exchange.getOut().getMessageId() + ": " + dest); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </ | ||
+ | Dans le '' | ||
+ | <code xml> | ||
+ | < | ||
+ | < | ||
+ | uri=" | ||
+ | <to uri=" | ||
+ | <to uri=" | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | <!-- to uri=" | ||
+ | </ | ||
+ | |||
+ | ... | ||
+ | |||
+ | <bean id=" | ||
+ | |||
+ | </ | ||
+ | |||
+ | <note tip> | ||
+ | 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, | ||
+ | // Copie du body dans une string | ||
+ | Source inBody = exchange.getIn().getBody(Source.class); | ||
+ | StringWriter sw = new StringWriter(); | ||
+ | copy.transform(inBody, | ||
+ | // 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é " | ||
+ | while (reader.hasNext()) { | ||
+ | int type = reader.next(); | ||
+ | if (type == XMLStreamReader.START_ELEMENT | ||
+ | && | ||
+ | break; | ||
+ | } | ||
+ | // Utilisation du texte dans le tag " | ||
+ | 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(" | ||
+ | // Headers pour le routage dynamique | ||
+ | exchange.getOut().setHeaders(exchange.getIn().getHeaders()); | ||
+ | String destinataire = " | ||
+ | String dest = " | ||
+ | + "? | ||
+ | exchange.getOut().setHeader(" | ||
+ | LOG.info(" | ||
+ | + exchange.getOut().getMessageId() + ": " + dest); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
==== smix-sa ==== | ==== smix-sa ==== | ||