//However if the type mapper is left empty it will be a problem for the other
//processes. Hence the default type mapper is set to the configuration
return new DefaultTypeMapper();
}
SchemaTypeSystem sts;
List completeSchemaList = new ArrayList();
List topLevelSchemaList = new ArrayList();
//create the type mapper
//First try to take the one that is already there
TypeMapper mapper = cgconfig.getTypeMapper();
if (mapper == null) {
mapper = new JavaTypeMapper();
}
//change the default class name of the mapper to
//xmlbeans specific XMLObject
mapper.setDefaultMappingName(XmlObject.class.getName());
Map nameSpacesMap = new HashMap();
List axisServices = cgconfig.getAxisServices();
AxisService axisService;
for (Iterator iter = axisServices.iterator(); iter.hasNext();) {
axisService = (AxisService)iter.next();
nameSpacesMap.putAll(axisService.getNamespaceMap());
}
// process all the schemas and make a list of all of them for
// resolving entities
for (int i = 0; i < schemas.size(); i++) {
XmlSchema schema = (XmlSchema)schemas.get(i);
XmlOptions options = new XmlOptions();
options.setLoadAdditionalNamespaces(
nameSpacesMap); //add the namespaces
XmlSchema[] allSchemas = SchemaUtil.getAllSchemas(schema);
for (int j = 0; j < allSchemas.length; j++) {
completeSchemaList.add(allSchemas[j]);
}
}
//make another list of top level schemas for passing into XMLbeans
for (int i = 0; i < schemas.size(); i++) {
XmlSchema schema = (XmlSchema)schemas.get(i);
XmlOptions options = new XmlOptions();
options.setLoadAdditionalNamespaces(
nameSpacesMap); //add the namespaces
topLevelSchemaList.add(
XmlObject.Factory.parse(
getSchemaAsString(schema)
, options));
}
XmlSchemaCollection extras = new XmlSchemaCollection();
// add the third party schemas
//todo perhaps checking the namespaces would be a good idea to
//make the generated code work efficiently
for (int i = 0; i < additionalSchemas.length; i++) {
completeSchemaList.add(extras.read(additionalSchemas[i]));
topLevelSchemaList.add(XmlObject.Factory.parse(
additionalSchemas[i]
, null));
}
//compile the type system
Axis2EntityResolver er = new Axis2EntityResolver();
er.setSchemas((XmlSchema[])completeSchemaList
.toArray(new XmlSchema[completeSchemaList.size()]));
er.setBaseUri(cgconfig.getBaseURI());
String xsdConfigFile = (String)cgconfig.getProperties().get(XMLBeansExtension.XSDCONFIG_OPTION);
//-Ejavaversion switch to XmlOptions to generate 1.5 compliant code
XmlOptions xmlOptions = new XmlOptions();
xmlOptions.setEntityResolver(er);
//test if javaversion property in CodeGenConfig
if(null!=cgconfig.getProperty("javaversion")){
xmlOptions.put(XmlOptions.GENERATE_JAVA_VERSION,cgconfig.getProperty("javaversion"));
}
sts = XmlBeans.compileXmlBeans(
// set the STS name; defaults to null, which makes the generated class
// include a unique (but random) STS name
typeSystemName,
null,
convertToSchemaArray(topLevelSchemaList),
new Axis2BindingConfig(cgconfig.getUri2PackageNameMap(),
xsdConfigFile),
XmlBeans.getContextTypeLoader(),
new Axis2Filer(cgconfig),
xmlOptions);
// prune the generated schema type system and add the list of base64 types
cgconfig.putProperty(Constants.BASE_64_PROPERTY_KEY,
findBase64Types(sts));
cgconfig.putProperty(Constants.PLAIN_BASE_64_PROPERTY_KEY,
findPlainBase64Types(sts));
SchemaTypeSystem internal = XmlBeans.getBuiltinTypeSystem();
SchemaType[] schemaTypes = internal.globalTypes();
for (int j = 0; j < schemaTypes.length; j++) {
mapper.addTypeMappingName(schemaTypes[j].getName(),
schemaTypes[j].getFullJavaName());
}