problem:
in turbine-schema.xml there is
<!DOCTYPE database SYSTEM
"http://java.apache.org/turbine/dtd/database.dtd">
so you need to be online to use torque (as in tdk10a)
if you are behind a firewall with authentication you will never be able
to use it!!

solution:
use org.xml.sax.EntityResolver to get the dtd file.
now we can change the line to
<!DOCTYPE database SYSTEM "database.dtd">
and put the dtd file into the jar.

here is the code:

Index: ./src/java/org/apache/turbine/torque/transform/XmlToAppData.java
===================================================================
RCS file:
/products/cvs/turbine/turbine/src/java/org/apache/turbine/torque/transform/XmlToAppData.java,v

retrieving revision 1.5
diff -u -r1.5 XmlToAppData.java
--- ./src/java/org/apache/turbine/torque/transform/XmlToAppData.java
2000/12/14 23:49:55 1.5
+++ ./src/java/org/apache/turbine/torque/transform/XmlToAppData.java
2001/01/07 20:54:40
@@ -111,13 +111,16 @@
             app = new AppData();

             SAXParser parser = new SAXParser();

+            DTDResolver dtdResolver = new DTDResolver();
+            parser.setEntityResolver(dtdResolver);
+
             // We don't use an external content handler - we use this
object
             parser.setContentHandler(this);


and the Resolver:

package org.apache.turbine.torque.transform;

// JDK classes
import java.io.*;
import java.net.URL;
import java.util.*;

// Xerces classes
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import org.apache.xerces.parsers.*;

// Turbine
import org.apache.turbine.services.db.*;
import org.apache.turbine.torque.model.*;

public class DTDResolver implements EntityResolver
{
    InputSource databaseDTD;

    public DTDResolver()
    {
        try
        {
            databaseDTD = new InputSource(getClass()
                .getResource("database.dtd").openStream());
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
        }
    } // DTDResolver()

    public InputSource resolveEntity(String publicId, String systemId)
    {
        if ("database.dtd".equals(systemId))
        {
            System.out.println("Resolver: use database.dtd");
            return databaseDTD;
        }
        else
        {
            System.out.println("Resolver: used " + systemId);
            return getInputSource(systemId);
        }
    } // resolveEntity(String, String)

    public InputSource getInputSource(String urlString)
    {
        try
        {
            URL url = new URL(urlString);
            return new InputSource(url.openStream());
        }
        catch (IOException ex)
        {
            ex.printStackTrace();
        }
        return new InputSource();
    } // getInputSource(String)
}

oh and database.dtd must be in the jar!!
org/apache/turbine/torque/transform/database.dtd

martin



------------------------------------------------------------
To subscribe:        [EMAIL PROTECTED]
To unsubscribe:      [EMAIL PROTECTED]
Search: <http://www.mail-archive.com/turbine%40list.working-dogs.com/>
Problems?:           [EMAIL PROTECTED]

Reply via email to