Hi Alexander,

1) On the schema element, you need to get a cursor: XmlObject.getCursor() and 
use the method: XmlCursor.insertNamespace ( String prefix, String namespace )

2) You can allways look at how scomp is implemented: 
org.apache.xmlbeans.impl.tool.SchemaCompiler which is a now standard way, or 
use the API:

import java.util.ArrayList;
import java.util.List;

import org.apache.xmlbeans.impl.xb.xsdschema.SchemaDocument;
import org.apache.xmlbeans.XmlError;
import org.apache.xmlbeans.XmlOptions;
import org.apache.xmlbeans.XmlException;
import org.apache.xmlbeans.XmlBeans;
import org.apache.xmlbeans.XmlObject;

public class MySchemaCompile
{

            // your schema here
    private static String SCHEMA = "<?xml version=\"1.0\" 
encoding=\"UTF-8\"?>\n" +
            "<xsd:schema xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"\n"; +
            "                   elementFormDefault=\"qualified\"\n" +
            "                   attributeFormDefault=\"unqualified\" \n" +
            "                   targetNamespace=\"http://foo/\"\n"; +
            "                   xmlns:foo=\"http://foo/\";>\n" +
            "\n" +
            "    <xsd:element name=\"bar\" type=\"xsd:string\" />\n"  
            "\n" +
            "</xsd:schema>";


    public static void main(String[] args)
    {
        try
        {
            SchemaDocument schemaDoc = SchemaDocument.Factory.parse(SCHEMA);

            // check it is valid
            System.out.println("===== is valid? -> "+schemaDoc.validate());

            // compile
            System.out.println("===== compiling?");
            compile(schemaDoc);

            System.out.println("END");
        }
        catch (Exception e)
        {
            System.out.println("ERROR");
            e.printStackTrace();
        }
    }

    private static void compile(SchemaDocument schemaDoc) throws Exception
    {
        XmlOptions options = new XmlOptions();
        List<XmlError> errors = new ArrayList<XmlError>();
        options.setErrorListener(errors);
        options.setCompileNoAnnotations();
        options.setValidateTreatLaxAsSkip();
        options.setLoadLineNumbers();

        // compile
        XmlBeans.compileXsd(new XmlObject[] { schemaDoc }, 
                            XmlBeans.getBuiltinTypeSystem(), options);

        // check validation errors
        for(XmlError error : errors)
        {
            if (error.getSeverity() == XmlError.SEVERITY_ERROR)
            {
                throw new XmlException(error.getMessage(), null, errors);
            }
        }
    }
}

I hope this helps.

Cezar

-----Original Message-----
From: Alexander Kampmann [mailto:campino_a...@gmx.de] 
Sent: Monday, May 31, 2010 10:26 AM
To: user@xmlbeans.apache.org
Subject: problems adding namespace to a schema generated in code

hi there, 

i'm using the org.apache.xmlbeans.impl.xb.xsdschema.SchemaDocument (and 
related) classes to create a xml- schema in code. 
It works well and I can write the schema to a file, but there are two problems: 

1) I can't figure out how to add something like xmlns:tns="..." to my schema- 
Element. Setting the target namespace works, but the schema is invalid without 
that attribute. 

2) By now I write the schema to a file and start scomp using 
Runtime.getDefaultRuntime().exec(), but in my eyes it would be nicer to start 
the compilation from my program directly. Is there a way to do so? I have had a 
look at the scomp- sources, but I didn't get wise from it. 

Thanks for your advice, 

Alex
-- 
GRATIS für alle GMX-Mitglieder: Die maxdome Movie-FLAT!
Jetzt freischalten unter http://portal.gmx.net/de/go/maxdome01

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@xmlbeans.apache.org
For additional commands, e-mail: user-h...@xmlbeans.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@xmlbeans.apache.org
For additional commands, e-mail: user-h...@xmlbeans.apache.org

Reply via email to