Why to use xml ,sax api ,?

Dear friends
1> Can u please tell me why to use xml instead of html. When the developement is
easy & fast in html, then why peoples are going for xml.
2> Please tell me role of SAX api in relevence to XML.
3>What is difference between DOM & SAX.?
If possible spare few seconds to write to me.
regds
shiv
Email: [email protected]

1> Can u please tell me why to use xml instead of
html. When the developement is
easy & fast in html, then why peoples are going for
xml.
HTML is only for presentations like web pages. XML, however, is use to define a new language like XHTML that is for presentations. But there are XML based language that is not for presentation, for example, XLink which allows elements to be inserted into XML documents in order to create and describe links between resources. All in all, XML is a much powerful language than HTML.
2> Please tell me role of SAX api in relevence to
XML.
Simplely put, SAX is a XML parser like DOM that is used to process XML data.
3>What is difference between DOM & SAX.?
Take a look at this: http://java.sun.com/webservices/docs/ea2/tutorial/doc/JAXPIntro.html
Hope this help.

Similar Messages

  • Trying to use XML SAX parser with JDK2 ...

    Hi,
    I'm pretty new to Java.
    I'm trying to write and use java sample using XML SAX parser. I try with XP and XML4J.
    Each time I compile it give me a error message like
    "SAX01.java:23: unreported exception java.lang.Exception; must be caught or declared to be
    thrown
    (new SAX01()).countBooks();
    ^
    Note: SAX01.java uses or overrides a deprecated API.
    Note: Recompile with -deprecation for details.
    1 error"
    For what I found, it seems that "deprecated" mean usage of old classes or methods. What should I do ?
    Wait for the XML parser to be rewrite ? ....
    Thank's
    Constant

    "SAX01.java:23: unreported exception
    java.lang.Exception; must be caught or declared to be
    thrown
    (new SAX01()).countBooks();
    ^Do this
    public static void main(String[] args) throws Exception {
    or do this
         try
                       first part of expression?(new SAX0()).countBooks();
         catch(Exception ex)     
              System.out.println("problem "+ ex);
    Note: SAX01.java uses or overrides a deprecated API.
    Note: Recompile with -deprecation for details.
    1 error"deprecation is just a warning if there are no errors elsewhere in your program it should compile fine, but if you want to find out how to change it do this:
    javac YourClassName.java -deprecation
    then look in the docs for an alternative.

  • Why to use the Java API in MDM

    Hi Experts,
    I am new to the MDM.
    We are having the requirement of inetration between Portal and MDM.Can u please tell me when to use the following coponents like the scenorio's.
    Why to install the MDM Business packages in Portal?
    why to use the JAVA API.
    Please give me the complete information.
    Regards

    Hi Vijay,
    Standard Business Package is use to provide interaction between MDM Server and the Portal. It consists of MDM iViews like Item Detail iView (allows to create,edit and delete the records) , Resultset iView (Displays the records, allows to add the records in workflows etc), Search iViews (for searching)i.e. Data Manager functionality.
    Java API are used when you need some functionality that standard MDM iViews dont have.MDM Java API consists of set of classes and interfaces with the help of which customization can be done.
    Regards,
    Jitesh Talreja

  • How to get the position of a tag in XML,when i am using the org.xml.sax

    Hi,
    I am able to parse a xml document.I want to get the position of a tag in the document.So that by keeping that as reference, i can access other tags.Plz help me.I am using org.xml.sax API.

    Hello Friends
    After research , I could also find another way to check the existence of a node .We can even use CHOOSE to check the existence.
    <xsl:choose>
          <xsl:when test="(/mynode)">
              your action if the mynode is found
          </xsl:when>
          <xsl:otherwise>
                    action if mynode is not found
          </xsl:otherwise>
    </xsl:choose>
    Thanks.
    Wishes
    Richa

  • Why XI uses SOAP or XML

    Hi All,
    Can anybody throw some light on some points as to why XI uses XML or SOAP to exchange messages.
    Regards,
    Loveena.

    Hi Loveena ,
        SAP has already provided integration solutions in the form of Connectors for integratinging SAP apllications with applications that are running on different platforms.
    1. .Net connector for  .Net connect connectors.
    2.Java connectors for Java applications,
    3. EDI connectors for EDI applications.
    and their fucntionality is limited and the interfaces are complex to handle, (no intermediate data format,but direct conversion)they are limited to the particular commuunication pair.To adress the above issue ,PI uses SOAP-xml as intermediate data format providing a seam less integration with any application that is running on any platform that can understand XML(which is a widely used standard for data exchange now a days ) .
       This is very  basic question that can be searched in SDN regarding SAP-XI .Even moderators wont encourage posting such basic questions.
    Thanks,
    Ram.

  • How to trigger xml publisher API (ex:Delivering Documents via e-Mail)?

    Dear All:
    How to use xml publisher API ?
    In user's guide always talk API's code.(ex:Delivering Documents via e-Mail
    // create delivery manager instance
    DeliveryManager dm = new DeliveryManager();
    // create a delivery request
    DeliveryRequest req =
    dm.createRequest(DeliveryManager.TYPE_SMTP_EMAIL);
    // set email subject
    req.addProperty(DeliveryPropertyDefinitions.SMTP_SUBJECT, "Invoice");
    // set SMTP server host
    req.addProperty(
    DeliveryPropertyDefinitions.SMTP_HOST, "mysmtphost");
    // set the sender email address
    req.addProperty(DeliveryPropertyDefinitions.SMTP_FROM,
    "[email protected]");
    // set the destination email address
    req.addProperty(
    DeliveryPropertyDefinitions.SMTP_TO_RECIPIENTS,
    "[email protected], [email protected]" );
    // set the content type of the email body
    req.addProperty(DeliveryPropertyDefinitions.SMTP_CONTENT_TYPE,
    "text/html");
    // set the document file name appeared in the email
    req.addProperty(DeliveryPropertyDefinitions.SMTP_CONTENT_FILENAME,
    "body.html");
    // set the document to deliver
    req.setDocument("/document/invoice.html");
    // submit the request
    req.submit();
    // close the request
    req.close(); )
    Not say how to use this code to account effect !!
    Having anybody to use API before?
    Please tell me how to use that,thanks!!
    BY Emily_ye

    Hi Emily
    I had the same question. After much research and a lot of deduction I produced the following:
    import oracle.apps.fnd.cp.request.*;
    import java.io.*;
    import java.sql.*;
    import java.util.Vector;
    import oracle.apps.fnd.util.*;
    import oracle.apps.xdo.XDOException;
    import oracle.apps.xdo.common.pdf.util.PDFDocMerger;
    import oracle.apps.xdo.delivery.DeliveryException;
    import oracle.apps.xdo.delivery.DeliveryManager;
    import oracle.apps.xdo.delivery.DeliveryPropertyDefinitions;
    import oracle.apps.xdo.delivery.DeliveryRequest;
    import oracle.jdbc.driver.OracleCallableStatement;
    public class RunTravProgram implements JavaConcurrentProgram {
    CpContext mCtx; // global reference to concurrent program context
    LogFile logFile; // global reference to context logfile
    OutFile outFile; // global reference to context outfile
    Connection mConn = null;
    ReqCompletion lRC;
    //File Separator
    private String mFileSeparator;
    // globals for template
    String XDOAppShortName = "";
    String XDOtemplateCode = "";
    // hard-wired constants for template addition
    final String XDOLanguage = "en";
    final String XDOTerritory = "US";
    final String XDOFinal_format = "PDF";
    final String XDOtemplateType = "TEMPLATE_SOURCE";
    String PDFFile = "";
    String outFilePath = "";
    String progShortName = "";
    String progDesc = "";
    Integer iRequestID = 0;
    String sWatermark = ""; // watermark text
    String emailAddress = ""; // Not Implemented
    String emailServer = "";
    public static final String M_SUCCESS = "SUCCESS";
    public static final String M_ERROR = "ERROR";
    public static final String M_WARNING = "WARNING";
    * Create a Java FND ConcurrentRequest objec to call fnd_request.submit_request
    * The first three parameters are:
    * Application Short Name -- Application Short name (ie. WAHC)
    * Current Program Short Name -- Concurrent Program being called
    * Current Program Description -- description for above
    * These should be the first three parameters passed by the concurrent
    * program in this order. The next two are constants set to null
    * These are followed by the parameters passed by the first concurrent
    * program that are being passed to the next concurrent program.
    * I am limiting the parameter list to ten for now.
    // Dynamic PLSQL statement used to get a concurrent request completion status
    // This is necessary because the java class does not provide this method :-(
    String mGetCompleteStatus =
    "DECLARE R_VAL BOOLEAN; " + "b_phase VARCHAR2 (80) := NULL; " +
    "b_status VARCHAR2 (80) := NULL; " +
    "b_dev_phase VARCHAR2 (80) := NULL; " +
    "b_dev_status VARCHAR2 (80) := NULL; " +
    "b_message VARCHAR2 (240) := NULL; " + "BEGIN " +
    "r_val := fnd_concurrent.wait_for_request (:1,5,1000," +
    "b_phase,b_status,b_dev_phase,b_dev_status,b_message); " +
    ":2 := b_phase; " + ":3 := b_status; " + ":4 := b_message; " + "end;";
    public RunTravProgram() {
    // no constructor necessary for now
    * Concurrent Processing provides an interface 'JavaConcurrentProgram' with abstract method
    * runProgram() which passes the concurrent processing context 'CpContext'. The concurrent
    * program developer will implement all of their business logic for a concurrent program in
    * runProgram(). The main() method, implemented by AOL, will call runProgram() after
    * performing all of the required initialization for the concurrent program, including
    * establishing a database connection, initializing the required contexts, and setting up
    * the log and output files. CpContext will have the request specific log and output
    * file input methods
    public void runProgram(CpContext pCpContext) {
    mCtx = pCpContext;
    OracleCallableStatement lStmt = null;
    boolean bCompletion = true;
    String sPhase = "";
    String sStatus = "";
    String sMessage = "";
    //get handle on request completion object for reporting status
    lRC = pCpContext.getReqCompletion();
    // assign logfile
    logFile = pCpContext.getLogFile();
    // assign outfile
    outFile = pCpContext.getOutFile();
    // assign fileseparator
    mFileSeparator = getFileSeparator();
    // get the JDBC connection object
    mConn = pCpContext.getJDBCConnection();
    outFilePath =
    ((new File(outFile.getFileName())).getParent() == null ? "" :
    (new File(outFile.getFileName())).getParent() +
    mFileSeparator);
    logFile.writeln("OutFile File Path: -> " + outFilePath, 0);
    // get parameter list object from CpContext
    // these come from the concurrent program
    ParameterList lPara = pCpContext.getParameterList();
    // create a temporary array and retrieve the parameters created by
    // the program. Currently limiting the number of parameters to 10 for now
    String pvals[] = new String[10];
    int pcount = 0;
    while (lPara.hasMoreElements()) {
    NameValueType aNVT = lPara.nextParameter();
    pvals[pcount] = aNVT.getValue();
    pcount++;
    if (pcount > 9)
    break;
    // send parameter values to the log file
    logFile.writeln("Arg 1: APPL_SHORT_NAME -> " + pvals[0], 0);
    logFile.writeln("Arg 2: CURR_PROG_SHORT_NAME -> " + pvals[1], 0);
    logFile.writeln("Arg 3: CURR_PROG_DESCRIPTION -> " + pvals[2], 0);
    logFile.writeln("Arg 4: TEMPLATE_CODE -> " + pvals[3], 0);
    logFile.writeln("Arg 5: P_PLANT_CODE -> " + pvals[4], 0);
    logFile.writeln("Arg 6: P_BATCH_NO -> " + pvals[5], 0);
    logFile.writeln("Arg 7: P_SHOW_PROMISE -> " + pvals[6], 0);
    logFile.writeln("Arg 8: P_WATERMARK -> " + pvals[7], 0);
    XDOtemplateCode = pvals[3]; // store the template name globally
    progShortName = pvals[1]; // store the program short name globally
    XDOAppShortName = pvals[0]; // store the application short name
    sWatermark = pvals[7]; // store the watermark globally
    progDesc = pvals[2];
    try {
    // create a concurrent request object
    ConcurrentRequest cr = new ConcurrentRequest(mConn);
    // use the parameters to call fnd_request.submit_request
    cr.addLayout(XDOAppShortName, XDOtemplateCode, XDOLanguage,
    XDOTerritory, XDOFinal_format);
    Vector param = new Vector();
    param.add(pvals[4]); // plant code
    param.add(pvals[5]); // batch ID
    param.add(pvals[6]); // Show SO info flag
    iRequestID =
    cr.submitRequest(XDOAppShortName, progShortName, progDesc,
    null, false, param);
    mConn.commit();
    // send the request ID to the log file
    logFile.writeln("-- Request ID: ->" + Integer.toString(iRequestID),
    0);
    // call fnd_concurrent.wait_for_request to wait until the request
    // has ended - use this to check the request status before proceeding
    lStmt =
    (OracleCallableStatement)mConn.prepareCall(mGetCompleteStatus);
    lStmt.setInt(1, iRequestID);
    lStmt.registerOutParameter(2, java.sql.Types.VARCHAR, 0, 255);
    lStmt.registerOutParameter(3, java.sql.Types.VARCHAR, 0, 255);
    lStmt.registerOutParameter(4, java.sql.Types.VARCHAR, 0, 255);
    lStmt.execute();
    // get the results of the completion
    sPhase = lStmt.getString(2);
    sStatus = lStmt.getString(3);
    sMessage = lStmt.getString(4);
    lStmt.close();
    // send the results of the request processing to the log file
    logFile.writeln("-- Phase: -> " + sPhase, 0);
    logFile.writeln("-- Status: -> " + sStatus, 0);
    logFile.writeln("-- Message: -> " + sMessage, 0);
    // test here to make sure it completed correctly
    if (sPhase.equals("Completed") && sStatus.equals("Normal")) {
    // construct the PDF file name generated by the called request
    PDFFile = progShortName + "_" + iRequestID + "_1.pdf";
    // add a watermark to the generated PDF
    // create an output stream for the existing PDF
    // and set ouput to append
    OutputStream pdfout =
    new FileOutputStream(outFilePath + PDFFile, true);
    // create an inputstream array (required by calling method)
    InputStream pdfin[] = new InputStream[1];
    pdfin[0] = new FileInputStream(outFilePath + PDFFile);
    // add the watermark passed as a parameter
    bCompletion = addWatermark(pdfin, pdfout);
    // assign the modified file to the context out
    // this will print using this request
    if (bCompletion)
    outFile.setOutFile(outFilePath + PDFFile);
    // release the connection object
    // and set the completion status for the request
    if (bCompletion) {
    pCpContext.getReqCompletion().setCompletion(ReqCompletion.NORMAL,
    } else {
    lRC.setCompletion(ReqCompletion.WARNING, M_WARNING);
    pCpContext.releaseJDBCConnection();
    } catch (SQLException s) {
    logFile.writeln("SQL Error: Exception thrown w/ error message: " +
    s.getMessage(), 0);
    lRC.setCompletion(ReqCompletion.WARNING, M_WARNING);
    pCpContext.releaseJDBCConnection();
    } catch (IOException ioe) {
    logFile.writeln("IO Error: Exception thrown w/ error message: " +
    ioe.getMessage(), 0);
    lRC.setCompletion(ReqCompletion.WARNING, M_WARNING);
    pCpContext.releaseJDBCConnection();
    } catch (Exception e) {
    logFile.writeln("General Exception: " + e.getMessage(), 0);
    lRC.setCompletion(ReqCompletion.WARNING, M_WARNING);
    pCpContext.releaseJDBCConnection();
    } finally {
    try {
    if (lStmt != null)
    lStmt.close();
    pCpContext.releaseJDBCConnection();
    } catch (SQLException e) {
    logFile.writeln(e.getMessage(), 0);
    lRC.setCompletion(ReqCompletion.WARNING, M_WARNING);
    * addWatermark()
    * @param pdfin
    * @param pdfout
    * @return boolean
    * This method will work for an existing document or a newly generated
    * one. Set the outputstream append flag to false for a new document
    * and true for an existing one.
    * NOTE: PDFDocMerger requires an inputstream array even if it only
    * contains one document.
    private boolean addWatermark(InputStream[] pdfin, OutputStream pdfout) {
    if (!sWatermark.equals("")) {
    try {
    PDFDocMerger docMerger = new PDFDocMerger(pdfin, pdfout);
    //docMerger.setTextDefaultWatermark(sWatermark);
    docMerger.setTextWatermark(sWatermark, 80f, 50f);
    docMerger.setTextWatermarkAngle(25);
    docMerger.setTextWatermarkColor(1.0f, .50f, .50f);
    docMerger.setTextWatermarkFont("Garamond", 100);
    docMerger.process();
    docMerger = null;
    return true;
    } catch (XDOException e) {
    logFile.writeln("Watermark process Failed: " + e.getMessage(),
    0);
    return false;
    return true;
    * Returns the file separator
    private String getFileSeparator() {
    return (System.getProperty("file.separator"));
    * EBSEmailDelivery
    * @return
    * Just for testing right now.
    private boolean EBSEmailDelivery() {
    if (!emailAddress.equals("")) {
    try {
    // create delivery manager instance
    DeliveryManager delMgr = new DeliveryManager();
    // create a delivery request
    DeliveryRequest delReq =
    delMgr.createRequest(DeliveryManager.TYPE_SMTP_EMAIL);
    // set email subject
    delReq.addProperty(DeliveryPropertyDefinitions.SMTP_SUBJECT,
    "EBS Report:" + progDesc +
    " for request: " + iRequestID);
    // set SMTP server host
    delReq.addProperty(DeliveryPropertyDefinitions.SMTP_HOST,
    emailServer); // need to supply the email smtp server
    // set the sender email address
    delReq.addProperty(DeliveryPropertyDefinitions.SMTP_FROM,
    emailAddress);
    // set the destination email address
    delReq.addProperty(DeliveryPropertyDefinitions.SMTP_TO_RECIPIENTS,
    emailAddress);
    // set the content type of the email body
    delReq.addProperty(DeliveryPropertyDefinitions.SMTP_CONTENT_TYPE,
    "application/pdf");
    // set the document file name appeared in the email
    delReq.addProperty(DeliveryPropertyDefinitions.SMTP_CONTENT_FILENAME,
    PDFFile);
    // set the document to deliver
    delReq.setDocument(outFilePath + PDFFile);
    // submit the request
    delReq.submit();
    // close the request
    delReq.close();
    return true;
    } catch (DeliveryException de) {
    logFile.writeln("email process Failed: " + de.getMessage(), 0);
    return false;
    return true;
    This is the class for a JCP I created to perform the following:
    1) Launch an existing Concurrent Program that produces PDF output
    2) Grab the PDF and apply a watermark based on user input or conditions
    3) associate the modified PDF to CP output for PASTA printing
    It isn't elegant but it is fairly simple. I added the email capability and tested it but am not implementing it at the present time.
    there is a fair amount of information out there that explains how to create a JCP councurrent program but very little that demonstrates the class needed.
    I hope this helps

  • Why we use tablib uri in JSTL?

    I am confused with this
    <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
    the uri attribute is pointing to a web folder. why we use this if we install JSTL jar files in our web application directry to use it?
    what if we dont have internet connection, will it throw an error because in that case it wont be able to point to given uri?
    second question is------
    if we achieve functionalities using JSTL tags only then why we use xml tags in JSTL?

    Surrounded wrote:
    I am confused with this
    <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
    the uri attribute is pointing to a web folder. why we use this if we install JSTL jar files in our web application directry to use it?To avoid unnecessary imports. You can compare it less or more with "import" statement in raw Java code.
    what if we dont have internet connection, will it throw an error because in that case it wont be able to point to given uri?URI != URL. Plug off your network cable and retest. Does it crash? Think logically. I must however confess that it has been a poor choice to let them start with "http://". This introduces unnecessary confusion among starters. You has been not the only one who was wondering that way.
    second question is------
    if we achieve functionalities using JSTL tags only then why we use xml tags in JSTL?I don't understand you.

  • Database retrival using xml

    how can I retrieve data from database using xml?
    or else how can i connect to the database thru XML?

    Thanks for the reply !
    Suppose I have my data in SQL database.... So can I retrive that in xml?Well yes with caveats. OK:
    1.) Some very advanced databases allow you to retrieve XML directly from a database row, e.g. They send you an XML representation of the data.
    2.) A far more common way is to extract the data using any standard data access layer into Javabeans or POJO and then use a XML parser or a XSL stylesheet to convert the raw data into the XML format that you want.
    Or else another case is.....
    I'm storing my data in xml files... and after that if i need that same data in java programming , can I
    utilise that xml file??Yes, you can also in theory store the whole XML string and/or file in hte database (not normally recommended if you want a good relational database structure). Again you can then use XML parsing APIs to get data out of that XML stream and convert it to Java objects.
    Karianna
    PS: It sounds like you're attempting this for the first time, good on you! But I sugeest strongly that you take a tutorial or get sometihng like the OReillly Java and XML book. This is a very large topic......
    >

  • How to create new XML file using retreived XML content by using SAX API?

    hi all,
    * How to create new XML file using retreived XML content by using SAX ?
    * I have tried my level best, but output is coming invalid format, my code is follows,
    XMLFileParser.java class :-
    import java.io.StringReader;
    import java.io.StringWriter;
    import javax.xml.transform.OutputKeys;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerConfigurationException;
    import javax.xml.transform.TransformerException;
    import javax.xml.transform.TransformerFactory;
    import javax.xml.transform.dom.DOMResult;
    import javax.xml.transform.sax.SAXSource;
    import javax.xml.transform.sax.SAXTransformerFactory;
    import javax.xml.transform.sax.TransformerHandler;
    import javax.xml.transform.stream.StreamResult;
    import org.w3c.dom.Document;
    import org.xml.sax.Attributes;
    import org.xml.sax.InputSource;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.XMLFilterImpl;
    public class PdfParser extends XMLFilterImpl {
        private TransformerHandler handler;
        Document meta_data;
        private StringWriter meta_data_text = new StringWriter();
        public void startDocument() throws SAXException {
        void startValidation() throws SAXException {
            StreamResult streamResult = new StreamResult(meta_data_text);
            SAXTransformerFactory factory = (SAXTransformerFactory) SAXTransformerFactory.newInstance();
            try
                handler = factory.newTransformerHandler();
                Transformer transformer = handler.getTransformer();
                transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
                transformer.setOutputProperty(OutputKeys.INDENT, "yes");
                handler.setResult(streamResult);
                handler.startDocument();
            catch (TransformerConfigurationException tce)
                System.out.println("Error during the parse :"+ tce.getMessageAndLocation());
            super.startDocument();
        public void startElement(String namespaceURI, String localName,
                String qualifiedName, Attributes atts) throws SAXException {
            handler.startElement(namespaceURI, localName, qualifiedName, atts);
            super.startElement(namespaceURI, localName, qualifiedName, atts);
        public void characters(char[] text, int start, int length)
                throws SAXException {
            handler.characters(text, start, length);
            super.characters(text, start, length);
        public void endElement(String namespaceURI, String localName,
                String qualifiedName) throws SAXException {
            super.endElement("", localName, qualifiedName);
            handler.endElement("", localName, qualifiedName);
        public void endDocument() throws SAXException {
        void endValidation() throws SAXException {
            handler.endDocument();
            try {
                TransformerFactory transfactory = TransformerFactory.newInstance();
                Transformer trans = transfactory.newTransformer();
                SAXSource sax_source = new SAXSource(new InputSource(new StringReader(meta_data_text.toString())));
                DOMResult dom_result = new DOMResult();
                trans.transform(sax_source, dom_result);
                meta_data = (Document) dom_result.getNode();
                System.out.println(meta_data_text);
            catch (TransformerConfigurationException tce) {
                System.out.println("Error occurs during the parse :"+ tce.getMessageAndLocation());
            catch (TransformerException te) {
                System.out.println("Error in result transformation :"+ te.getMessageAndLocation());
    } CreateXMLFile.java class :-
    Sax.startDocument();
    Sax.startValidation();
    Sax.startElement("", "pdf", "pdf", new AttributesImpl());
    Sax.startElement("", "basic-metadata", "basic-metadata", new AttributesImpl());          
    String xmp_str = new String(meta_data.getByteArray(),"UTF8");
    char[] xmp_arr = xmp_str.toCharArray();
    Sax.characters(xmp_arr, 0, xmp_arr.length);
    Sax.endElement("", "pdf", "pdf");
    Sax.endValidation();
    Sax.endDocument();
    Sax.endElement("", "basic-metadata", "basic-metadata");* In CreateXMLFile.java
    class, I have retreived the xml content in the meta_data object, after that i have converted into character array and this will be sends to SAX
    * In this case , the XML file created successfully but the retreived XML content added as an text in between basic-metadata Element, that is, retreived XML content
    is not an XML type text, it just an Normal text Why that ?
    * Please help me what is the problem in my code?
    Cheers,
    JavaImran

    Sax.startDocument();
    Sax.startValidation();
    Sax.startElement("", "pdf", "pdf", new AttributesImpl());
    Sax.startElement("", "basic-metadata", "basic-metadata", new AttributesImpl());          
    String xmp_str = new String(meta_data.getByteArray(),"UTF8");
    char[] xmp_arr = xmp_str.toCharArray();
    Sax.characters(xmp_arr, 0, xmp_arr.length);
    </code><code>Sax.endElement("", "basic-metadata", "basic-metadata");</code>
    <code class="jive-code jive-java">Sax.endElement("", "pdf", "pdf");
    Sax.endValidation();
    Sax.endDocument();     
    * I HAVE CHANGED MY AS PER YOUR SUGGESTION, NOW SAME RESULT HAS COMING.
    * I AM NOT ABLE TO GET THE EXACT OUTPUT.,WHY THAT ?
    Thanks,
    JavaImran{code}

  • Issue with mapping XML to Java using SAX API

    I am using SAX API to Map XML Documents To Java. Is it possible to differentiate the elements based on the attribute rather than localname or element name in SAX API? because I am having the below xml structure. In SAX API we are processing the element values based on start/End Element name.
    <?xml version="1.0" encoding="UTF-8"?>
    <response>
    <result name="response">
    <doc>
    <str name="art_id">192201910</str>
    <str name="title">test</str>
    <arr name="author">
    <str>Darrell Dunn</str>
    <str>William </str>
    </arr>
    <arr name="tax">
    <str>113243335</str>
    <str>233454666</str>
    </arr>
    </doc>
    <doc>
    <str name="art_id">192201911</str>
    <str name="title">test2</str>
    <arr name="author">
    <str>Darrell Dunn1</str>
    <str>William 1</str>
    </arr>
    </doc>
    </result>
    </response>
    I want to map the elements based on attributes such as
    classobj.art_id, classobj.title, classobj.tax[]. I have wriiten code below, but I am not getting the proper result.
    import org.xml.sax.;
    import org.xml.sax.helpers.;
    import java.io.;
    import java.util.;
    import common.;
    public class XmltoObjectHandler extends DefaultHandler{
    /* Creates a new instance of XmltoObjectHandler */
    public XmltoObjectHandler() {
    // Local SolrDocument object to collect
    // document XML data.
    private XmlDocument doc = new XmlDocument();
    // Local list of solr documents items...
    private Vector xmlDocuments = new Vector();
    // Local current solr document reference...
    private XmlDocument currentSolrDoc;
    // Buffer for collecting data from
    // the "characters" SAX event.
    private CharArrayWriter contents = new CharArrayWriter();
    // Override methods of the DefaultHandler class
    // to gain notification of SAX Events.
    // See org.xml.sax.ContentHandler for all available events.
    public void startElement( String namespaceURI,
    String localName,
    String qName,
    Attributes attr ) throws SAXException {
    if ( localName.equals( "doc" ) ) {
    currentXmlDoc = new XmlDocument();
    solrDocuments.addElement( currentSolrDoc );
    if( localName.equals("str"){
    for ( int i = 0; i < attr.getLength(); i++ ){
    if("art_id".equals(attr.getValue(i))){
    currentSolrDoc.art_id = contents.toString();
    if("title".equals(attr.getValue(i))){
    currentSolrDoc.title = contents.toString();
    public void endElement( String namespaceURI,
    String localName,
    String qName ) throws SAXException {
    public void characters( char[] ch, int start, int length )
    throws SAXException {
    contents.write( ch, start, length );
    public Vector getxmlDocuments() {
    return solrDocuments;
    public static void main( String[] argv ){
    System.out.println( "Example4:" );
    try {
    // Create SAX 2 parser...
    XMLReader xr = XMLReaderFactory.createXMLReader();
    // Set the ContentHandler...
    XmltoObjectHandler ex4 = new XmltoObjectHandler();
    xr.setContentHandler( ex4 );
    // Parse the file...
    xr.parse( new InputSource(new FileReader( "xmlfile.xml" )));
    // Display all documents items...
    XmlDocument i;
    Vector items = ex4.getxmlDocument();
    Enumeration e = items.elements();
    while( e.hasMoreElements()){
    i = (XmlDocument) e.nextElement();
    System.out.println(i.art_id+"\n");
    System.out.println(i.title+"\n");
    }catch ( Exception e ) {
    e.printStackTrace();
    Can anybody help me how to process this type of xml. Is there any other way we can do this? I am trying for two days. It is a big deadlock for me. any help greatly appriciated. Thanks in advance.

    I added my code inside code tags...
    import org.xml.sax.*;
    import org.xml.sax.helpers.*;
    import java.io.*;
    import java.util.*;
    import common.*;
    public class XmltoObjectHandler extends DefaultHandler{
        /** Creates a new instance of XmltoObjectHandler */
        public XmltoObjectHandler() {
        // Local SolrDocument object to collect
        // document XML data.
        private XmlDocument doc = new XmlDocument();
        // Local list of solr documents items...
        private Vector xmlDocuments = new Vector();
        // Local current solr document reference...
        private XmlDocument currentSolrDoc;
        // Buffer for collecting data from
        // the "characters" SAX event.
        private CharArrayWriter contents = new CharArrayWriter();  
        // Override methods of the DefaultHandler class
        // to gain notification of SAX Events.
        // See org.xml.sax.ContentHandler for all available events.
        public void startElement( String namespaceURI,
                String localName,
                String qName,
                Attributes attr ) throws SAXException {
              if ( localName.equals( "doc" ) ) {
                currentXmlDoc = new XmlDocument();
                solrDocuments.addElement( currentSolrDoc );
              if( localName.equals("str"){
                   for ( int i = 0; i < attr.getLength(); i++ ){               
                    if("art_id".equals(attr.getValue(i))){
                             currentSolrDoc.art_id = contents.toString();
                        if("title".equals(attr.getValue(i))){
                             currentSolrDoc.title = contents.toString();
        public void endElement( String namespaceURI,
                String localName,
                String qName ) throws SAXException {      
        public void characters( char[] ch, int start, int length )
        throws SAXException {       
            contents.write( ch, start, length );       
        public Vector getxmlDocuments() {
            return solrDocuments;
        public static void main( String[] argv ){       
            System.out.println( "Example4:" );
            try {          
                // Create SAX 2 parser...
                XMLReader xr = XMLReaderFactory.createXMLReader();           
                // Set the ContentHandler...
                XmltoObjectHandler ex4 = new XmltoObjectHandler();
                xr.setContentHandler( ex4 );           
                // Parse the file...
                xr.parse( new InputSource(new FileReader( "xmlfile.xml" )));          
                // Display all documents items...
                XmlDocument i;
                Vector items = ex4.getxmlDocument();
                Enumeration e = items.elements();
                while( e.hasMoreElements()){
                    i = (XmlDocument) e.nextElement();
                    System.out.println(i.art_id+"\n");
                        System.out.println(i.title+"\n");
            }catch ( Exception e ) {
                e.printStackTrace();
    }

  • ? - Is there a way to validate 1 XML record at a time, using the SAX or oth

    Hello!
    Before running into space problems, i generated an XML file from a 'pipe delimited' file and and then processed that XML file thru a SAXParser 'validator' and the data was correctly validated, using the RELAXNG Schema patterns as the validation criteria!
    But as feared, the XML file was huge! (12 billion XML recs. generated from 1 billion 'pipe' recs.) and i am now trying to find a way to process 1 'pipe' record at a time, (ie) read 1 record from the 'pipe delimited' file, convert that rec. to an XML rec. and then send that 1 XML rec. thru the SAXParser 'validator', avoiding the build of a huge temporary XML file!
    After testing this approach, its looks like the SAXParser 'validator' (sp.parse) is expecting only (1) StringBufferInputStream as input,and after opening, reading and closing just (1) of the returned StringBufferInputStream objects, the validator wants to close up operations!
    Where i have the "<<<<<" you can see where i'm calling the the object.method that creates the 'pipe>XML' records 'sb.createxml' and will be returning many occurances of the StringBufferInputStream object, where (1) StringBufferInputStream object represents (1) 'pipe>XML' record!
    So what i'm wondering, is if there is a form of 'inputStream' class that can be loaded and processed at the same time! ie instead of requiring that the 'inputStream' object be loaded in it's entirety, before going to validation?
    Or if there is another XML 'validator' that can validate 1 XML record at a time, without requiring that the entire XML file be built first?
    1. ---------------------------------class: (SX2) ---------------------------------------------------------------------------------------------------------
    import ............
    public class SX2
    public static void main(String[] args) throws Exception
    MyDefaultHandler dh = new MyDefaultHandler();
    SX1 sx = new SX1();
    SAXParser sp = sx.getParser(args[0]);
    stbuf1 sb = new stbuf1();
    sp.parse(sb.createxml(args[1]),dh); <<<<<< createxml( ) see <<<<<<< below
    class MyDefaultHandler extends DefaultHandler {
    public int errcnt;
    "SX2.java" 87 lines, 2563 characters
    2. ----------------------------------class: (stbuf1) method: (createxml) ----------------------------------------------------------------------------
    public stbuf1 () { }
    public StringBufferInputStream createxml( String inputFile ) <<<<<< createxml(
    BufferedReader textReader = null;
    if ( (inputFile == null) || (inputFile.length() <= 1) )
    {     throw new NullPointerException("Delimiter Input File does not exist");
    String ele = new String();
    try {
    ele = new String();
    textReader = new BufferedReader(new FileReader(inputFile));
    String line = null; String SEPARATOR = "\\|"; String sToken = null;
    String hdr1=("<?xml version=#1.0# encoding=#UTF-8#?>"); hdr1=hdr1.replace('#','"');
    String hdr2=("<hlp_data>");
    String hdr3=("</hlp_data>");
    String hdr4=("<"+TABLE_NAME+">");
    String hdr5=("</"+TABLE_NAME+">");
    while ( (line = textReader.readLine()) != null )
    String[] sa = line.split(SEPARATOR);
    String elel = new String();
    for (int i = 0; i < NUM_COLS; i++)
    if (i>(sa.length-1)) { sToken = new String(); } else { sToken = sa; }
    elel="<"+_columnNames[i]+">"+sToken+"</"+_columnNames[i]+">";
    if (i==0) {
    ele=ele.concat(hdr1);ele=ele.concat(hdr2);ele=ele.concat(hdr4);ele=ele.concat(elel);
    else
    if (i==NUM_COLS - 1) {
    ele=ele.concat(elel);ele=ele.concat(hdr5);ele=ele.concat(hdr3);
    else {
    ele=ele.concat(elel);
    textReader.close();
    catch (IOException e) {
    return (new StringBufferInputStream(ele));
    public static void main( String args[] ) {
    stbuf1 genxml_obj = new stbuf1 ();
    String ptxt=new String(args[0]);
    genxml_obj.createxml(ptxt); }}

    Well,i think you can use the streaming API for xml processing provided by weblogic.It is pull model,not push model like SAX.with it,you can select the events you want without having to react to every event,and you can filter the events out.
    Sun also provide such streaming API for xml processing,and i got an very simple introduction about it on the Chinese Sun developer site.but i couldn't find any other infomation about it elsewhere! If you have such materials,please send to my email:[email protected],and if I have it,i will be sure to post the links here.hope it helps more or less:)
    @smile@

  • XML Sax Exception with 9.2.0.5 express*.jar files for Olap API

    I was using the olap_api_92.jar that
    came with jdeveloper for the olap api and having a coding problem.. In trying to see
    if I could resolve the previous problem, I set my classpath to use the jar files provided with the 9.2.0.5
    install for AiX.. all beginning with express*.jar
    I now get an XML parsing error that I can't fix..
    which jar is good, the olap_api_92.jar seems to work..
    Help!
    thanks,
    Lisa Cox
    OCLC Inc.
    java.lang.RuntimeException: org.xml.sax.SAXParseException: <Line 179, Column 18>: XML-0124: (Fatal Error) An attribute cannot appear more than once in the same start tag.
    at oracle.olapi.metadata.MetadataFetcher.processXML(MetadataFetcher.java:237)
    at oracle.olapi.metadata.MetadataFetcher.fetchBaseMetadataObjects(MetadataFetcher.java:180)
    at oracle.olapi.metadata.BaseMetadataProvider.fetchMetadataObject(BaseMetadataProvider.java:150)
    at oracle.olapi.metadata.BaseMetadataProvider.fetchMetadataObject(BaseMetadataProvider.java:107)
    at oracle.olapi.metadata.mdm.MdmMetadataProvider.getMetadataObject(MdmMetadataProvider.java:147)
    at oracle.olapi.metadata.mdm.MdmMetadataProvider.getRootSchema(MdmMetadataProvider.java:174)
    at oracle.express.mdm.MdmMetadataProvider.getRootSchema(MdmMetadataProvider.java:144)
    at org.oclc.xwc.olap.OlapClient.main(OlapClient.java:494)

    The OLAP component versions are empty.
    <Check key="OLAP Catalog version" value=""/>
    <Check key="OLAP AW Engine version" value=""/>
    <Check key="OLAP API Server version" value=""/>
    Please doublecheck that the catpatch.sql script ran without any errors.
    Aneel Shenker
    Senior Product Manager
    Oracle Corp.

  • Xml parsing using java DefaultHandler of org.xml.sax.helpers.DefaultHandler

    i am using
    org.xml.sax.helpers.DefaultHandler api for parsing xml file ,while parsing i am getting exception sometimes ,
    i am using code below to parse the element and then store it to vectore
    parser truncate the charaacters sometimes like parsing string
    " NJ-HealthCare " i am getting only " NJ-HealthCare " and remaing characters are added in new element
    public void characters(char ch[], int start, int length) {
    try{
    ElementVal="";
    System.out.println(" start "+start+" ength :: "+length);
    String ElementVal = new String(ch,start,length);
    v.addElement( ElementVal );
    }catch(Exception ex){
    System.out.println("Exception in vector::"+ex);
    System.out.println(""+ex.getMessage());
    ex.printStackTrace();
    }

    This is an FAQ in the XML forum. The characters() method is not required to give you an entire text node all at once. The parser is free to split up the text node and call characters() several times if it likes. Your program will have to account for that possibility.

  • Detecting transform errors when using org.xml.sax.XMLFilter

    I am using javax.xml.transform.sax.SAXTransformerFactory.newXMLFilter to transform xml against a pipeline of stylesheets (See function testPipelineTransform in the example below). The process works okay, excepting that I cannot figure out how to detect errors in the transformation process.
    I would like to achieve the same result for the pipeline process as I would for a single transformation using javax.xml.transform.Transformer.setErrorListener. The example below demonstrates how the call to javax.xml.transform.Transformer.setErrorListener does not generate the same result when using org.xml.sax.XMLFilter as it does when using a single transformation.
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
    import org.xml.sax.SAXException;
    import org.xml.sax.InputSource;
    import org.xml.sax.XMLReader;
    import org.xml.sax.XMLFilter;
    import javax.xml.transform.ErrorListener;
    import javax.xml.transform.Source;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerException;
    import javax.xml.transform.TransformerFactory;
    import javax.xml.transform.TransformerConfigurationException;
    import javax.xml.transform.sax.SAXTransformerFactory;
    import javax.xml.transform.sax.SAXSource;
    import javax.xml.transform.stream.StreamSource;
    import javax.xml.transform.stream.StreamResult;
    import java.io.*;
    public class FilterChain {
        static private final String newline = System.getProperty("line.separator");
         public static void main(String argv[]) {
              System.out.println("Testing pipeline transform");
              testPipelineTransform();
              System.out.println("Testing single transform");
              testXsltSingleTransform();
         } // main
         static private void testPipelineTransform() {
              try {
                   // Set up the input stream
                   BufferedInputStream bis = new BufferedInputStream(
                             new ByteArrayInputStream(getExample().getBytes()));
                   InputSource input = new InputSource(bis);
                   // Set up to read the input file
                   SAXParserFactory spf = SAXParserFactory.newInstance();
                   SAXParser parser = spf.newSAXParser();
                   XMLReader reader = parser.getXMLReader();
                   // Create the filters
                   SAXTransformerFactory stf = (SAXTransformerFactory) TransformerFactory
                             .newInstance();
                   XMLFilter filter1 = stf.newXMLFilter(new StreamSource(new StringReader(getStylesheet1())));
                   XMLFilter filter2 = stf.newXMLFilter(new StreamSource(new StringReader(getStylesheet2())));
                   // Wire the output of the reader to filter1
                   // and the output of filter1 to filter2
                   filter1.setParent(reader);
                   filter2.setParent(filter1);
                   // Set up the output stream
                   StreamResult result = new StreamResult(System.out);
                   // Set up the transformer to process the SAX events generated
                   // by the last filter in the chain
                   Transformer transformer = stf.newTransformer();
                   transformer.setErrorListener(new ErrorListener() {
                        public void error(TransformerException te)
                                  throws TransformerException {
                             System.out.println("Transform generated Transform Error");
                             System.out.println(te.getMessage());
                        public void fatalError(TransformerException te)
                                  throws TransformerException {
                             System.out
                                       .println("Transform generated Transform Fatal Error");
                             System.out.println(te.getMessage());
                        public void warning(TransformerException te)
                                  throws TransformerException {
                             System.out.println("Transform generated Transform Warning");
                             System.out.println(te.getMessage());
                   SAXSource transformSource = new SAXSource(filter2, input);
                   transformer.transform(transformSource, result);
              } catch (TransformerConfigurationException tce) {
                   // Error generated by the parser
                   System.out.println("\n** Transformer Factory error");
                   System.out.println("   " + tce.getMessage());
                   // Use the contained exception, if any
                   Throwable x = tce;
                   if (tce.getException() != null)
                        x = tce.getException();
                   x.printStackTrace();
              } catch (TransformerException te) {
                   // Error generated by the parser
                   System.out.println("\n** Transformation error");
                   System.out.println("   " + te.getMessage());
                   // Use the contained exception, if any
                   Throwable x = te;
                   if (te.getException() != null)
                        x = te.getException();
                   x.printStackTrace();
              } catch (SAXException sxe) {
                   // Error generated by this application
                   // (or a parser-initialization error)
                   Exception x = sxe;
                   if (sxe.getException() != null)
                        x = sxe.getException();
                   x.printStackTrace();
              } catch (ParserConfigurationException pce) {
                   // Parser with specified options can't be built
                   pce.printStackTrace();
         static private void testXsltSingleTransform() {
              try {
                   BufferedInputStream bis = new BufferedInputStream(
                             new ByteArrayInputStream(getExample().getBytes()));
                   // Set up the output stream
                   StreamResult result = new StreamResult(System.out);
                   InputSource input = new InputSource(bis);
                   TransformerFactory factory = TransformerFactory.newInstance();
                   Source source = new StreamSource(new StringReader(getStylesheet2()));
                   Transformer stylesheet = factory.newTransformer(source);
                   stylesheet.setErrorListener(new ErrorListener() {
                        public void error(TransformerException te)
                                  throws TransformerException {
                             System.out.println("Transform generated Transform Error");
                             System.out.println(te.getMessage());
                        public void fatalError(TransformerException te)
                                  throws TransformerException {
                             System.out
                                       .println("Transform generated Transform Fatal Error");
                             System.out.println(te.getMessage());
                        public void warning(TransformerException te)
                                  throws TransformerException {
                             System.out.println("Transform generated Transform Warning");
                             System.out.println(te.getMessage());
                   SAXSource transformSource = new SAXSource(input);
                   stylesheet.transform(transformSource, result);
              } catch (Exception exc) {
                   exc.printStackTrace();
         private static String getStylesheet1() {
              return
                     "<?xml version='1.0' encoding='ISO-8859-1'?>" + newline
                   + "<xsl:stylesheet" + newline
                   + "xmlns:xsl='http://www.w3.org/1999/XSL/Transform'" + newline
                   + "version='1.0'>" + newline
                   + "<xsl:output method='xml'/>" + newline
                   + "<xsl:template match='/'>" + newline
                   + "<DontCareAboutContent></DontCareAboutContent>" + newline
                   + "</xsl:template>" + newline
                   + "</xsl:stylesheet>" + newline;
         private static String getStylesheet2() {
              return
                     "<?xml version='1.0' encoding='ISO-8859-1'?>" + newline
                   + "<xsl:stylesheet" + newline
                   + "xmlns:xsl='http://www.w3.org/1999/XSL/Transform'" + newline
                   + "version='1.0'>" + newline
                   + "<xsl:output method='html'/>" + newline
                   + "<xsl:template match='/'>" + newline
                  + "<html><body>" + newline
                 + "<xsl:message>" + newline
                 + "Error Message for the xslt processor" + newline
                 + "</xsl:message>" + newline
                 + "Dont care about the xslt content," + newline
                 + "The only significant part is the xsl:message element" + newline
                 + "which results in a error to be handled by the xslt" + newline
                 + "processor" + newline
                   + "</body></html>" + newline
                   + "</xsl:template>" + newline
                   + "</xsl:stylesheet>" + newline;
         private static String getExample() {
              return
                     "<?xml version='1.0' encoding='ISO-8859-1'?>" + newline
                   + "<DontCareAboutContent>" + newline
                   + "</DontCareAboutContent>" + newline;
    }

    I made the following change which solves the problem but the sollution is tightly coupled to Xalan. If anyone has any ideas, I would still like to find a way to achieve the desired result using JAXP API's.
                   XMLFilter filter1 = stf.newXMLFilter(new StreamSource(new StringReader(getStylesheet1())));
                   if (filter1 instanceof org.apache.xalan.transformer.TrAXFilter) {
                        ((org.apache.xalan.transformer.TrAXFilter)filter1).getTransformer().setErrorListener(...);
    ...

  • Collecting plug-in metrics using XML API from Perl?

    Hi all,
    We are building a plug-in to retrieve metrics over an XML API.
    The QueryDescriptor of each metric will do a call to the Agent's Perl script. This Perl script will then do the actual XML API call, to retrieve the metric's values.
    Does anyone have experience with this? We needed to install a few extra Perl modules from CPAN, to provide the high-level HTTP(s) communication. These modules are not in the Perl that’s used by the Oracle Agent, so I’m not sure if this is going to work when called by the Agent.
    Did any of you use an XML API? Did you make this a prereq (installing modules) or is there an alternative solution?
    Many thanks,
    Ed

    Thank you, Ash. I read the example quickly, and found (quoted)from the paper - "the Applet was designed as compact as possible in order to limit download time and to fit in a 50K jar file. The JAXP XML Parsing API package, including the SAX parser from SUN Project X (approximately 150K) is one of the smallest implementations we were able to use. It is, however, still too large to be downloaded for each session; therefore, it was installed locally to keep the download time as low as possible."
    However, in my current design, I can not ask each customer to install the JAXP API locally, so it seems that the API needs to be downloaded during the run time (am I right?). So the same problem will occur as that stated in the paper - the jar file is still too large to be downloaded for each session. Is there any lightweight API to solve it?
    BTW, as you might see, the paper was published in year 2000, I don't think the JDK plugin supported XML at that time, so it is quite reasonable to download JAXP API in that paper. But my current question is - as I posted in my previous message - whether the newest JDK plugin (JDK1.4) support Java XML API?
    Many many thanks.
    - Sun

Maybe you are looking for

  • Booting issue on a new installation on Acer Aspire 4752 laptop.

    Hi All,      I have done a new installation of OS on a Acer laptop stated above.  However, due to some reason, during the booting up process, it will always stuck at screen right before it enter into the logon screen. I will have to press Enter in or

  • IPod Nano Screen Scratches - ENDED FOR FREE!

    Are you tired of how eaisly the iPod Nano scratches? I was, but didn't want to invest in a case that would increase the perfectly small size, nor an expensive film that might not work. I have come up with a free solution. If you go to your local shoe

  • Huge gap between icons in menu bar

    Lately the menu bar will randomly throw in a huge gap between icons. Initially I thought it was a specific app, but now it's happening with all sorts of random icons there...definitely not the same icon each time. The icons you see on the left are th

  • Transaction Launcher  in system ERP 6.0 EIC

    Hello, Do you know where to find the properly configuration for the transaction launcher of EIC on ERP 6.0? Because actually doesn´t run well Thanks for your help! Actually we have active service  ccmp_rabox into "SICF" and in the "spro" IMG/Personal

  • 9i Rel 1, J2SE 1.3

    Does anyone know if Release 1 of 9i works with J2SE 1.3?