XMLBeans doesn't have "native" knowledge of any Schema types. When you
pass in a SchemaTypeLoader as a parameter of compileXsd(), it has to be
able to find any types for which you don't have the source file. In this
case, since you don't have the source file for the Soap schema (as
schemaLocation on import or as one of the arguments to .compileXsd),
then the SchemaTypeLoader has to "know" about those types.
 
I happened to add at some time one SchemaTypeLoader specifically for
working with SOAP but I only got as far as adding the soap:array
attribute and soap:Array element.
So you have several choices:
 
1. add the SOAP Schema to the list of Schemas you are compiling
2. go ahead and submit a patch to add the soap:string type to the
SoapEncSchemaTypeSystem (which would benefit the community and which I
would be happy to review) and then use XmlBeans.typeLoaderUnion() to
union that with the BuiltinTypeSystem
3. precompile the SOAP Schema into a jar and then use
XmlBeans.typeLoaderUnion() and XmlBeans.typeLoaderForResource() to load
the precompiled version from that jar.
 
Radu
 
________________________________

From: Anil Edakkunni [mailto:[EMAIL PROTECTED] 
Sent: Wednesday, November 08, 2006 2:23 PM
To: user@xmlbeans.apache.org
Subject: Resolving types in imported schema


Hi,

When I try to compile the following schema definition (which is part of
a WSDL...):

<wsdl:definitions targetNamespace=" http://mydomain.com/testservice
<http://mydomain.com/testservice>  "
                  xmlns:impl="http://mydomain.com/testservice";
                  xmlns:wsdlsoap=" http://schemas.xmlsoap.org/wsdl/soap/
"
                  xmlns:apachesoap="http://xml.apache.org/xml-soap";
                  xmlns:soapenc="
http://schemas.xmlsoap.org/soap/encoding/";
                  xmlns:xsd="http://www.w3.org/2001/XMLSchema "
                  xmlns:wsdl=" http://schemas.xmlsoap.org/wsdl/
<http://schemas.xmlsoap.org/wsdl/> ">
    <wsdl:types>
        <schema targetNamespace=" http://mydomain.com/testservice
<http://mydomain.com/testservice> " xmlns="
http://www.w3.org/2001/XMLSchema <http://www.w3.org/2001/XMLSchema> "
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/ "
>
            <import namespace="
http://schemas.xmlsoap.org/soap/encoding/
<http://schemas.xmlsoap.org/soap/encoding/> "/>

            <complexType name="SOAPStruct">
                <sequence>
                    <element name="varInt" type="xsd:int"/> 
                    <element name="varFloat" type="xsd:float"/>
                    <element name="varString" nillable="true"
type="soapenc:string"/>
                </sequence>
            </complexType>

        </schema>

using the following code:

    public static SchemaTypeSystem compileSchema(Definition def) throws
AppException { 
        if (isDebug) LOG.debug("Compiling schema...");

        SchemaTypeSystem sts = null;

        Map nsDefs = def.getNamespaces();

        List schematas = ServiceUtils.getSchemata(def); 

        if (schematas == null) {
            sts = null;
        } else {

            XmlObject [] xmloa = new XmlObject[schematas.size()];
            int i = 0;

            XmlOptions xmlopts = new XmlOptions(); 

            // For imported schematas
            xmlopts.setCompileDownloadUrls();

            xmlopts.setCompileNoUpaRule();

            // For NS prefixes defined in the WSDL element, and
inherited into the schema element's scope. 
            xmlopts.setLoadAdditionalNamespaces(nsDefs);

            //xmlopts.setCompileNoValidation();

            //xmlopts.setSaveImplicitNamespaces(nsDefs);
            //xmlopts.setSaveAggressiveNamespaces(); 
            //xmlopts.setSaveNamespacesFirst();


            Iterator it = schematas.iterator();
            while (it.hasNext()) {

                Schema si = (Schema) it.next();

                //addAdditionalNamespaces(si, nsDefs); 

                try {
                    if (isDebug) LOG.debug("Parsing Schema: " +
si.getDocumentBaseURI());

                    xmloa[i++] =
XmlObject.Factory.parse(si.getElement(), xmlopts); 
                } catch (XmlException e) {
                    throw new AppException("compileSchema: Error parsing
schema: " + si.getDocumentBaseURI(), e);
                }

            }

            try {
                if (isDebug) LOG.debug("Compiling schemata...");

                sts = XmlBeans.compileXsd(xmloa,
                        XmlBeans.getBuiltinTypeSystem(),
                        xmlopts); 

            } catch (XmlException xe) {
                throw new AppException("compileSchema: Error compiling
schemata: ", xe);
            }

        }

        return sts;
    }

I get the following exception:

org.apache.xmlbeans.XmlException: error: src-resolve: type 'string@
http://schemas.xmlsoap.org/soap/encoding/
<http://schemas.xmlsoap.org/soap/encoding/> ' not found.


Can anyone tell me why? 

I did add setCompileDownloadUrls() (per
http://www.mail-archive.com/search?l=user%40xmlbeans.apache.org&q=import
+error+src-resolve ) and tried a bunch of other XmlOptions, but it still
is unable to resolve soapenc:string 

Thanks in advance,
Anil.

P.S. 
1. (UPDATE) The SOAP encoding schema types do get resolved successfully
if I add a schemaLocation to the import element. 



_______________________________________________________________________
Notice:  This email message, together with any attachments, may contain
information  of  BEA Systems,  Inc.,  its subsidiaries  and  affiliated
entities,  that may be confidential,  proprietary,  copyrighted  and/or
legally privileged, and is intended solely for the use of the individual
or entity named in this message. If you are not the intended recipient,
and have received this message in error, please immediately return this
by email and then delete it.

Reply via email to