You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by gd...@apache.org on 2001/05/23 18:15:48 UTC
cvs commit: xml-axis/java/test/encoding TestDeser.java TestHrefs.java TestSer.java TestString.java
gdaniels 01/05/23 09:15:46
Modified: java/samples/encoding TestSer.java
java/src/org/apache/axis Message.java
java/src/org/apache/axis/message SAXAdapter.java
ThreadedSAXAdapter.java
java/src/org/apache/axis/utils XMLUtils.java
java/test/encoding TestDeser.java TestHrefs.java
TestSer.java TestString.java
Log:
JAXP!
Remove all Xerces dependencies, and start using JAXP. JAXP version
1.1 is required (for SAX-2 support).
The main changes are in XMLUtils, SAXAdapter, and ThreadedSAXAdapter.
The external interface to the SAXAdapters no longer takes a parser, so
it's easier to use them.
XMLUtils now does all of its XML serialization using JAXP Transformers, which
I'm assuming is the right way to do it - any JAXP experts out there?
Revision Changes Path
1.7 +1 -2 xml-axis/java/samples/encoding/TestSer.java
Index: TestSer.java
===================================================================
RCS file: /home/cvs/xml-axis/java/samples/encoding/TestSer.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- TestSer.java 2001/05/22 18:42:27 1.6
+++ TestSer.java 2001/05/23 16:14:50 1.7
@@ -5,7 +5,6 @@
import org.apache.axis.encoding.*;
import org.apache.axis.utils.QName;
import org.xml.sax.InputSource;
-import org.apache.xerces.parsers.SAXParser;
import java.io.*;
import java.util.*;
@@ -67,7 +66,7 @@
TypeMappingRegistry reg = msgContext.getTypeMappingRegistry();
reg.addDeserializerFactory(dataQName, Data.class, DataSer.getFactory());
- SAXAdapter adapter = new SAXAdapter(new SAXParser(), new InputSource(reader), msgContext);
+ SAXAdapter adapter = new SAXAdapter(new InputSource(reader), msgContext);
SOAPEnvelope env = adapter.getEnvelope();
env.setMessageType(ServiceDescription.REQUEST);
1.32 +1 -5 xml-axis/java/src/org/apache/axis/Message.java
Index: Message.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/Message.java,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -r1.31 -r1.32
--- Message.java 2001/05/06 15:57:20 1.31
+++ Message.java 2001/05/23 16:14:59 1.32
@@ -329,13 +329,9 @@
is = new InputSource(new StringReader(getAsString()));
}
- // ThreadedSAXAdapter parser =
- // new ThreadedSAXAdapter(new org.apache.xerces.parsers.SAXParser(), is);
if (msgContext == null)
msgContext = new MessageContext();
- SAXAdapter parser =
- new SAXAdapter(new org.apache.xerces.parsers.SAXParser(), is,
- msgContext);
+ SAXAdapter parser = new SAXAdapter(is, msgContext);
SOAPEnvelope env = parser.getEnvelope();
env.setMessageType(messageType);
1.4 +8 -7 xml-axis/java/src/org/apache/axis/message/SAXAdapter.java
Index: SAXAdapter.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/message/SAXAdapter.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- SAXAdapter.java 2001/05/05 16:48:33 1.3
+++ SAXAdapter.java 2001/05/23 16:15:06 1.4
@@ -1,7 +1,10 @@
package org.apache.axis.message;
-import org.xml.sax.*;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
import org.apache.axis.MessageContext;
+import org.apache.axis.utils.XMLUtils;
+import javax.xml.parsers.*;
/** This class is an adapter for the Axis SAX-event system
* which uses a SAX parser to parse on its own thread, synchronizing
@@ -12,16 +15,14 @@
public class SAXAdapter extends SOAPSAXHandler
{
private static final boolean DEBUG_LOG = false;
- private XMLReader _parser;
+ private SAXParser _parser;
InputSource inputSource;
- public SAXAdapter(XMLReader parser, InputSource inputSource,
+ public SAXAdapter(InputSource inputSource,
MessageContext msgContext)
{
super(msgContext);
- _parser = new org.apache.xerces.parsers.SAXParser();
- _parser.setContentHandler(this);
-
+ _parser = XMLUtils.getSAXParser();
this.inputSource = inputSource;
}
@@ -31,7 +32,7 @@
public void parse()
{
try {
- _parser.parse(inputSource);
+ _parser.parse(inputSource, this);
} catch (Exception e) {
e.printStackTrace();
}
1.4 +6 -8 xml-axis/java/src/org/apache/axis/message/ThreadedSAXAdapter.java
Index: ThreadedSAXAdapter.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/message/ThreadedSAXAdapter.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ThreadedSAXAdapter.java 2001/05/05 16:48:33 1.3
+++ ThreadedSAXAdapter.java 2001/05/23 16:15:10 1.4
@@ -2,6 +2,8 @@
import org.xml.sax.*;
import org.apache.axis.MessageContext;
+import org.apache.axis.utils.XMLUtils;
+import javax.xml.parsers.SAXParser;
/** This class is an adapter for the Axis SAX-event system
* which uses a SAX parser to parse on its own thread, synchronizing
@@ -15,7 +17,7 @@
private Object _semaphore = new Object();
- private XMLReader _parser;
+ private SAXParser _parser;
InputSource inputSource;
private Thread parseThread = null;
@@ -29,7 +31,7 @@
public void run()
{
try {
- _parser.parse(inputSource);
+ _parser.parse(inputSource, ThreadedSAXAdapter.this);
} catch (Exception e) {
e.printStackTrace();
}
@@ -46,15 +48,11 @@
}
}
- public ThreadedSAXAdapter(XMLReader parser, InputSource inputSource,
+ public ThreadedSAXAdapter(InputSource inputSource,
MessageContext msgContext)
{
super(msgContext);
- _parser = new org.apache.xerces.parsers.SAXParser();
- _parser.setContentHandler(this);
- //elementHandler = new SAXOutputter(new PrintWriter(System.out));
- //_parser.setContentHandler(new SAXOutputter(new PrintWriter(System.out)));
-
+ _parser = XMLUtils.getSAXParser();
this.inputSource = inputSource;
}
1.7 +81 -36 xml-axis/java/src/org/apache/axis/utils/XMLUtils.java
Index: XMLUtils.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/utils/XMLUtils.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- XMLUtils.java 2001/05/22 21:27:13 1.6
+++ XMLUtils.java 2001/05/23 16:15:19 1.7
@@ -58,13 +58,43 @@
import java.io.* ;
import org.w3c.dom.* ;
import javax.xml.parsers.* ;
-import org.apache.xml.serialize.* ;
+import javax.xml.transform.*;
+import javax.xml.transform.dom.*;
+import javax.xml.transform.stream.*;
import org.xml.sax.* ;
import org.apache.axis.Constants;
public class XMLUtils {
private static DocumentBuilder db ;
private static DocumentBuilderFactory dbf = init();
+ private static SAXParserFactory saxFactory;
+
+ static {
+ // Initialize SAX Parser factory defaults
+ initSAXFactory(null, true, false);
+ }
+
+ /** Initialize the SAX parser factory.
+ *
+ * @param factoryClassName The class name of the desired SAXParserFactory
+ * implementation. Will be assigned to the system
+ * property <b>javax.xml.parsers.SAXParserFactory</b>.
+ * @param namespaceAware true if we want a namespace-aware parser (which we do)
+ * @param validating true if we want a validating parser
+ *
+ */
+ public static void initSAXFactory(String factoryClassName,
+ boolean namespaceAware,
+ boolean validating)
+ {
+ if (factoryClassName != null) {
+ System.setProperty("javax.xml.parsers.SAXParserFactory",
+ factoryClassName);
+ }
+ saxFactory = SAXParserFactory.newInstance();
+ saxFactory.setNamespaceAware(namespaceAware);
+ saxFactory.setValidating(validating);
+ }
public static DocumentBuilderFactory init() {
Document doc = null ;
@@ -79,6 +109,24 @@
}
return( dbf );
}
+
+ /** Get a SAX parser instance from the JAXP factory.
+ *
+ * @return a SAXParser instance.
+ */
+ public static SAXParser getSAXParser() {
+ // Might want to cache the parser (on a per-thread basis, as I don't think
+ // SAX parsers are thread-safe)...
+ try {
+ return saxFactory.newSAXParser();
+ } catch (ParserConfigurationException e) {
+ e.printStackTrace();
+ return null;
+ } catch (SAXException se) {
+ se.printStackTrace();
+ return null;
+ }
+ }
public static Document newDocument() {
return( db.newDocument() );
@@ -114,44 +162,41 @@
}
}
+ /** Obtain a JAXP Transformer.
+ *
+ * (I'm assuming that using the transformer API is the accepted JAXP-style
+ * way to do XML serialization)
+ *
+ * @return a JAXP Transformer
+ */
+ public static Transformer getTransformer()
+ {
+ try {
+ TransformerFactory factory = TransformerFactory.newInstance();
+ return factory.newTransformer();
+ } catch (TransformerConfigurationException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
public static String DocumentToString(Document doc) {
- try {
- StringWriter sw = new StringWriter();
- OutputFormat format = new OutputFormat();
- format.setPreserveSpace(true);
- XMLSerializer xs = new XMLSerializer( sw, format );
- xs.serialize( (Document) doc );
- sw.close();
- return(sw.toString() );
- }
- catch( Exception e ) {
- e.printStackTrace();
- }
- return( null );
+ return ElementToString(doc.getDocumentElement());
}
public static void DocumentToStream(Document doc, OutputStream out) {
- try {
- OutputFormat format = new OutputFormat();
- format.setPreserveSpace(true);
- XMLSerializer xs = new XMLSerializer( out, format );
- xs.serialize( (Document) doc );
- }
- catch( Exception e ) {
- e.printStackTrace();
- }
+ ElementToStream(doc.getDocumentElement(), out);
}
public static String ElementToString(Element element) {
try {
- StringWriter sw = new StringWriter();
- OutputFormat format = new OutputFormat();
- format.setPreserveSpace(true);
- format.setOmitXMLDeclaration(true);
- XMLSerializer xs = new XMLSerializer(sw, format);
- xs.serialize((Element)element);
- sw.close();
- return(sw.toString() );
+ StringWriter sw = new StringWriter();
+ DOMSource source = new DOMSource(element);
+ StreamResult result = new StreamResult(sw);
+ Transformer transformer = getTransformer();
+ transformer.transform(source, result);
+ sw.close();
+ return sw.toString();
}
catch( Exception e) {
e.printStackTrace();
@@ -161,14 +206,14 @@
public static void ElementToStream(Element element, OutputStream out) {
try {
- OutputFormat format = new OutputFormat();
- format.setPreserveSpace(true);
- XMLSerializer xs = new XMLSerializer( out, format );
- xs.serialize((Element)element);
+ Transformer transformer = getTransformer();
+ DOMSource source = new DOMSource(element);
+ StreamResult result = new StreamResult(out);
+ transformer.transform(source, result);
}
catch( Exception e ) {
e.printStackTrace();
- }
+ }
}
public static String getInnerXMLString(Element element) {
1.7 +0 -1 xml-axis/java/test/encoding/TestDeser.java
Index: TestDeser.java
===================================================================
RCS file: /home/cvs/xml-axis/java/test/encoding/TestDeser.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- TestDeser.java 2001/05/20 22:14:06 1.6
+++ TestDeser.java 2001/05/23 16:15:27 1.7
@@ -8,7 +8,6 @@
import org.apache.axis.encoding.*;
import org.apache.axis.utils.QName;
import org.xml.sax.InputSource;
-import org.apache.xerces.parsers.SAXParser;
import java.io.*;
import java.util.*;
1.4 +0 -1 xml-axis/java/test/encoding/TestHrefs.java
Index: TestHrefs.java
===================================================================
RCS file: /home/cvs/xml-axis/java/test/encoding/TestHrefs.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- TestHrefs.java 2001/05/21 21:03:51 1.3
+++ TestHrefs.java 2001/05/23 16:15:29 1.4
@@ -7,7 +7,6 @@
import org.apache.axis.encoding.*;
import org.apache.axis.utils.QName;
import org.xml.sax.InputSource;
-import org.apache.xerces.parsers.SAXParser;
import java.io.*;
import java.util.*;
1.4 +1 -2 xml-axis/java/test/encoding/TestSer.java
Index: TestSer.java
===================================================================
RCS file: /home/cvs/xml-axis/java/test/encoding/TestSer.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- TestSer.java 2001/05/05 16:48:33 1.3
+++ TestSer.java 2001/05/23 16:15:32 1.4
@@ -5,7 +5,6 @@
import org.apache.axis.encoding.*;
import org.apache.axis.utils.QName;
import org.xml.sax.InputSource;
-import org.apache.xerces.parsers.SAXParser;
import java.io.*;
import java.util.*;
@@ -48,7 +47,7 @@
StringReader reader = new StringReader(msgString);
- SAXAdapter adapter = new SAXAdapter(new SAXParser(), new InputSource(reader), msgContext);
+ SAXAdapter adapter = new SAXAdapter(new InputSource(reader), msgContext);
reg = adapter.getContext().getTypeMappingRegistry();
reg.addDeserializerFactory(dataQName, Data.class, DataSer.getFactory());
1.3 +1 -2 xml-axis/java/test/encoding/TestString.java
Index: TestString.java
===================================================================
RCS file: /home/cvs/xml-axis/java/test/encoding/TestString.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- TestString.java 2001/05/05 16:48:33 1.2
+++ TestString.java 2001/05/23 16:15:34 1.3
@@ -5,7 +5,6 @@
import org.apache.axis.encoding.*;
import org.apache.axis.utils.QName;
import org.xml.sax.InputSource;
-import org.apache.xerces.parsers.SAXParser;
import java.io.*;
import java.util.*;
@@ -38,7 +37,7 @@
StringReader reader = new StringReader(msgString);
- SAXAdapter adapter = new SAXAdapter(new SAXParser(), new InputSource(reader), msgContext);
+ SAXAdapter adapter = new SAXAdapter(new InputSource(reader), msgContext);
SOAPEnvelope env = adapter.getEnvelope();
RPCElement rpcElem = (RPCElement)env.getFirstBody();
RPCParam output = rpcElem.getParam("testParam");