cvs commit: jakarta-alexandria/src/java/org/apache/alexandria/doclets XMLDoclet.java
[email protected] 1 Apr 2003 16:35:26 -0000
| Newsgroups | gmane.comp.jakarta.alexandria.devel |
|---|---|
| Message-ID | <[email protected]> |
nicolaken 2003/04/01 08:35:26
Modified: src/java/org/apache/alexandria/doclets XMLDoclet.java
Log:
Convert to use JAXP.
Revision Changes Path
1.4 +72 -56 jakarta-alexandria/src/java/org/apache/alexandria/doclets/XMLDoclet.java
Index: XMLDoclet.java
===================================================================
RCS file: /home/cvs/jakarta-alexandria/src/java/org/apache/alexandria/doclets/XMLDoclet.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- XMLDoclet.java 1 Apr 2003 13:56:43 -0000 1.3
+++ XMLDoclet.java 1 Apr 2003 16:35:26 -0000 1.4
@@ -52,7 +52,9 @@
import java.io.*;
import java.util.*;
import com.sun.javadoc.*;
-import org.apache.xml.serialize.*;
+import javax.xml.transform.*;
+import javax.xml.transform.sax.*;
+import javax.xml.transform.stream.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
@@ -60,6 +62,7 @@
* Main Doclet class to generate JavaDocXML. This doclet generates the
* document conforming to DTD specified in javadoc-v04draft.dtd.
* @author <a href="mailto:[email protected]">Gopinath M.R.</a>
+ * @author <a href="mailto:[email protected]">Nicola Ken Barozzi</a>
*/
public class XMLDoclet extends Doclet {
@@ -67,27 +70,35 @@
private String xmlns = "jvx";
private String encodingFormat="ISO-8859-1";
private String localName = "javadoc";
- private ContentHandler cm = null;
+ private TransformerHandler handler = null;
private String targetFileName="simple.xml";
private Attributes emptyAtts = new AttributesImpl();
public XMLDoclet (RootDoc root) throws Exception {
- FileWriter writer = new FileWriter(targetFileName);
- try {
- OutputFormat format = new OutputFormat();
- format.setEncoding(encodingFormat);
- format.setIndenting(true);
- format.setIndent(4);
- format.setLineWidth(4);
- format.setDoctype("-//APACHE//DTD JavaDoc V0.4//EN", "javadoc-v04draft.dtd");
- XMLSerializer serializer = new XMLSerializer(writer, format);
- cm = serializer.asContentHandler();
- javadocXML(root);
- writer.close();
- } catch (IOException e) {
- writer.close();
- throw e;
- }
+
+ SAXTransformerFactory tFactory = (SAXTransformerFactory) SAXTransformerFactory.newInstance();
+ if (!(tFactory.getFeature(javax.xml.transform.sax.SAXSource.FEATURE) &&
+ tFactory.getFeature(javax.xml.transform.stream.StreamResult.FEATURE))){
+
+ throw new Exception("The supplied TrAX transformer library is inadeguate."+
+ "Please upgrade to the latest version.");
+ }
+
+ File writer = new File(targetFileName);
+ StreamResult result = new StreamResult(writer);
+
+ // SAX2.0 ContentHandler.
+ handler = tFactory.newTransformerHandler();
+
+ Transformer serializer = handler.getTransformer();
+ serializer.setOutputProperty(OutputKeys.ENCODING, encodingFormat);
+ serializer.setOutputProperty(OutputKeys.INDENT , "yes");
+ serializer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC , "-//APACHE//DTD JavaDoc V0.4//EN");
+ serializer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM , "javadoc-v04draft.dtd");
+
+ handler.setResult(result);
+
+ javadocXML(root);
}
/**
@@ -95,7 +106,10 @@
* <xmp><!ELEMENT javadoc (package*, class*, interface*)></xmp>
*/
private void javadocXML(RootDoc root) throws SAXException {
- cm.startElement(xmlns, localName, "javadoc", emptyAtts);
+
+ handler.startDocument();
+
+ handler.startElement(xmlns, localName, "javadoc", emptyAtts);
PackageDoc[] packageArray = root.specifiedPackages();
// Generate for packages.
@@ -120,7 +134,9 @@
ClassDoc interfaceDoc = (ClassDoc)interfaceEnum.nextElement();
interfaceXML(interfaceDoc);
}
- cm.endElement(xmlns, localName, "javadoc");
+ handler.endElement(xmlns, localName, "javadoc");
+
+ handler.endDocument();
}
/**
@@ -132,7 +148,7 @@
private void packageXML(PackageDoc packageDoc) throws SAXException {
AttributesImpl atts = new AttributesImpl();
atts.addAttribute(xmlns, localName, "name", "String", packageDoc.name());
- cm.startElement(xmlns, localName, "package", atts);
+ handler.startElement(xmlns, localName, "package", atts);
// generate Doc element.
docXML(packageDoc);
@@ -163,7 +179,7 @@
interfaceXML(interfaceArray[i]);
}
- cm.endElement(xmlns, localName, "package");
+ handler.endElement(xmlns, localName, "package");
}
/**
@@ -195,7 +211,7 @@
access = "public";
}
atts.addAttribute(xmlns, localName, "access", "String", access);
- cm.startElement(xmlns, localName, "class", atts);
+ handler.startElement(xmlns, localName, "class", atts);
// generate "doc" sub-element
docXML(classDoc);
@@ -230,7 +246,7 @@
innerClassXML(innerClassArray[i]);
}
- cm.endElement(xmlns, localName, "class");
+ handler.endElement(xmlns, localName, "class");
}
/**
@@ -239,9 +255,9 @@
*/
private void extendsXML(ClassDoc classDoc) throws SAXException {
if (classDoc.superclass() != null) {
- cm.startElement(xmlns, localName, "extends_class", emptyAtts);
+ handler.startElement(xmlns, localName, "extends_class", emptyAtts);
createRefXML("classref", classDoc.superclass().qualifiedName());
- cm.endElement(xmlns, localName, "extends_class");
+ handler.endElement(xmlns, localName, "extends_class");
}
}
@@ -277,7 +293,7 @@
atts.addAttribute(xmlns, localName, "anonymous", "String", ""+ anonymous);
atts.addAttribute(xmlns, localName, "final", "String", ""+ "" + classDoc.isFinal());
atts.addAttribute(xmlns, localName, "static", "String", ""+ "" + classDoc.isStatic());
- cm.startElement(xmlns, localName, "innerclass", atts);
+ handler.startElement(xmlns, localName, "innerclass", atts);
// generate "doc" sub-element
docXML(classDoc);
@@ -306,7 +322,7 @@
methodXML(methodArray[i]);
}
- cm.endElement(xmlns, localName,"innerclass");
+ handler.endElement(xmlns, localName,"innerclass");
}
/**
@@ -327,7 +343,7 @@
access = "public";
}
atts.addAttribute(xmlns, localName, "access", "String", access);
- cm.startElement(xmlns, localName, "interface", atts);
+ handler.startElement(xmlns, localName, "interface", atts);
// generate "doc" sub-element
docXML(interfaceDoc);
@@ -347,7 +363,7 @@
methodXML(methodArray[i]);
}
- cm.endElement(xmlns, localName, "interface");
+ handler.endElement(xmlns, localName, "interface");
}
/**
@@ -357,11 +373,11 @@
private void extends_interfaceXML(ClassDoc interfaceDoc) throws SAXException {
ClassDoc[] interfaceArray = interfaceDoc.interfaces();
if (interfaceArray.length > 0) {
- cm.startElement(xmlns, localName, "extends_interface", emptyAtts);
+ handler.startElement(xmlns, localName, "extends_interface", emptyAtts);
for (int i = 0; i < interfaceArray.length; ++i) {
createRefXML("interfaceref", interfaceArray[i].qualifiedName());
}
- cm.endElement(xmlns, localName, "extends_interface");
+ handler.endElement(xmlns, localName, "extends_interface");
}
}
@@ -372,11 +388,11 @@
private void implementsXML(ClassDoc classDoc) throws SAXException {
ClassDoc[] interfaceArray = classDoc.interfaces();
if (interfaceArray.length > 0) {
- cm.startElement(xmlns, localName, "implements", emptyAtts);
+ handler.startElement(xmlns, localName, "implements", emptyAtts);
for (int i = 0; i < interfaceArray.length; ++i) {
createRefXML("interfaceref", interfaceArray[i].qualifiedName());
}
- cm.endElement(xmlns, localName, "implements");
+ handler.endElement(xmlns, localName, "implements");
}
}
@@ -387,7 +403,7 @@
private void throwsXML(ExecutableMemberDoc member) throws SAXException {
ThrowsTag[] tagArray = member.throwsTags();
if(tagArray.length > 0) {
- cm.startElement(xmlns, localName, "throws", emptyAtts);
+ handler.startElement(xmlns, localName, "throws", emptyAtts);
for (int i = 0; i < tagArray.length; ++i) {
ClassDoc exceptionClass = tagArray[i].exception();
String name = null;
@@ -398,7 +414,7 @@
}
createRefXML("classref", name);
}
- cm.endElement(xmlns, localName, "throws");
+ handler.endElement(xmlns, localName, "throws");
}
}
@@ -416,8 +432,8 @@
private void createRefXML(String elementName, String nameValue) throws SAXException {
AttributesImpl atts = new AttributesImpl();
atts.addAttribute(xmlns, localName, "name", "String", nameValue);
- cm.startElement(xmlns, localName, elementName, atts);
- cm.endElement(xmlns, localName, elementName);
+ handler.startElement(xmlns, localName, elementName, atts);
+ handler.endElement(xmlns, localName, elementName);
}
/**
@@ -430,8 +446,8 @@
// primitive data type
AttributesImpl subElmAtts = new AttributesImpl();
subElmAtts.addAttribute(xmlns, localName, "type", "String", qualifiedName);
- cm.startElement(xmlns, localName, "primitive", subElmAtts);
- cm.endElement(xmlns, localName, "primitive");
+ handler.startElement(xmlns, localName, "primitive", subElmAtts);
+ handler.endElement(xmlns, localName, "primitive");
} else if (fieldType.isInterface()) {
// interface
createRefXML("interfaceref", qualifiedName);
@@ -474,7 +490,7 @@
atts.addAttribute(xmlns, localName, "final", "String", "" + field.isFinal());
atts.addAttribute(xmlns, localName, "transient", "String", "" + field.isTransient());
atts.addAttribute(xmlns, localName, "volatile", "String", "" + field.isVolatile());
- cm.startElement(xmlns, localName, "field", atts);
+ handler.startElement(xmlns, localName, "field", atts);
// generate "doc" sub-element
docXML(field);
@@ -482,7 +498,7 @@
// generate "(classref|interfaceref|primitive)" sub-element
createTypeRef(field.type()); // foo , field.qualifiedName());
- cm.endElement(xmlns, localName, "field");
+ handler.endElement(xmlns, localName, "field");
}
/**
@@ -506,7 +522,7 @@
}
atts.addAttribute(xmlns, localName, "access", "String", access);
atts.addAttribute(xmlns, localName, "synthetic", "String", "" + constrDoc.isSynthetic());
- cm.startElement(xmlns, localName, "constructor", atts);
+ handler.startElement(xmlns, localName, "constructor", atts);
// generate "doc" sub-element
docXML(constrDoc);
@@ -520,7 +536,7 @@
// generate "throws" sub-element
throwsXML(constrDoc);
- cm.endElement(xmlns, localName, "constructor");
+ handler.endElement(xmlns, localName, "constructor");
}
/**
@@ -562,7 +578,7 @@
atts.addAttribute(xmlns, localName, "synthetic", "String", "" + methodDoc.isSynthetic());
atts.addAttribute(xmlns, localName, "static", "String", "" + methodDoc.isStatic());
atts.addAttribute(xmlns, localName, "synchronized", "String", ""+ methodDoc.isSynchronized());
- cm.startElement(xmlns, localName, "method", atts);
+ handler.startElement(xmlns, localName, "method", atts);
// generate "doc" sub-element
docXML(methodDoc);
@@ -579,7 +595,7 @@
// generate "throws" sub-element
throwsXML(methodDoc);
- cm.endElement(xmlns, localName, "field");
+ handler.endElement(xmlns, localName, "method");
}
/**
@@ -590,12 +606,12 @@
private void returnsXML(Type type) throws SAXException {
AttributesImpl atts = new AttributesImpl();
atts.addAttribute(xmlns, localName, "dimension", "String", type.dimension());
- cm.startElement(xmlns, localName, "returns", atts);
+ handler.startElement(xmlns, localName, "returns", atts);
// generate "(classref|interfaceref|primitive)" sub-element
createTypeRef(type);
- cm.endElement(xmlns, localName, "returns");
+ handler.endElement(xmlns, localName, "returns");
}
/**
@@ -616,12 +632,12 @@
}
atts.addAttribute(xmlns, localName, "final", "String", ""+ "" + isFinal);
atts.addAttribute(xmlns, localName, "dimension", "String", parameter.type().dimension());
- cm.startElement(xmlns, localName, "parameter", atts);
+ handler.startElement(xmlns, localName, "parameter", atts);
// generate "(classref|interfaceref|primitive)" sub-element
createTypeRef(parameter.type());
- cm.endElement(xmlns, localName,"parameter");
+ handler.endElement(xmlns, localName,"parameter");
}
/**
@@ -653,14 +669,14 @@
createDoc = true;
}
if (createDoc) {
- cm.startElement(xmlns, localName, "doc", emptyAtts);
+ handler.startElement(xmlns, localName, "doc", emptyAtts);
if (! commentText.equals("")) {
- cm.characters(commentText.toCharArray(), 0, commentText.length());
+ handler.characters(commentText.toCharArray(), 0, commentText.length());
}
for (int i = 0; i < tags.length; ++i) {
tagXML(tags[i]);
}
- cm.endElement(xmlns, localName, "doc");
+ handler.endElement(xmlns, localName, "doc");
}
}
@@ -670,9 +686,9 @@
private void tagXML(Tag tag) throws SAXException {
String name = tag.name().substring(1) + "tag";
if (! tag.text().equals("")) {
- cm.startElement(xmlns, localName, name, emptyAtts);
- cm.characters(tag.text().toCharArray(), 0, tag.text().length());
- cm.endElement(xmlns, localName, name);
+ handler.startElement(xmlns, localName, name, emptyAtts);
+ handler.characters(tag.text().toCharArray(), 0, tag.text().length());
+ handler.endElement(xmlns, localName, name);
}
}