[ 
https://issues.apache.org/jira/browse/XERCESC-1743?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

PeiHua updated XERCESC-1743:
----------------------------

    Description: 
Xerces reports it can not find the elment when including the other schema and 
the schema's element depended on the othe elment.
But it validates ok in XmlSpy and Oxygen.

================================================ 

void XercesParser::doValidation(const char *theStr, bool setDefaultValue, bool 
ignoreError) 
{ 
    REPORT_INFO("[XercesParser] doValidation"); 

    // create parser if it is not available 
    if (myParser == NULL) 
    { 
        myParser = XMLReaderFactory::createXMLReader(); 
        myParser->setFeature(XMLUni::fgSAX2CoreValidation, true); 
        myParser->setFeature(XMLUni::fgSAX2CoreNameSpaces, true); 
        myParser->setFeature(XMLUni::fgXercesSchema, true); 
        myParser->setFeature(XMLUni::fgXercesDynamic, true); 
        myParser->setFeature(XMLUni::fgXercesSchemaFullChecking, true); 
        myParser->setFeature(XMLUni::fgSAX2CoreNameSpacePrefixes, true); 
        myParser->setFeature(XMLUni::fgXercesCacheGrammarFromParse, true); 
        myParser->setFeature(XMLUni::fgXercesUseCachedGrammarInParse, true); 

        mySchema = XMLString::transcode(mySchemaLoc.data()); 
        myParser->setProperty(XMLUni::fgXercesSchemaExternalSchemaLocation, 
mySchema); 
    } 

    REPORT_INFO("doValidation, mySchemaLoc: " << mySchemaLoc); 
    REPORT_INFO("doValidation, theStr: " << theStr); 

    if(setDefaultValue) 
        myParser->setContentHandler(myHandler); 
    else 
        myParser->setContentHandler(NULL); 

    if(!ignoreError) 
        myParser->setErrorHandler(myHandler); 
    else 
        myParser->setErrorHandler(NULL); 


    try 
    { 
        // added for supporting file parsing 
        RWURL url(theStr); 
        if (url.isValid() == false) 
        { 
            int len = strlen(theStr); 
            const char *bufId = "CAI3G"; 

            // the buffer must be allocated dynamically 
            MemBufInputSource theMBIS(reinterpret_cast<const XMLByte*>(theStr), 
(const unsigned int)len, bufId); 
            myParser->parse(theMBIS); 
        } 
        else 

            myParser->parse(theStr); 

    } 
    { 
        // handle CAI3G request format error 
        throw e; 
    } 
    catch (...) 
    { 
        // handle other errors 
        XMLString::release(&mySchema); 

        // the parser must be released here 
        delete myParser; 
        myParser = NULL; 

        throw FDSException::FDSStandardException("doValidation, An error 
occurred during parsing.", 0); 
    } 
} 

void XercesParser::doValidation(const FDSNamedValue& theNV, bool 
setDefaultValue, bool ignoreError) 
{ 
    REPORT_INFO("[XercesParser] doValidation"); 

    ostrstream tmpStr; 
    theNV.print(tmpStr, 0); 
    tmpStr.put('\0'); 
    char *tmpStr1 = tmpStr.str(); 

    RWCString tmpStr2(tmpStr1); 
    delete[] tmpStr1; 

    doValidation(tmpStr2.data(), setDefaultValue, ignoreError); 
} 

And Invoke the functions before. 
--------------------------------------------------- 

const RWCString schemaLoc = "http://www.xxx.com/ test.xsd"; 

............. 

        // get parser object 
        XercesParser* theParser = theObj->getObj(); 

        // do validation 
        try 
        { 
            theParser->doValidation(*theNV); 
        } 
        catch (FDSException::FDSStandardException& e) 
        { 
            // release cached object 
            ObjectPool::getInstance()->releaseObject(theObj); 
            cout << "[testMain] Error: " << e.information() << endl; 
            cout << "[testMain] Reason: " << e.reason() << endl; 
        } 
================================================ 

schema and xml below. 

Xml -> A.xsd 
A.xsd  include B.xsd

<?xml version="1.0" encoding="UTF-8"?>
<createService groupId="1234561702" serviceProviderId="1234561702" 
xmlns="http://www.xxx.com/abc/";
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
    xsi:schemaLocation="http://www.xxx.com/abc/ A.xsd" >
    <serviceProviderId>1234561702</serviceProviderId>                       
    <groupId>1234561702</groupId>                           
    <serviceName>Enhanced Outgoing Calling Plan</serviceName>
</createService>

A.xsd
<xs:schema xmlns="http://www.xxx.com/abc/ " 
xmlns:core="http://www.xxx.com/ema/UserProvisioning/BWAS/14/SharedTypes/Core/"; 
xmlns:xs="http://www.w3.org/2001/XMLSchema"; 
targetNamespace="http://www.xxx.com/abc/ " elementFormDefault="qualified" 
attributeFormDefault="unqualified">
        <xs:import 
namespace="http://www.xxx.com/ema/UserProvisioning/BWAS/14/SharedTypes/Core/"schemaLocation="ema_UserProvisioning_BWAS_14_SharedTypes_Core_.xsd"/>
        <xs:include schemaLocation="B.xsd"/>
        <xs:element name="createService" 
substitutionGroup="cai3g:CreateMODefinition">
                <xs:annotation>
                        <xs:documentation>Target  
EnhancedOutgoingCallingPlan</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                        <xs:complexContent>
                                <xs:extension 
base="cai3g:AbstractCreateAttributeType">
                                        <xs:sequence>
                                                <xs:element 
name="serviceProviderId" type="ServiceProviderId"/>
                                                <xs:element 
name="departmentType" type="DepartmentType"/>
                                                <xs:element name="serviceName">
                                                        <xs:simpleType>
                                                                <xs:restriction 
base="xs:token">
                                                                        
<xs:enumeration value="Enhanced Outgoing Calling Plan"/>
                                                                
</xs:restriction>
                                                        </xs:simpleType>
                                                </xs:element>
                                                <xs:element 
name="serviceSpecificData" minOccurs="0">
                                                        <xs:complexType>
                                                                <xs:sequence>
                                                                        
<xs:element name="DepartmentAuthorizationCodeList">
                                                                                
<xs:annotation>
                                                                                
        
<xs:documentation>GroupOutgoingCallingPlanDepartmentAuthorizationCodeAddListRequest</xs:documentation>
                                                                                
</xs:annotation>
                                                                                
<xs:complexType>
                                                                                
        <xs:sequence>
                                                                                
                <xs:element name="serviceProviderId" type="ServiceProviderId"/>
                                                                                
                <xs:element name="groupId" type="GroupId"/>
                                                                                
                <xs:element name="departmentKey" type="DepartmentKey" 
minOccurs="0"/>
                                                                                
                <xs:element name="codeEntry" maxOccurs="unbounded">
                                                                                
                        <xs:complexType>
                                                                                
                                <xs:complexContent>
                                                                                
                                        <xs:extension 
base="OutgoingCallingPlanAuthorizationCodeEntry">
                                                                                
                                                <xs:attribute name="code" 
type="OutgoingCallingPlanAuthorizationCode" use="required"/>
                                                                                
                                        </xs:extension>
                                                                                
                                </xs:complexContent>
                                                                                
                        </xs:complexType>
                                                                                
                        <xs:key name="skeyccccc.2.1">
                                                                                
                                <xs:selector xpath="."/>
                                                                                
                                <xs:field xpath="@code"/>
                                                                                
                        </xs:key>
                                                                                
                        <xs:keyref name="skeycccccRef.2.1" 
refer="skeyccccc.2.1">
                                                                                
                                <xs:selector xpath="."/>
                                                                                
                                <xs:field xpath="code"/>
                                                                                
                        </xs:keyref>
                                                                                
                </xs:element>
                                                                                
        </xs:sequence>
                                                                                
        <xs:attribute name="serviceProviderId" type="ServiceProviderId" 
use="required"/>
                                                                                
        <xs:attribute name="groupId" type="GroupId" use="required"/>
                                                                                
</xs:complexType>
                                                                                
<xs:key name="skeyccccc.2">
                                                                                
        <xs:selector xpath="."/>
                                                                                
        <xs:field xpath="@serviceProviderId"/>
                                                                                
        <xs:field xpath="@groupId"/>
                                                                                
</xs:key>
                                                                                
<xs:keyref name="skeycccccRef.2" refer="skeyccccc.2">
                                                                                
        <xs:selector xpath="."/>
                                                                                
        <xs:field xpath="serviceProviderId"/>
                                                                                
        <xs:field xpath="groupId"/>
                                                                                
</xs:keyref>
                                                                        
</xs:element>
                                                                </xs:sequence>
                                                        </xs:complexType>
                                                </xs:element>
                                        </xs:sequence>
                                        <xs:attribute name="serviceProviderId" 
type="ServiceProviderId" use="required"/>
                                        <xs:attribute name="groupId" 
type="GroupId" use="required"/>
                                </xs:extension>
                        </xs:complexContent>
                </xs:complexType>
                <xs:key name="skeyccccc">
                        <xs:selector xpath="."/>
                        <xs:field xpath="@serviceProviderId"/>
                        <xs:field xpath="@groupId"/>
                </xs:key>
                <xs:keyref name="skeycccccRef" refer="skeyccccc">
                        <xs:selector xpath="."/>
                        <xs:field xpath="serviceProviderId"/>
                        <xs:field xpath="groupId"/>
                </xs:keyref>
        </xs:element>

.......

B.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema";>
    <xs:complexType name="DepartmentType">
        <xs:sequence>
            <xs:element name="deptType">
                <xs:simpleType>
                    <xs:restriction base="xs:token">
                        <xs:enumeration value="Group"/>
                        <xs:enumeration value="Enterprise"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="contact" type="Contact"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="Contact">
        <xs:annotation>
            <xs:documentation>Contact information.</xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="contactName" nillable="true" minOccurs="0">
                <xs:simpleType>
                    <xs:restriction base="xs:token">
                        <xs:minLength value="1"/>
                        <xs:maxLength value="30"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="contactNumber" nillable="true" minOccurs="0">
                <xs:simpleType>
                    <xs:restriction base="xs:token">
                        <xs:minLength value="1"/>
                        <xs:maxLength value="30"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="contactEmail" type="EmailAddress" nillable="true" 
minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:simpleType name="EmailAddress">
        <xs:annotation>
            <xs:documentation>Email Address</xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:token">
            <xs:minLength value="1"/>
            <xs:maxLength value="80"/>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>

The Xerces will report that it can't find the element "contactNumber".


  was:
Xerces reports it can not find the elment when including the other schema and 
the schema's element depended on the othe elment.
But it validates ok in XmlSpy and Oxygen.

================================================ 

void XercesParser::doValidation(const char *theStr, bool setDefaultValue, bool 
ignoreError) 
{ 
    REPORT_INFO("[XercesParser] doValidation"); 

        //Dynamically create myParser every time. for TR HH31020/HH41398. 
ekaizli 
        /*if (myParser) 
        { 
                XMLString::release(&mySchema); 

                delete myParser; 
                myParser = NULL; 
        }*/ 

    // create parser if it is not available 
    if (myParser == NULL) 
    { 
        myParser = XMLReaderFactory::createXMLReader(); 
        myParser->setFeature(XMLUni::fgSAX2CoreValidation, true); 
        myParser->setFeature(XMLUni::fgSAX2CoreNameSpaces, true); 
        myParser->setFeature(XMLUni::fgXercesSchema, true); 
        myParser->setFeature(XMLUni::fgXercesDynamic, true); 
        myParser->setFeature(XMLUni::fgXercesSchemaFullChecking, true); 
        myParser->setFeature(XMLUni::fgSAX2CoreNameSpacePrefixes, true); 
        myParser->setFeature(XMLUni::fgXercesCacheGrammarFromParse, true); 
        myParser->setFeature(XMLUni::fgXercesUseCachedGrammarInParse, true); 

        mySchema = XMLString::transcode(mySchemaLoc.data()); 
        myParser->setProperty(XMLUni::fgXercesSchemaExternalSchemaLocation, 
mySchema); 
    } 

    REPORT_INFO("doValidation, mySchemaLoc: " << mySchemaLoc); 
    REPORT_INFO("doValidation, theStr: " << theStr); 

    if(setDefaultValue) 
        myParser->setContentHandler(myHandler); 
    else 
        myParser->setContentHandler(NULL); 

    if(!ignoreError) 
        myParser->setErrorHandler(myHandler); 
    else 
        myParser->setErrorHandler(NULL); 


    try 
    { 
        // added for supporting file parsing 
        RWURL url(theStr); 
        if (url.isValid() == false) 
        { 
            int len = strlen(theStr); 
            const char *bufId = "CAI3G"; 

            // the buffer must be allocated dynamically 
            MemBufInputSource theMBIS(reinterpret_cast<const XMLByte*>(theStr), 
(const unsigned int)len, bufId); 
            myParser->parse(theMBIS); 
        } 
        else 

            myParser->parse(theStr); 

    } 
    { 
        // handle CAI3G request format error 
        throw e; 
    } 
    catch (...) 
    { 
        // handle other errors 
        XMLString::release(&mySchema); 

        // the parser must be released here 
        delete myParser; 
        myParser = NULL; 

        throw FDSException::FDSStandardException("doValidation, An error 
occurred during parsing.", 0); 
    } 
} 

void XercesParser::doValidation(const FDSNamedValue& theNV, bool 
setDefaultValue, bool ignoreError) 
{ 
    REPORT_INFO("[XercesParser] doValidation"); 

    ostrstream tmpStr; 
    theNV.print(tmpStr, 0); 
    tmpStr.put('\0'); 
    char *tmpStr1 = tmpStr.str(); 

    RWCString tmpStr2(tmpStr1); 
    delete[] tmpStr1; 

    doValidation(tmpStr2.data(), setDefaultValue, ignoreError); 
} 

And Invoke the functions before. 
--------------------------------------------------- 

const RWCString schemaLoc = 
"http://schemas.ericsson.com/ema/UserProvisioning/BWASSV/14/User/Service/CommPilotExpress/
 /home/ehuapei/tools/validation 
/bin/test.xsd"; 

............. 

        // get parser object 
        XercesParser* theParser = theObj->getObj(); 

        // do validation 
        try 
        { 
            theParser->doValidation(*theNV); 
        } 
        catch (FDSException::FDSStandardException& e) 
        { 
            // release cached object 
            ObjectPool::getInstance()->releaseObject(theObj); 
            cout << "[testMain] Error: " << e.information() << endl; 
            cout << "[testMain] Reason: " << e.reason() << endl; 
        } 
================================================ 

schema and xml below. 

Xml -> A.xsd 
A.xsd  include B.xsd

<?xml version="1.0" encoding="UTF-8"?>
<createService groupId="1234561702" serviceProviderId="1234561702" 
xmlns="http://schemas.ericsson.com/ema/UserProvisioning/BWASSV/14/Group/Service/EnhancedOutgoingCallingPlan/";
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
    
xsi:schemaLocation="http://schemas.ericsson.com/ema/UserProvisioning/BWASSV/14/Group/Service/EnhancedOutgoingCallingPlan/
 A.xsd" >
    <serviceProviderId>1234561702</serviceProviderId>                       
    <groupId>1234561702</groupId>                           
    <serviceName>Enhanced Outgoing Calling Plan</serviceName>
</createService>

A.xsd
<xs:schema xmlns:ns2="http://schemas.ericsson.com/ema/UserProvisioning/"; 
xmlns:ns1="http://schemas.ericsson.com/ema/UserProvisioning/"; 
xmlns:cai3g="http://schemas.ericsson.com/cai3g1.2/"; 
xmlns="http://schemas.ericsson.com/ema/UserProvisioning/BWASSV/14/Group/Service/EnhancedOutgoingCallingPlan/";
 
xmlns:core="http://schemas.ericsson.com/ema/UserProvisioning/BWAS/14/SharedTypes/Core/";
 xmlns:xs="http://www.w3.org/2001/XMLSchema"; 
targetNamespace="http://schemas.ericsson.com/ema/UserProvisioning/BWASSV/14/Group/Service/EnhancedOutgoingCallingPlan/";
 elementFormDefault="qualified" attributeFormDefault="unqualified">
        <xs:import namespace="http://schemas.ericsson.com/cai3g1.2/"; 
schemaLocation="../../../../../../../cai3g1.2/cai3g1.2_.xsd"/>
        <xs:import 
namespace="http://schemas.ericsson.com/ema/UserProvisioning/"; 
schemaLocation="../../../../../ema_UserProvisioning_.xsd"/>
        <xs:import 
namespace="http://schemas.ericsson.com/ema/UserProvisioning/BWAS/14/SharedTypes/Core/";
 
schemaLocation="../../../../../BWAS/14/SharedTypes/Core/ema_UserProvisioning_BWAS_14_SharedTypes_Core_.xsd"/>
        <xs:include schemaLocation="B.xsd"/>
        <xs:element name="createService" 
substitutionGroup="cai3g:CreateMODefinition">
                <xs:annotation>
                        <xs:documentation>Target  
EnhancedOutgoingCallingPlan</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                        <xs:complexContent>
                                <xs:extension 
base="cai3g:AbstractCreateAttributeType">
                                        <xs:sequence>
                                                <xs:element 
name="serviceProviderId" type="ServiceProviderId"/>
                                                <xs:element 
name="departmentType" type="DepartmentType"/>
                                                <xs:element name="serviceName">
                                                        <xs:simpleType>
                                                                <xs:restriction 
base="xs:token">
                                                                        
<xs:enumeration value="Enhanced Outgoing Calling Plan"/>
                                                                
</xs:restriction>
                                                        </xs:simpleType>
                                                </xs:element>
                                                <xs:element 
name="serviceSpecificData" minOccurs="0">
                                                        <xs:complexType>
                                                                <xs:sequence>
                                                                        
<xs:element name="DepartmentAuthorizationCodeList">
                                                                                
<xs:annotation>
                                                                                
        
<xs:documentation>GroupOutgoingCallingPlanDepartmentAuthorizationCodeAddListRequest</xs:documentation>
                                                                                
</xs:annotation>
                                                                                
<xs:complexType>
                                                                                
        <xs:sequence>
                                                                                
                <xs:element name="serviceProviderId" type="ServiceProviderId"/>
                                                                                
                <xs:element name="groupId" type="GroupId"/>
                                                                                
                <xs:element name="departmentKey" type="DepartmentKey" 
minOccurs="0"/>
                                                                                
                <xs:element name="codeEntry" maxOccurs="unbounded">
                                                                                
                        <xs:complexType>
                                                                                
                                <xs:complexContent>
                                                                                
                                        <xs:extension 
base="OutgoingCallingPlanAuthorizationCodeEntry">
                                                                                
                                                <xs:attribute name="code" 
type="OutgoingCallingPlanAuthorizationCode" use="required"/>
                                                                                
                                        </xs:extension>
                                                                                
                                </xs:complexContent>
                                                                                
                        </xs:complexType>
                                                                                
                        <xs:key name="skeyccccc.2.1">
                                                                                
                                <xs:selector xpath="."/>
                                                                                
                                <xs:field xpath="@code"/>
                                                                                
                        </xs:key>
                                                                                
                        <xs:keyref name="skeycccccRef.2.1" 
refer="skeyccccc.2.1">
                                                                                
                                <xs:selector xpath="."/>
                                                                                
                                <xs:field xpath="code"/>
                                                                                
                        </xs:keyref>
                                                                                
                </xs:element>
                                                                                
        </xs:sequence>
                                                                                
        <xs:attribute name="serviceProviderId" type="ServiceProviderId" 
use="required"/>
                                                                                
        <xs:attribute name="groupId" type="GroupId" use="required"/>
                                                                                
</xs:complexType>
                                                                                
<xs:key name="skeyccccc.2">
                                                                                
        <xs:selector xpath="."/>
                                                                                
        <xs:field xpath="@serviceProviderId"/>
                                                                                
        <xs:field xpath="@groupId"/>
                                                                                
</xs:key>
                                                                                
<xs:keyref name="skeycccccRef.2" refer="skeyccccc.2">
                                                                                
        <xs:selector xpath="."/>
                                                                                
        <xs:field xpath="serviceProviderId"/>
                                                                                
        <xs:field xpath="groupId"/>
                                                                                
</xs:keyref>
                                                                        
</xs:element>
                                                                </xs:sequence>
                                                        </xs:complexType>
                                                </xs:element>
                                        </xs:sequence>
                                        <xs:attribute name="serviceProviderId" 
type="ServiceProviderId" use="required"/>
                                        <xs:attribute name="groupId" 
type="GroupId" use="required"/>
                                </xs:extension>
                        </xs:complexContent>
                </xs:complexType>
                <xs:key name="skeyccccc">
                        <xs:selector xpath="."/>
                        <xs:field xpath="@serviceProviderId"/>
                        <xs:field xpath="@groupId"/>
                </xs:key>
                <xs:keyref name="skeycccccRef" refer="skeyccccc">
                        <xs:selector xpath="."/>
                        <xs:field xpath="serviceProviderId"/>
                        <xs:field xpath="groupId"/>
                </xs:keyref>
        </xs:element>

.......

B.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema";>
    <xs:complexType name="DepartmentType">
        <xs:sequence>
            <xs:element name="deptType">
                <xs:simpleType>
                    <xs:restriction base="xs:token">
                        <xs:enumeration value="Group"/>
                        <xs:enumeration value="Enterprise"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="contact" type="Contact"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="Contact">
        <xs:annotation>
            <xs:documentation>Contact information.</xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="contactName" nillable="true" minOccurs="0">
                <xs:simpleType>
                    <xs:restriction base="xs:token">
                        <xs:minLength value="1"/>
                        <xs:maxLength value="30"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="contactNumber" nillable="true" minOccurs="0">
                <xs:simpleType>
                    <xs:restriction base="xs:token">
                        <xs:minLength value="1"/>
                        <xs:maxLength value="30"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="contactEmail" type="EmailAddress" nillable="true" 
minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
    <xs:simpleType name="EmailAddress">
        <xs:annotation>
            <xs:documentation>Email Address</xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:token">
            <xs:minLength value="1"/>
            <xs:maxLength value="80"/>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>

The Xerces will report that it can't find the element "contactNumber".



> Xerces reports it can not find the elment when including the other schema.
> --------------------------------------------------------------------------
>
>                 Key: XERCESC-1743
>                 URL: https://issues.apache.org/jira/browse/XERCESC-1743
>             Project: Xerces-C++
>          Issue Type: Bug
>    Affects Versions: 2.7.0
>         Environment: Solaris 10.
>            Reporter: PeiHua
>             Fix For: 2.7.0
>
>
> Xerces reports it can not find the elment when including the other schema and 
> the schema's element depended on the othe elment.
> But it validates ok in XmlSpy and Oxygen.
> ================================================ 
> void XercesParser::doValidation(const char *theStr, bool setDefaultValue, 
> bool ignoreError) 
> { 
>     REPORT_INFO("[XercesParser] doValidation"); 
>     // create parser if it is not available 
>     if (myParser == NULL) 
>     { 
>         myParser = XMLReaderFactory::createXMLReader(); 
>         myParser->setFeature(XMLUni::fgSAX2CoreValidation, true); 
>         myParser->setFeature(XMLUni::fgSAX2CoreNameSpaces, true); 
>         myParser->setFeature(XMLUni::fgXercesSchema, true); 
>         myParser->setFeature(XMLUni::fgXercesDynamic, true); 
>         myParser->setFeature(XMLUni::fgXercesSchemaFullChecking, true); 
>         myParser->setFeature(XMLUni::fgSAX2CoreNameSpacePrefixes, true); 
>         myParser->setFeature(XMLUni::fgXercesCacheGrammarFromParse, true); 
>         myParser->setFeature(XMLUni::fgXercesUseCachedGrammarInParse, true); 
>         mySchema = XMLString::transcode(mySchemaLoc.data()); 
>         myParser->setProperty(XMLUni::fgXercesSchemaExternalSchemaLocation, 
> mySchema); 
>     } 
>     REPORT_INFO("doValidation, mySchemaLoc: " << mySchemaLoc); 
>     REPORT_INFO("doValidation, theStr: " << theStr); 
>     if(setDefaultValue) 
>         myParser->setContentHandler(myHandler); 
>     else 
>         myParser->setContentHandler(NULL); 
>     if(!ignoreError) 
>         myParser->setErrorHandler(myHandler); 
>     else 
>         myParser->setErrorHandler(NULL); 
>     try 
>     { 
>         // added for supporting file parsing 
>         RWURL url(theStr); 
>         if (url.isValid() == false) 
>         { 
>             int len = strlen(theStr); 
>             const char *bufId = "CAI3G"; 
>             // the buffer must be allocated dynamically 
>             MemBufInputSource theMBIS(reinterpret_cast<const 
> XMLByte*>(theStr), (const unsigned int)len, bufId); 
>             myParser->parse(theMBIS); 
>         } 
>         else 
>             myParser->parse(theStr); 
>     } 
>     { 
>         // handle CAI3G request format error 
>         throw e; 
>     } 
>     catch (...) 
>     { 
>         // handle other errors 
>         XMLString::release(&mySchema); 
>         // the parser must be released here 
>         delete myParser; 
>         myParser = NULL; 
>         throw FDSException::FDSStandardException("doValidation, An error 
> occurred during parsing.", 0); 
>     } 
> } 
> void XercesParser::doValidation(const FDSNamedValue& theNV, bool 
> setDefaultValue, bool ignoreError) 
> { 
>     REPORT_INFO("[XercesParser] doValidation"); 
>     ostrstream tmpStr; 
>     theNV.print(tmpStr, 0); 
>     tmpStr.put('\0'); 
>     char *tmpStr1 = tmpStr.str(); 
>     RWCString tmpStr2(tmpStr1); 
>     delete[] tmpStr1; 
>     doValidation(tmpStr2.data(), setDefaultValue, ignoreError); 
> } 
> And Invoke the functions before. 
> --------------------------------------------------- 
> const RWCString schemaLoc = "http://www.xxx.com/ test.xsd"; 
> ............. 
>         // get parser object 
>         XercesParser* theParser = theObj->getObj(); 
>         // do validation 
>         try 
>         { 
>             theParser->doValidation(*theNV); 
>         } 
>         catch (FDSException::FDSStandardException& e) 
>         { 
>             // release cached object 
>             ObjectPool::getInstance()->releaseObject(theObj); 
>             cout << "[testMain] Error: " << e.information() << endl; 
>             cout << "[testMain] Reason: " << e.reason() << endl; 
>         } 
> ================================================ 
> schema and xml below. 
> Xml -> A.xsd 
> A.xsd  include B.xsd
> <?xml version="1.0" encoding="UTF-8"?>
> <createService groupId="1234561702" serviceProviderId="1234561702" 
> xmlns="http://www.xxx.com/abc/";
>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>     xsi:schemaLocation="http://www.xxx.com/abc/ A.xsd" >
>     <serviceProviderId>1234561702</serviceProviderId>                     
>     <groupId>1234561702</groupId>                         
>     <serviceName>Enhanced Outgoing Calling Plan</serviceName>
> </createService>
> A.xsd
> <xs:schema xmlns="http://www.xxx.com/abc/ " 
> xmlns:core="http://www.xxx.com/ema/UserProvisioning/BWAS/14/SharedTypes/Core/";
>  xmlns:xs="http://www.w3.org/2001/XMLSchema"; 
> targetNamespace="http://www.xxx.com/abc/ " elementFormDefault="qualified" 
> attributeFormDefault="unqualified">
>       <xs:import 
> namespace="http://www.xxx.com/ema/UserProvisioning/BWAS/14/SharedTypes/Core/"schemaLocation="ema_UserProvisioning_BWAS_14_SharedTypes_Core_.xsd"/>
>       <xs:include schemaLocation="B.xsd"/>
>       <xs:element name="createService" 
> substitutionGroup="cai3g:CreateMODefinition">
>               <xs:annotation>
>                       <xs:documentation>Target  
> EnhancedOutgoingCallingPlan</xs:documentation>
>               </xs:annotation>
>               <xs:complexType>
>                       <xs:complexContent>
>                               <xs:extension 
> base="cai3g:AbstractCreateAttributeType">
>                                       <xs:sequence>
>                                               <xs:element 
> name="serviceProviderId" type="ServiceProviderId"/>
>                                               <xs:element 
> name="departmentType" type="DepartmentType"/>
>                                               <xs:element name="serviceName">
>                                                       <xs:simpleType>
>                                                               <xs:restriction 
> base="xs:token">
>                                                                       
> <xs:enumeration value="Enhanced Outgoing Calling Plan"/>
>                                                               
> </xs:restriction>
>                                                       </xs:simpleType>
>                                               </xs:element>
>                                               <xs:element 
> name="serviceSpecificData" minOccurs="0">
>                                                       <xs:complexType>
>                                                               <xs:sequence>
>                                                                       
> <xs:element name="DepartmentAuthorizationCodeList">
>                                                                               
> <xs:annotation>
>                                                                               
>         
> <xs:documentation>GroupOutgoingCallingPlanDepartmentAuthorizationCodeAddListRequest</xs:documentation>
>                                                                               
> </xs:annotation>
>                                                                               
> <xs:complexType>
>                                                                               
>         <xs:sequence>
>                                                                               
>                 <xs:element name="serviceProviderId" 
> type="ServiceProviderId"/>
>                                                                               
>                 <xs:element name="groupId" type="GroupId"/>
>                                                                               
>                 <xs:element name="departmentKey" type="DepartmentKey" 
> minOccurs="0"/>
>                                                                               
>                 <xs:element name="codeEntry" maxOccurs="unbounded">
>                                                                               
>                         <xs:complexType>
>                                                                               
>                                 <xs:complexContent>
>                                                                               
>                                         <xs:extension 
> base="OutgoingCallingPlanAuthorizationCodeEntry">
>                                                                               
>                                                 <xs:attribute name="code" 
> type="OutgoingCallingPlanAuthorizationCode" use="required"/>
>                                                                               
>                                         </xs:extension>
>                                                                               
>                                 </xs:complexContent>
>                                                                               
>                         </xs:complexType>
>                                                                               
>                         <xs:key name="skeyccccc.2.1">
>                                                                               
>                                 <xs:selector xpath="."/>
>                                                                               
>                                 <xs:field xpath="@code"/>
>                                                                               
>                         </xs:key>
>                                                                               
>                         <xs:keyref name="skeycccccRef.2.1" 
> refer="skeyccccc.2.1">
>                                                                               
>                                 <xs:selector xpath="."/>
>                                                                               
>                                 <xs:field xpath="code"/>
>                                                                               
>                         </xs:keyref>
>                                                                               
>                 </xs:element>
>                                                                               
>         </xs:sequence>
>                                                                               
>         <xs:attribute name="serviceProviderId" type="ServiceProviderId" 
> use="required"/>
>                                                                               
>         <xs:attribute name="groupId" type="GroupId" use="required"/>
>                                                                               
> </xs:complexType>
>                                                                               
> <xs:key name="skeyccccc.2">
>                                                                               
>         <xs:selector xpath="."/>
>                                                                               
>         <xs:field xpath="@serviceProviderId"/>
>                                                                               
>         <xs:field xpath="@groupId"/>
>                                                                               
> </xs:key>
>                                                                               
> <xs:keyref name="skeycccccRef.2" refer="skeyccccc.2">
>                                                                               
>         <xs:selector xpath="."/>
>                                                                               
>         <xs:field xpath="serviceProviderId"/>
>                                                                               
>         <xs:field xpath="groupId"/>
>                                                                               
> </xs:keyref>
>                                                                       
> </xs:element>
>                                                               </xs:sequence>
>                                                       </xs:complexType>
>                                               </xs:element>
>                                       </xs:sequence>
>                                       <xs:attribute name="serviceProviderId" 
> type="ServiceProviderId" use="required"/>
>                                       <xs:attribute name="groupId" 
> type="GroupId" use="required"/>
>                               </xs:extension>
>                       </xs:complexContent>
>               </xs:complexType>
>               <xs:key name="skeyccccc">
>                       <xs:selector xpath="."/>
>                       <xs:field xpath="@serviceProviderId"/>
>                       <xs:field xpath="@groupId"/>
>               </xs:key>
>               <xs:keyref name="skeycccccRef" refer="skeyccccc">
>                       <xs:selector xpath="."/>
>                       <xs:field xpath="serviceProviderId"/>
>                       <xs:field xpath="groupId"/>
>               </xs:keyref>
>       </xs:element>
> .......
> B.xsd
> <?xml version="1.0" encoding="UTF-8"?>
> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema";>
>     <xs:complexType name="DepartmentType">
>         <xs:sequence>
>             <xs:element name="deptType">
>                 <xs:simpleType>
>                     <xs:restriction base="xs:token">
>                         <xs:enumeration value="Group"/>
>                         <xs:enumeration value="Enterprise"/>
>                     </xs:restriction>
>                 </xs:simpleType>
>             </xs:element>
>             <xs:element name="contact" type="Contact"/>
>         </xs:sequence>
>     </xs:complexType>
>     <xs:complexType name="Contact">
>         <xs:annotation>
>             <xs:documentation>Contact information.</xs:documentation>
>         </xs:annotation>
>         <xs:sequence>
>             <xs:element name="contactName" nillable="true" minOccurs="0">
>                 <xs:simpleType>
>                     <xs:restriction base="xs:token">
>                         <xs:minLength value="1"/>
>                         <xs:maxLength value="30"/>
>                     </xs:restriction>
>                 </xs:simpleType>
>             </xs:element>
>             <xs:element name="contactNumber" nillable="true" minOccurs="0">
>                 <xs:simpleType>
>                     <xs:restriction base="xs:token">
>                         <xs:minLength value="1"/>
>                         <xs:maxLength value="30"/>
>                     </xs:restriction>
>                 </xs:simpleType>
>             </xs:element>
>             <xs:element name="contactEmail" type="EmailAddress" 
> nillable="true" minOccurs="0"/>
>         </xs:sequence>
>     </xs:complexType>
>     <xs:simpleType name="EmailAddress">
>         <xs:annotation>
>             <xs:documentation>Email Address</xs:documentation>
>         </xs:annotation>
>         <xs:restriction base="xs:token">
>             <xs:minLength value="1"/>
>             <xs:maxLength value="80"/>
>         </xs:restriction>
>     </xs:simpleType>
> </xs:schema>
> The Xerces will report that it can't find the element "contactNumber".

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to