Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente | Dernière révision Les deux révisions suivantes | ||
enseignement:sw:projet:2012 [2012/12/14 17:07] ecoquery [Mise à jour] |
enseignement:sw:projet:2012 [2012/12/21 16:11] ecoquery [smix-camel] |
||
---|---|---|---|
Ligne 216: | Ligne 216: | ||
<bean id=" | <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 ==== |