use of com.sun.tools.xjc.model.Model in project midpoint by Evolveum.
the class StepSchemaConstants method run.
@Override
public boolean run(Outline outline, Options opt, ErrorHandler errorHandler) throws Exception {
Model model = outline.getModel();
JDefinedClass schemaConstants = model.codeModel._class(CLASS_NAME);
//creating namespaces
List<FieldBox<String>> namespaces = new ArrayList<FieldBox<String>>();
for (PrefixMapper prefix : PrefixMapper.values()) {
namespaces.add(new FieldBox("NS_" + prefix.getNamespaceName(), prefix.getNamespace()));
}
Collections.sort(namespaces);
for (FieldBox<String> field : namespaces) {
JFieldVar var = createNSFieldDefinition(outline, schemaConstants, field.getFieldName(), field.getValue());
getNamespaceFields().put(field.getValue(), var);
}
//creating qnames
List<FieldBox<QName>> fields = new ArrayList<FieldBox<QName>>();
Map<QName, CElementInfo> map = model.getElementMappings(null);
Set<Map.Entry<QName, CElementInfo>> set = map.entrySet();
for (Map.Entry<QName, CElementInfo> entry : set) {
QName qname = entry.getKey();
CElementInfo info = entry.getValue();
String fieldName = ProcessorUtils.fieldPrefixedUnderscoredUpperCase(info.getSqueezedName(), qname);
fields.add(new FieldBox(fieldName, qname));
}
//sort field by name and create qname definitions in class
Collections.sort(fields);
for (FieldBox<QName> field : fields) {
JFieldVar var = namespaceFields.get(field.getValue().getNamespaceURI());
if (var != null) {
createQNameDefinition(outline, schemaConstants, field.getFieldName(), var, field.getValue());
} else {
ProcessorUtils.createPSFField(outline, schemaConstants, field.getFieldName(), field.getValue());
}
}
return true;
}
use of com.sun.tools.xjc.model.Model in project drools by kiegroup.
the class DroolsJaxbHelperProviderImpl method addXsdModel.
public static String[] addXsdModel(Resource resource, KnowledgeBuilderImpl kBuilder, Options xjcOpts, String systemId) throws IOException {
InputSource source = new InputSource(new CachingRewindableReader(resource.getReader()));
source.setSystemId(systemId.trim().startsWith(".") ? systemId : "." + systemId);
xjcOpts.addGrammar(source);
try {
xjcOpts.parseArguments(new String[] { "-npa" });
} catch (BadCommandLineException e) {
throw new IllegalArgumentException("Unable to parse arguments", e);
}
ErrorReceiver errorReceiver = new JaxbErrorReceiver4Drools();
Model model = ModelLoader.load(xjcOpts, new JCodeModel(), errorReceiver);
model.generateCode(xjcOpts, errorReceiver);
MapVfsCodeWriter codeWriter = new MapVfsCodeWriter();
model.codeModel.build(xjcOpts.createCodeWriter(codeWriter));
MemoryResourceReader src = new MemoryResourceReader();
boolean useProjectClassLoader = kBuilder.getRootClassLoader() instanceof ProjectClassLoader;
List<String> classNames = new ArrayList<String>();
List<String> srcNames = new ArrayList<String>();
for (Entry<String, byte[]> entry : codeWriter.getMap().entrySet()) {
String name = entry.getKey();
int dotPos = name.lastIndexOf('.');
String pkgName = name.substring(0, dotPos);
if (!name.endsWith("package-info.java")) {
classNames.add(pkgName);
}
dotPos = pkgName.lastIndexOf('.');
if (dotPos != -1) {
pkgName = pkgName.substring(0, dotPos);
}
PackageRegistry pkgReg = kBuilder.getPackageRegistry(pkgName);
if (pkgReg == null) {
kBuilder.addPackage(new PackageDescr(pkgName));
pkgReg = kBuilder.getPackageRegistry(pkgName);
}
if (useProjectClassLoader) {
String srcName = convertToResource(entry.getKey());
src.add(srcName, entry.getValue());
srcNames.add(srcName);
} else {
JavaDialect dialect = (JavaDialect) pkgReg.getDialectCompiletimeRegistry().getDialect("java");
dialect.addSrc(convertToResource(entry.getKey()), entry.getValue());
}
}
if (useProjectClassLoader) {
ProjectJavaCompiler compiler = new ProjectJavaCompiler(kBuilder.getBuilderConfiguration());
List<KnowledgeBuilderResult> results = compiler.compileAll((ProjectClassLoader) kBuilder.getRootClassLoader(), srcNames, src);
for (String className : classNames) {
Class<?> clazz = null;
try {
clazz = Class.forName(className, true, kBuilder.getRootClassLoader());
} catch (ClassNotFoundException e) {
continue;
}
String pkgName = className.substring(0, className.lastIndexOf('.'));
PackageRegistry pkgReg = kBuilder.getPackageRegistry(pkgName);
pkgReg.getPackage().addTypeDeclaration(TypeDeclaration.createTypeDeclarationForBean(clazz));
}
kBuilder.updateResults(results);
} else {
kBuilder.compileAll();
kBuilder.updateResults();
}
return classNames.toArray(new String[classNames.size()]);
}
use of com.sun.tools.xjc.model.Model in project raml-for-jax-rs by mulesoft-labs.
the class JAXBHelper method generateClassesFromXmlSchemas.
private static List<JDefinedClass> generateClassesFromXmlSchemas(String pack, JCodeModel codeModel, File schemaFile) throws GenerationException {
try {
ArrayList<JDefinedClass> classList = new ArrayList<JDefinedClass>();
ArrayList<String> argList = new ArrayList<>();
argList.add("-mark-generated");
argList.add("-p");
argList.add(pack);
argList.add(schemaFile.getAbsolutePath());
String[] args = argList.toArray(new String[argList.size()]);
final Options opt = new Options();
opt.setSchemaLanguage(Language.XMLSCHEMA);
opt.parseArguments(args);
ErrorReceiver receiver = new ErrorReceiverFilter() {
@Override
public void info(SAXParseException exception) {
if (opt.verbose)
super.info(exception);
}
@Override
public void warning(SAXParseException exception) {
if (!opt.quiet)
super.warning(exception);
}
};
Model model = ModelLoader.load(opt, codeModel, receiver);
Outline outline = model.generateCode(opt, receiver);
for (ClassOutline co : outline.getClasses()) {
JDefinedClass cl = co.implClass;
if (cl.outer() == null) {
classList.add(cl);
}
}
return classList;
} catch (Exception e) {
throw new GenerationException(e);
}
}
Aggregations