95-733 Internet Technologies - PowerPoint PPT Presentation

About This Presentation
Title:

95-733 Internet Technologies

Description:

Augments the standard DTD by providing type conversion !ELEMENT notional (#PCDATA) ... this attribute (in the XML document) should be treated as an int ... – PowerPoint PPT presentation

Number of Views:58
Avg rating:3.0/5.0
Slides: 41
Provided by: mm77
Category:

less

Transcript and Presenter's Notes

Title: 95-733 Internet Technologies


1
95-733 Internet Technologies
  • JAXB Java API for XML Binding
  • JavaMail

2
JAXB
  • The Java Architecture for XML Binding
  • Notes taken from the JAXB Users Guide from Sun
    Microsystems

3
JAXB
  • Like SAX and DOM in that the application
    developer does not have to parse the XML
  • Unlike SAX and DOM it is tied to a particular
    document schema
  • Fast like SAX
  • In memory representation like DOM but without all
    the general tree manipulation facilities

4
JAXB
  • An XML Document is an instance of a schema
  • A Java object is an instance of a class
  • JAXB reads a schema and produces a class
  • Currently, the only schema supported is the
    Document Type Definition (DTD)

5
JAXB
  • Augments the standard DTD by providing type
    conversion
  • lt!ELEMENT notional (PCDATA)gt
  • ltnotionalgt100.00lt/notionalgt
  • With JAXB we can make sure that Java converts
    this to a BigDecimal automatically

6
The Binding Schema
  • JAXB requires that we use a DTD AND a Binding
    Schema
  • The Binding Schema is an XML document

JAXB
.java file(s)
DTD
Binding Schema
javac
javac
.class files
7
The Binding Schema
  • The binding schema contains instructions on how
    to bind a schema to classes.
  • It might say that
  • this attribute (in the XML document) should be
    treated as an int
  • this elements content is a BigDecimal
  • this elements content is a String
  • this element should be treated as a class
  • and so on

8
Running JAXB
C\McCarthy\www\95-733\examples\jaxbgtjava -jar
D\jaxb\jaxb-1.0-ea\lib\jaxb-xjc-1.0-ea.jar
-help Usage xjc ltschemagt ltbinding-schemagt
-d ltdirectorygt -roots
ltelement-listgt Options -d ltdirectorygt
Specify the destination directory for the
Java output
-roots ltelement-listgt Designate one or more root
elements
(comma separated) -version
Print the compiler's version number and exit
-help Print this
message and exit
9
Book.xml
  • lt?xml version"1.0" encoding"UTF-8"
    standalone"no"?gt
  • lt!DOCTYPE book SYSTEM "book.dtd"gt
  • ltbookgt
  • lttitlegtThe Catcher in the Rye lt/titlegt
  • ltauthorgtJ.D. Salinger lt/authorgt
  • ltchaptergtIf you really want to hear about
    it... lt/chaptergt
  • lt/bookgt

10
Book.dtd
lt!ELEMENT book (title,author, chapter)gt lt!ELEMENT
title (PCDATA)gt lt!ELEMENT author
(PCDATA)gt lt!ELEMENT chapter (PCDATA)gt
11
A minimal binding schema Book.xjc
ltxml-java-binding-schemagt ltelement name
"book" type "class" root "true"
/gt lt/xml-java-binding-schemagt
12
Run JAXB
C\McCarthy\www\95-733\examples\jaxbgtjava -jar
D\jaxb\jaxb-1.0-ea\lib\jaxb-xjc-1.0-ea.jar
book0.dtd book.xjc .\Book.java C\McCarthy\www\9
5-733\examples\jaxbgt
13
Resulting Book.java file
  • import java.io.IOException
  • import java.io.InputStream
  • import javax.xml.bind.ConversionException
  • import javax.xml.bind.Dispatcher
  • import javax.xml.bind.InvalidAttributeException
  • import javax.xml.bind.LocalValidationException
  • import javax.xml.bind.MarshallableRootElement
  • import javax.xml.bind.Marshaller
  • import javax.xml.bind.MissingContentException
  • import javax.xml.bind.RootElement
  • import javax.xml.bind.StructureValidationException
  • import javax.xml.bind.UnmarshalException
  • import javax.xml.bind.Unmarshaller
  • import javax.xml.bind.Validator
  • import javax.xml.marshal.XMLScanner
  • import javax.xml.marshal.XMLWriter

14
public class Book extends
MarshallableRootElement implements
RootElement private String _Title
private String _Author private String
_Chapter public String getTitle()
return _Title public void
setTitle(String _Title) this._Title
_Title if (_Title null)
invalidate()
15
public String getAuthor() return
_Author public void setAuthor(String
_Author) this._Author _Author
if (_Author null)
invalidate() public String
getChapter() return _Chapter
public void setChapter(String _Chapter)
this._Chapter _Chapter if (_Chapter
null) invalidate()

16
public void validateThis() throws
LocalValidationException if (_Title
null) throw new
MissingContentException("title")
if (_Author null) throw new
MissingContentException("author")
if (_Chapter null) throw new
MissingContentException("chapter")
public void validate(Validator v)
throws StructureValidationException

17
public void marshal(Marshaller m) throws
IOException XMLWriter w
m.writer() w.start("book")
w.leaf("title", _Title.toString())
w.leaf("author", _Author.toString())
w.leaf("chapter", _Chapter.toString())
w.end("book") public void
unmarshal(Unmarshaller u) throws
UnmarshalException XMLScanner xs
u.scanner() Validator v
u.validator() xs.takeStart("book")
while (xs.atAttribute()) String
an xs.takeAttributeName() throw
new InvalidAttributeException(an)
18
if (xs.atStart("title"))
xs.takeStart("title") String s
if (xs.atChars(XMLScanner.WS_COLLAPSE))
s xs.takeChars(XMLScanner.WS_COLL
APSE) else s
"" try
_Title String.valueOf(s) catch
(Exception x) throw new
ConversionException("title", x)
xs.takeEnd("title")
if (xs.atStart("author"))
xs.takeStart("author") String s
if (xs.atChars(XMLScanner.WS_COLLAPSE))
s xs.takeChars(XMLScanner.WS_C
OLLAPSE) else s
""
19
try _Author
String.valueOf(s) catch (Exception
x) throw new ConversionException
("author", x)
xs.takeEnd("author") if
(xs.atStart("chapter"))
xs.takeStart("chapter") String s
if (xs.atChars(XMLScanner.WS_COLLAPSE))
s xs.takeChars(XMLScanner.WS_C
OLLAPSE) else s
"" try
_Chapter String.valueOf(s)
catch (Exception x) throw new
ConversionException("chapter", x)
xs.takeEnd("chapter")
20
xs.takeEnd("book") public static Book
unmarshal(InputStream in) throws
UnmarshalException return
unmarshal(XMLScanner.open(in)) public
static Book unmarshal(XMLScanner xs)
throws UnmarshalException return
unmarshal(xs, newDispatcher()) public
static Book unmarshal(XMLScanner xs, Dispatcher
d) throws UnmarshalException
return ((Book) d.unmarshal(xs, (Book.class)))

21
public boolean equals(Object ob) if
(this ob) return true
if (!(ob instanceof Book))
return false Book tob
((Book) ob) if (_Title! null)
if (tob._Title null)
return false if
(!_Title.equals(tob._Title))
return false else
if (tob._Title! null)
return false
22
if (_Author! null) if (tob._Author
null) return false
if (!_Author.equals(tob._Author))
return false
else if (tob._Author! null)
return false
if (_Chapter! null)
if (tob._Chapter null)
return false if
(!_Chapter.equals(tob._Chapter))
return false
23
else if (tob._Chapter! null)
return false
return true public int
hashCode() int h 0 h ((127
h)((_Title! null)?_Title.hashCode() 0))
h ((127 h)((_Author! null)?_Author.hashCod
e() 0)) h ((127 h)((_Chapter!
null)?_Chapter.hashCode() 0)) return
h
24
public String toString() StringBuffer
sb new StringBuffer("ltltbook") if
(_Title! null) sb.append("
title") sb.append(_Title.toString())
if (_Author! null)
sb.append(" author")
sb.append(_Author.toString())
if (_Chapter! null) sb.append("
chapter") sb.append(_Chapter.toStrin
g()) sb.append("gtgt")
return sb.toString()
25
public static Dispatcher newDispatcher()
Dispatcher d new Dispatcher()
d.register("book", (Book.class))
d.freezeElementNameMap() return d

26
A Driver Program
// demo JAXB import java.io. public class
TestJaxb public static void main(String
args) throws
java.io.FileNotFoundException,
javax.xml.bind.UnmarshalException,
java.io.IOException
DataInputStream in new
DataInputStream( new
BufferedInputStream(
new FileInputStream(args0)))
DataOutputStream out new
DataOutputStream( new
FileOutputStream(args1))
27
// read in the book
Book catcher Book.unmarshal(in)
// change its title
catcher.setTitle("Gone With The Wind")
// write out the book
catcher.marshal(out)
28
Compile and Run
C\McCarthy\www\95-733\examples\jaxbgtjavac
Book.java C\McCarthy\www\95-733\examples\jaxbgtja
vac TestJaxb.java C\McCarthy\www\95-733\examples
\jaxbgtjava TestJaxb
book.xml
out.xml
29
Out.xml
lt?xml version"1.0" encoding"UTF-8"?gt ltbookgt
lttitlegtGone With The Windlt/titlegt ltauthorgtJ.D.
Salingerlt/authorgt ltchaptergtIf you really want
to hear about it...lt/chaptergtlt/bookgt
30
Writing Simple Email Clients in Java
  • Email Using Sockets
  • Email using the JavaMail API

31
Email Using Sockets (Linden Chapter 17)
// See page 571 of Linden's Just Java Fifth
Edition import java.io. import
java.net. public class SimpleEmailClient
public static void main(String args) throws
IOException Socket sock
DataInputStream dis PrintStream ps
32
// open a socket to an email server on port
25 sock new Socket("cyrus.andrew.cmu.edu",2
5) dis new DataInputStream(sock.getInputS
tream()) ps new PrintStream(sock.getOutput
Stream()) // talk email
ps.println("mail from mm6_at_andrew.cmu.edu")
System.out.println(dis.readLine()) String
Addressee "mm6_at_andrew.cmu.edu"
ps.println("rcpt to " Addressee)
System.out.println(dis.readLine())
33
ps.println("data") System.out.println(d
is.readLine()) ps.println("A message sent
by a Java client using sockets")
ps.println(".") System.out.println(dis.read
Line()) ps.flush() sock.close()

34
Output Echos from Cyrus
D\McCarthy\www\95-713\JavaMailgtjava
SimpleEmailClient 220-mail-fe2.andrew.cmu.edu
ESMTP Sendmail 8.12.3.Beta2/8.12.3. Beta2 220-Mis-
identifing the sender of mail is an abuse of
computing facilites. 220 ESMTP spoken here 250
2.1.0 mm6_at_andrew.cmu.edu... Sender ok
35
Using JavaMail
// A simple example using JavaMail import
java.io. import java.net.InetAddress import
java.util.Properties import java.util.Date impo
rt javax.mail. import javax.mail.internet. pu
blic class Mailer String to, from,
msg
36
public Mailer(String to, String from, String msg)
this.to to
this.from from this.msg msg
public void send()
Session s createSession() try
Message mess createMessage(s, msg)
Transport.send(mess)
catch(MessagingException e) System.out.printl
n("Messaging Exception "e)
37
catch(Exception e )
System.out.println("Exception thrown"
e) private Session
createSession() Properties p
System.getProperties() p.setProperty("mail.trans
port.protocol", "smtp") p.setProperty("mail.smtp
.host","cyrus.andrew.cmu.edu") Session sess
Session.getDefaultInstance(p) return sess

38
private Message createMessage(Session sess,
String msg)throws
MessagingException Message
mess new MimeMessage(sess) mess.setFrom(new
InternetAddress(from))
mess.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(to, false)) mess.setSubj
ect("Warning") mess.setText(msg) mess.setSen
tDate(new Date()) return mess
39
public static void main(String a)
Mailer mailman new
Mailer("mm6_at_andrew.cmu.edu",
"mccarthy_at_cs.pitt.edu",
"It's hot") mailman.send()

40
JavaMail Installation Instructions
Visit http//java.sun.com/products/javamail
  • Download the JavaMail API Implementation Version
    1.3ea
  • Download the JavaBeans Activation Framework
    1.0.2ea
  • Unzip both files.
  • Add the following files to your classpath
  • mail.jar (JavaMail)
  • activation.jar (JAF file)
Write a Comment
User Comments (0)
About PowerShow.com