00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _SCHEMAVALIDATORH
00022 #define _SCHEMAVALIDATORH
00023
00024 #include "xmlpull/wsdlpull_export.h"
00025 #include "xmlpull/XmlSerializer.h"
00026 #include "schemaparser/SchemaParser.h"
00027 #include "schemaparser/SchemaParserException.h"
00028 #include "schemaparser/TypeContainer.h"
00029
00030
00031 namespace Schema {
00032
00033
00034 class WSDLPULL_EXPORT SchemaValidator
00035 {
00036 public:
00037
00038
00039
00040
00041
00042
00043
00044 SchemaValidator(const SchemaParser * sp,
00045 std::ostream & os = std::cout);
00046 ~SchemaValidator();
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062 TypeContainer *validate(XmlPullParser * xpp, int typeId,
00063 TypeContainer * ipTc = 0);
00064
00065 TypeContainer *validate(const std::string & val , int typeId,
00066 TypeContainer * ipTc = 0, XmlPullParser * xpp = 0);
00067 TypeContainer * validate(void* value ,int typeId,
00068 TypeContainer * ipTc = 0, XmlPullParser * xpp = 0);
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080 bool instance(const std::string& tag,
00081 Schema::Type type_id);
00082
00083
00084
00085 private:
00086
00087 TypeContainer* validateContentModel(XmlPullParser * xpp,
00088 ContentModel* cm,
00089 TypeContainer * ipTc,
00090 const std::string & elemName,
00091 bool nested=false,
00092 TypeContainer* btCnt=0);
00093
00094 void extractSimpleType(const std::string & val, int basetype,
00095 TypeContainer * ipTc, const SimpleType * st,
00096 XmlPullParser * xpp);
00097 bool validateListOrUnion(const SimpleType* st,
00098 const std::string &val, XmlPullParser * xpp);
00099
00100 bool findElement(ContentModel::ContentsIterator start,
00101 ContentModel::ContentsIterator end,
00102 std::string name,
00103 ContentModel::ContentsIterator & found);
00104 bool checkAttributeOccurence(const ComplexType* ct ,XmlPullParser* xpp);
00105 void instanceCM(ContentModel *cm);
00106 void error(const std::string & , XmlPullParser* xpp=0);
00107 bool instance1(const std::string& tag, Schema::Type type_id);
00108
00109 XmlSerializer * xmlStream_ ;
00110 std::ostream &ostr_;
00111 const SchemaParser *sParser_;
00112
00113 };
00114 }
00115 #endif