Professional Documents
Culture Documents
in a Java application
Sean C. Sullivan
sean <at> seansullivan <dot> com
September 2003
Agenda
• XML
• XML via HTTP
• XML via JMS
• XML via JavaMail
• XML via FTP
Agenda
• XML
• XML via HTTP
• XML via JMS
• XML via JavaMail
• XML via FTP
XML
<?xml version=“1.0”>
<company>
<name>Sun Microsystems</name>
<stocksymbol>SUNW</stocksymbol>
</company>
Application integration
Tim Bray, 9/23/2003, news.com interview
Data exchange
Application A Application B
XML request
<?xml version=“1.0”>
<raterequest>
<origin>97210</origin>
<destination>12208</destination>
<weight>35</weight>
<service>OVERNIGHT</service>
</raterequest>
XML response
<?xml version=“1.0”>
<rateresponse>
<rate>68.00</rate>
</rateresponse>
Agenda
• XML
• XML via HTTP
• XML via JMS
• XML via JavaMail
• XML via FTP
HTTP protocol
request
HTTP HTTP
client server
HTTP protocol
request
HTTP HTTP
client server
response
HTTP protocol methods
• GET
• POST
• HEAD
• …
HTTP headers
• Content-Type
• Accept
MIME types for XML
• text/xml
• application/xml
• text/xml-external-parsed-entity
• application/xml-external-parsed-entity
• application/xml-dtd
• application/soap+xml
Jakarta Commons HTTPClient
Example: HTTP POST
import org.apache.commons.httpclient.*;
import
org.apache.commons.httpclient.methods*;
post.setRequestHeader(
“Accept”,
“application/xml”);
HttpClient client = new HttpClient();
int result = client.executeMethod(post);
// …
String strXMLResponse =
post.getResponseBodyAsString();
post.releaseConnection();
Receiving XML using a Servlet
// …
String type = req.getContentType();
int contentLength =
req.getContentLength();
char[] xmlData = new
char[contentLength];
BufferedReader reader =
httpRequest.getReader();
// …
doPost (continued)
do
{
n = reader.read(xmlData, bytesRead,
xmlData.length - bytesRead);
if (n > 0)
{
bytesRead += n;
}
} while ( (n != -1)
&& (bytesRead < contentLength) )
Agenda
• XML
• XML via HTTP
• XML via JMS
• XML via JavaMail
• XML via FTP
Java Message Service
Message Queue
Message Message
3 2 1
Producer Consumer
Sending XML using JMS
import javax.jms.*;
import javax.naming.*;
Queue queue;
ConnectionFactory cf;
MessageProducer producer;
producer = session.createProducer(queue);
TextMessage msg;
msg = session.createTextMessage();
msg.setText(strXML);
producer.send(msg);
session.commit();
Receiving XML via JMS
Choose one:
• javax.jms.MessageConsumer
• Message Driven Bean (MDB)
Example: Message Driven Bean
• XML
• XML via HTTP
• XML via JMS
• XML via JavaMail
• XML via FTP
JavaMail
Example: XML via JavaMail
import javax.mail.*;
import javax.mail.internet.*;
Session sess = /* JNDI lookup */;
MimeMessage msg = new
MimeMessage(sess);
msg.setFrom(from);
// …
Example: XML via JavaMail
// …
msg.setRecipients(
Message.RecipientType.TO,
recipients);
msg.setSubject(“Hello XML”);
// …
Example: XML via JavaMail
// …
MimeBodyPart mbp = new MimeBodyPart();
mbp.setContent(strXML,
“application/xml”);
Multipart mp = new MimeMultipart();
mp.addBodyPart(mbp);
msg.setContent(mp);
Transport.send(msg);
// …
Agenda
• XML
• XML via HTTP
• XML via JMS
• XML via JavaMail
• XML via FTP
FTP with Jakarta Commons Net
Example: XML via FTP
import org.apache.commons.net.ftp.*;
ftp.setFileType(FTP.BINARY_FILE_TYPE);
ftp.enterLocalPassiveMode();
ftp.storeFile(“foo.xml”,
xmlInputStream);
ftp.logout();
ftp.disconnect();
Additional topics…
• Sockets
• SOAP
• XML-RPC
• Binary encodings for XML
Additional resources
• http://www.w3.org/XML/
• http://www.xml.com/
• http://java.sun.com/xml/
• http://xml.apache.org/
• http://ws.apache.org/axis/
• http://jakarta.apache.org/
Summary