<request> <name>pdf</name> <paramter>300dpi</paramter> </request>
Nasz klasa RequestCreator wygląda tak:
package com.itsilesia.jmsexample;
import java.io.StringReader;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.mule.api.MuleEventContext;
import org.mule.api.MuleMessage;
import org.mule.api.lifecycle.Callable;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
/**
* @author lipka
*
*/
public class RequestCreator implements Callable {
public Object onCall(MuleEventContext context) throws Exception {
MuleMessage message = context.getMessage();
String xmlFile = message.getPayloadAsString();
try {
DocumentBuilder documnetBuilder = DocumentBuilderFactory
.newInstance().newDocumentBuilder();
Document document = documnetBuilder.parse(new InputSource(
new StringReader(xmlFile)));
document.getDocumentElement().normalize();
NodeList list = document.getElementsByTagName("request");
for (int i = 0; i < list.getLength(); i++) {
Node request = list.item(i);
if (request.getNodeType() == Node.ELEMENT_NODE) {
Element requestElement = (Element) request;
NodeList nameList = requestElement
.getElementsByTagName("name");
Element nameElement = (Element) nameList.item(0);
NodeList textNameList = nameElement.getChildNodes();
String name = ((Node) textNameList.item(0)).getNodeValue().trim();
p(name);
NodeList paramterList = requestElement
.getElementsByTagName("paramter");
Element paramterElement = (Element) paramterList.item(0);
NodeList textParamterList = paramterElement.getChildNodes();
String parameters = ((Node) textParamterList.item(0)).getNodeValue().trim();
p(parameters);
if(name.equals("pdf")){
PdfRequest pdfRequest = new PdfRequest();
pdfRequest.setParamters(parameters);
return pdfRequest;
}
if(name.equals("color")){
ColorProofingRequest colorProofingRequest = new ColorProofingRequest();
colorProofingRequest.setParamters(parameters);
return colorProofingRequest;
}
}
}
} catch (Exception e2) {
p("exception");
e2.printStackTrace();
}
return false;
}
void p(String string) {
System.out.println(string);
}
}
Więc mamy klasę która pobiera PayloadAsString czyli przerabia nasz plik xml w String potem jest parsowany i w zależności od nazwy tworzymy klasę PdfRequest albo ColorProofingRequest. Oby dwie klasy wyglądają identycznie, jedna dla przykładu:
package com.itsilesia.jmsexample;
import java.io.Serializable;
/**
* @author lipka
*
*/
public class PdfRequest implements Serializable{
private String paramters;
/**
* @return the paramters
*/
public String getParamters() {
return paramters;
}
/**
* @param paramters the paramters to set
*/
public void setParamters(String paramters) {
this.paramters = paramters;
}
}
Teraz pozostaje nam podłączyć JMS do mule, musimy dodać więc kolejną linie do naszego pliku konfiguracyjnego:
<jms:activemq-connector name="jmsCon" brokerURL="tcp://localhost:61616" />
później trzeba zdefiniować transformacje, żeby stworzony przez nasz obiekt wsadzić do JMS:
<jms:object-to-jmsmessage-transformer name="ObjectToJMS" />
teraz pozostaje nam jeszcze w zależności od zwróconego przez RequestCreator klasy wrzucić dany obiekt do odpowiedniej kolejki, a w przypadku gdy żaden obiekt nie będzie pasował wrzucamy go do kolejki request.invalid, więc tak wygląda obsługa wrzucenie czegoś do kolejki:
<forwarding-catch-all-strategy>
<jms:outbound-endpoint queue="request.invalid" />
</forwarding-catch-all-strategy>
<filtering-router>
<jms:outbound-endpoint queue="request.pdf" transformer-refs="ObjectToJMS"/>
<payload-type-filter expectedType="com.itsilesia.jmsexample.PdfRequest"/>
</filtering-router>
<filtering-router>
<jms:outbound-endpoint
queue="request.colorproofing" transformer-refs="ObjectToJMS" />
<payload-type-filter expectedType="com.itsilesia.jmsexample.ColorProofingRequest"/>
</filtering-router>
a cały plik konfiguracyjny wygląda tak:
Uruchamiamy jconsole, żeby śledzić co się dzieje w Active MQ
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns="http://www.mulesource.org/schema/mule/core/2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:stdio="http://www.mulesource.org/schema/mule/stdio/2.0"
xmlns:file="http://www.mulesource.org/schema/mule/file/2.0"
xmlns:xm="http://www.mulesource.org/schema/mule/xml/2.0"
xmlns:ftp="http://www.mulesource.org/schema/mule/ftp/2.0"
xmlns:jms="http://www.mulesource.org/schema/mule/jms/2.0"
xsi:schemaLocation="http://www.mulesource.org/schema/mule/core/2.0
http://www.mulesource.org/schema/mule/core/2.0/mule.xsd
http://www.mulesource.org/schema/mule/stdio/2.0
http://www.mulesource.org/schema/mule/stdio/2.0/mule-stdio.xsd
http://www.mulesource.org/schema/mule/file/2.0
http://www.mulesource.org/schema/mule/file/2.0/mule-file.xsd
http://www.mulesource.org/schema/mule/xml/2.0
http://www.mulesource.org/schema/mule/xml/2.0/mule-xml.xsd
http://www.mulesource.org/schema/mule/ftp/2.0
http://www.mulesource.org/schema/mule/ftp/2.0/mule-ftp.xsd
http://www.mulesource.org/schema/mule/jms/2.0 http://www.mulesource.org/schema/mule/jms/2.0/mule-jms.xsd">
<description>JMS connector</description>
<jms:activemq-connector name="jmsCon"
brokerURL="tcp://localhost:61616" />
<jms:object-to-jmsmessage-transformer name="ObjectToJMS" />
<model>
<service name="jmsService">
<inbound>
<ftp:inbound-endpoint user="lipka" password="****"
host="localhost" port="21" path="/Users/lipka/in"
pollingFrequency="10000">
<file:filename-wildcard-filter pattern="*.xml" />
</ftp:inbound-endpoint>
</inbound>
<component class="com.itsilesia.jmsexample.RequestCreator" />
<outbound>
<forwarding-catch-all-strategy>
<jms:outbound-endpoint queue="request.invalid" />
</forwarding-catch-all-strategy>
<filtering-router>
<jms:outbound-endpoint queue="request.pdf" transformer-refs="ObjectToJMS"/>
<payload-type-filter expectedType="com.itsilesia.jmsexample.PdfRequest"/>
</filtering-router>
<filtering-router>
<jms:outbound-endpoint
queue="request.colorproofing" transformer-refs="ObjectToJMS" />
<payload-type-filter expectedType="com.itsilesia.jmsexample.ColorProofingRequest"/>
</filtering-router>
</outbound>
</service>
</model>
</mule>
lukasz-lipkas-computer:~/Documents/workspace/JMSRequest lipka$ mule -config conf/jmsticket-config.xml
Jak widać nasz request zostały umieszczone w kolejkach:) Więc w następnym wpisie trzeba będzie je pobrać i na przykład przekazać jako parametry do jakiegoś programu, chyba, że ktoś ma jakiś inny pomysł:)każdy pomysł mile widziany:)
Brak komentarzy:
Prześlij komentarz