public void registerPrismSchemasFromDirectory(File directory) throws FileNotFoundException, SchemaException { File[] fileArray = directory.listFiles(); if (fileArray != null) { List<File> files = Arrays.asList(fileArray); // Sort the filenames so we have deterministic order of loading // This is useful in tests but may come handy also during customization Collections.sort(files); for (File file: files) { if (file.getName().startsWith(".")) { // skip dotfiles. this will skip SVN data and similar things continue; } if (file.isDirectory()) { registerPrismSchemasFromDirectory(file); } if (file.isFile()) { registerPrismSchemaFile(file); } } } }
@NotNull private SchemaRegistryImpl createSchemaRegistry() throws SchemaException, FileNotFoundException { SchemaRegistryImpl schemaRegistry = new SchemaRegistryImpl(); schemaRegistry.setDefaultNamespace(SchemaConstantsGenerated.NS_COMMON); schemaRegistry.setNamespacePrefixMapper(new GlobalDynamicNamespacePrefixMapper()); registerBuiltinSchemas(schemaRegistry); registerExtensionSchemas(schemaRegistry); return schemaRegistry; }
/** * Must be called before call to initialize() */ public void registerPrismSchemaResource(String resourcePath, String usualPrefix, Package compileTimeClassesPackage, boolean prefixDeclaredByDefault) throws SchemaException { registerPrismSchemaResource(resourcePath, usualPrefix, compileTimeClassesPackage, false, prefixDeclaredByDefault); }
@Override public PrismObjectDefinition determineDefinitionFromClass(Class compileTimeClass) { PrismObjectDefinition def = findObjectDefinitionByCompileTimeClass(compileTimeClass); if (def != null) { return def; } Class<?> superclass = compileTimeClass.getSuperclass(); if (superclass == null || superclass == Object.class) { return null; } return determineDefinitionFromClass(superclass); }
@NotNull private SchemaRegistryImpl createSchemaRegistry() throws SchemaException { SchemaRegistryImpl schemaRegistry = new SchemaRegistryImpl(); schemaRegistry.setNamespacePrefixMapper(new GlobalDynamicNamespacePrefixMapper()); return schemaRegistry; }
public static PrismContextImpl constructPrismContext(File extraSchema) throws SchemaException, FileNotFoundException { SchemaRegistryImpl schemaRegistry = new SchemaRegistryImpl(); schemaRegistry.setCatalogResourceName(TEST_CATALOG_RESOURCE_NAME); DynamicNamespacePrefixMapper prefixMapper = new GlobalDynamicNamespacePrefixMapper(); // Set default namespace? schemaRegistry.setNamespacePrefixMapper(prefixMapper); schemaRegistry.registerPrismDefaultSchemaResource("xml/ns/test/foo-1.xsd", "foo", ObjectFactory.class.getPackage()); schemaRegistry.registerPrismSchemaResource("xml/ns/test/foo-types-1.xsd", "foot", null); schemaRegistry.registerPrismSchemaResource("xml/ns/public/types-3.xsd", "t", com.evolveum.prism.xml.ns._public.types_3.ObjectFactory.class.getPackage()); schemaRegistry.registerPrismSchemaResource("xml/ns/public/query-3.xsd", "q", com.evolveum.prism.xml.ns._public.query_3.ObjectFactory.class.getPackage()); schemaRegistry.registerPrismSchemasFromDirectory(SCHEMA_DIR); if (extraSchema != null){ schemaRegistry.registerPrismSchemaFile(extraSchema); } prefixMapper.registerPrefix(XMLConstants.W3C_XML_SCHEMA_NS_URI, DOMUtil.NS_W3C_XML_SCHEMA_PREFIX, false); prefixMapper.registerPrefix(PrismConstants.NS_ANNOTATION, PrismConstants.PREFIX_NS_ANNOTATION, false); prefixMapper.registerPrefix(PrismInternalTestUtil.NS_WEAPONS, PrismInternalTestUtil.NS_WEAPONS_PREFIX, false); PrismContextImpl prismContext = PrismContextImpl.create(schemaRegistry); prismContext.setObjectsElementName(new QName("http://midpoint.evolveum.com/xml/ns/public/common/common-3", "objects")); return prismContext; }
@Test public void testUserExtensionSchemaSchemaRegistry() throws SAXException, IOException, SchemaException { System.out.println("===[ testUserExtensionSchemaAsObjectSchema ]==="); PrismContext context = constructPrismContext(); SchemaRegistryImpl reg = (SchemaRegistryImpl) context.getSchemaRegistry(); reg.registerPrismSchemasFromDirectory(EXTRA_SCHEMA_DIR); context.initialize(); PrismObjectDefinition<UserType> userDef = reg.findObjectDefinitionByType(USER_TYPE_QNAME); System.out.println("User definition:"); System.out.println(userDef.debugDump()); assertUserDefinition(userDef); PrismObjectDefinition<UserType> usedDefByClass = reg.findObjectDefinitionByCompileTimeClass(UserType.class); assertUserDefinition(usedDefByClass); PrismObjectDefinition<UserType> userDefByElement = reg.findObjectDefinitionByElementName(USER_QNAME); assertUserDefinition(userDefByElement); }
schemaRegistry.getNamespacePrefixMapper().registerPrefix("http://www.w3.org/2001/XMLSchema", DOMUtil.NS_W3C_XML_SCHEMA_PREFIX, false); schemaRegistry.getNamespacePrefixMapper().registerPrefix(XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI, "xsi", false); schemaRegistry.registerPrismSchemaResource("xml/ns/public/annotation-3.xsd", "a"); schemaRegistry.registerPrismSchemaResource("xml/ns/public/types-3.xsd", "t", com.evolveum.prism.xml.ns._public.types_3.ObjectFactory.class.getPackage(), true); // declared by default schemaRegistry.registerPrismSchemaResource("xml/ns/public/query-3.xsd", "q", com.evolveum.prism.xml.ns._public.query_3.ObjectFactory.class.getPackage(), true); // declared by default schemaRegistry.registerPrismDefaultSchemaResource("xml/ns/public/common/common-3.xsd", "c", com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectFactory.class.getPackage()); // declared by default schemaRegistry.registerPrismSchemaResource("xml/ns/public/common/audit-3.xsd", "aud", com.evolveum.midpoint.xml.ns._public.common.audit_3.ObjectFactory.class.getPackage()); schemaRegistry.registerPrismSchemaResource("xml/ns/public/common/api-types-3.xsd", "apti", com.evolveum.midpoint.xml.ns._public.common.api_types_3.ObjectFactory.class.getPackage()); schemaRegistry.registerPrismSchemasFromWsdlResource("xml/ns/public/model/model-3.wsdl", Arrays.asList(com.evolveum.midpoint.xml.ns._public.model.model_3.ObjectFactory.class.getPackage())); schemaRegistry.registerPrismSchemasFromWsdlResource("xml/ns/public/report/report-3.wsdl", Arrays.asList(com.evolveum.midpoint.xml.ns._public.report.report_3.ObjectFactory.class.getPackage())); schemaRegistry.registerPrismSchemaResource("xml/ns/public/resource/annotation-3.xsd", "ra"); schemaRegistry.registerPrismSchemaResource("xml/ns/public/resource/capabilities-3.xsd", "cap",
/** * Test if a schema directory can be loaded to the schema registry. This contains definition of * user extension, therefore check if it is applied to the user definition. */ @Test public void testUserExtensionSchemaLoad() throws SAXException, IOException, SchemaException { System.out.println("===[ testUserExtensionSchemaLoad ]==="); PrismContext context = constructPrismContext(); SchemaRegistryImpl reg = (SchemaRegistryImpl) context.getSchemaRegistry(); reg.registerPrismSchemasFromDirectory(EXTRA_SCHEMA_DIR); context.initialize(); System.out.println("Initialized registry"); System.out.println(reg.debugDump()); // Try midpoint schemas by parsing a XML file PrismSchema schema = reg.getPrismSchema(NS_FOO); System.out.println("Parsed foo schema:"); System.out.println(schema.debugDump()); // TODO: assert user schema = reg.getPrismSchema(NS_USER_EXT); System.out.println("Parsed user ext schema:"); System.out.println(schema.debugDump()); ComplexTypeDefinition userExtComplexType = schema.findComplexTypeDefinition(USER_EXTENSION_TYPE_QNAME); assertEquals("Extension type ref does not match", USER_TYPE_QNAME, userExtComplexType.getExtensionForType()); }
protected void registerExtensionSchemas(SchemaRegistryImpl schemaRegistry) throws SchemaException, FileNotFoundException { if (extraSchemaDir != null && extraSchemaDir.exists()) { schemaRegistry.registerPrismSchemasFromDirectory(extraSchemaDir); } }
/** * Test if a schema directory can be loaded to the schema registry. This contains definition of * user extension, therefore check if it is applied to the user definition. */ @Test public void testTypeOverride() throws SAXException, IOException, SchemaException { System.out.println("===[ testTypeOverride ]==="); PrismContext context = constructPrismContext(); SchemaRegistryImpl reg = (SchemaRegistryImpl) context.getSchemaRegistry(); reg.registerPrismSchemasFromDirectory(EXTRA_SCHEMA_DIR); context.initialize(); PrismSchema schema = reg.getPrismSchema(NS_ROOT); System.out.println("Parsed root schema:"); System.out.println(schema.debugDump()); PrismContainerDefinition rootContDef = schema.findContainerDefinitionByElementName(new QName(NS_ROOT,"root")); assertNotNull("Not <root> definition", rootContDef); PrismContainerDefinition extensionContDef = rootContDef.findContainerDefinition(new ItemName(NS_FOO, "extension")); assertNotNull("Not <extension> definition", extensionContDef); assertEquals("Wrong <extension> type", new QName(NS_ROOT, "MyExtensionType"), extensionContDef.getTypeName()); }
@Test public void testUserExtensionSchemaParseUser() throws SAXException, IOException, SchemaException { System.out.println("===[ testUserExtensionSchemaParseUser ]==="); Document dataDoc = DOMUtil.parseFile(USER_JACK_FILE_XML); PrismContext context = constructPrismContext(); SchemaRegistryImpl reg = (SchemaRegistryImpl) context.getSchemaRegistry(); reg.registerPrismSchemasFromDirectory(EXTRA_SCHEMA_DIR); context.initialize(); // Parsing user PrismObject<UserType> user = context.parserFor(DOMUtil.getFirstChildElement(dataDoc)).compat().parse(); // items from user extension are not correctly defined in the schema assertNotNull("No definition for user", user.getDefinition()); System.out.println("Parsed root object:"); System.out.println(user.debugDump()); // TODO: assert user // Try javax schemas by validating a XML file Schema javaxSchema = reg.getJavaxSchema(); assertNotNull(javaxSchema); Validator validator = javaxSchema.newValidator(); DOMResult validationResult = new DOMResult(); validator.validate(new DOMSource(dataDoc),validationResult); // System.out.println("Validation result:"); // System.out.println(DOMUtil.serializeDOMToString(validationResult.getNode())); }
@Override public <C extends Containerable> void applyDefinition(PrismContainerValue<C> prismContainerValue, QName typeName, ItemPath path, boolean force) throws SchemaException { PrismObjectDefinition objectDefinition = findObjectDefinitionByType(typeName); if (objectDefinition != null) { PrismContainerDefinition<C> containerDefinition = objectDefinition.findContainerDefinition(path); prismContainerValue.applyDefinition(containerDefinition, force); return; } PrismContainerDefinition typeDefinition = findContainerDefinitionByType(typeName); if (typeDefinition != null) { PrismContainerDefinition<C> containerDefinition = typeDefinition.findContainerDefinition(path); prismContainerValue.applyDefinition(containerDefinition, force); return; } ComplexTypeDefinition complexTypeDefinition = findComplexTypeDefinition(typeName); if (complexTypeDefinition != null) { PrismContainerDefinition<C> containerDefinition = complexTypeDefinition.findContainerDefinition(path); prismContainerValue.applyDefinition(containerDefinition, force); return; } throw new SchemaException("No definition for container "+path+" in type "+typeName); } //endregion
/** * Test is extra schema can be loaded to the schema registry and whether the file compliant to that * schema can be validated. */ @Test public void testExtraSchema() throws SAXException, IOException, SchemaException { System.out.println("===[ testExtraSchema ]==="); Document dataDoc = DOMUtil.parseFile(new File(COMMON_DIR_PATH, "root-foo.xml")); PrismContext context = constructPrismContext(); SchemaRegistryImpl reg = (SchemaRegistryImpl) context.getSchemaRegistry(); Document extraSchemaDoc = DOMUtil.parseFile(new File(EXTRA_SCHEMA_DIR, "root.xsd")); reg.registerSchema(extraSchemaDoc, "file root.xsd"); reg.initialize(); Schema javaxSchema = reg.getJavaxSchema(); assertNotNull(javaxSchema); Validator validator = javaxSchema.newValidator(); DOMResult validationResult = new DOMResult(); validator.validate(new DOMSource(dataDoc),validationResult); // System.out.println("Validation result:"); // System.out.println(DOMUtil.serializeDOMToString(validationResult.getNode())); }
throw new MojoFailureException("Schema file "+schemaFile+" does not exist"); schemaRegistry.registerPrismSchemaFile(schemaFile); schemaRegistry.setCatalogFiles(catalogFiles);
@NotNull @Override public <T extends Objectable> PrismObject<T> createObject(@NotNull Class<T> clazz) throws SchemaException { PrismObjectDefinition<T> definition = schemaRegistry.findObjectDefinitionByCompileTimeClass(clazz); if (definition == null) { throw new SchemaException("Definition for prism object holding " + clazz + " couldn't be found"); } return definition.instantiate(); }
@Override public PrismObjectDefinition determineReferencedObjectDefinition(@NotNull QName targetTypeName, ItemPath rest) { // TEMPORARY HACK -- TODO FIXME PrismObjectDefinition def = findObjectDefinitionByType(targetTypeName); if (def == null) { throw new IllegalStateException("Couldn't find definition for referenced object for " + targetTypeName + ", path=" + rest); } return def; }
private Marshaller createMarshaller(Map<String, Object> jaxbProperties) throws JAXBException { Marshaller marshaller = context.createMarshaller(); // set default properties marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); DynamicNamespacePrefixMapper namespacePrefixMapper = ((SchemaRegistryImpl) getSchemaRegistry()).getNamespacePrefixMapper().clone(); namespacePrefixMapper.setAlwaysExplicit(true); marshaller.setProperty("com.sun.xml.bind.namespacePrefixMapper", namespacePrefixMapper); // set custom properties if (jaxbProperties != null) { for (Entry<String, Object> property : jaxbProperties.entrySet()) { marshaller.setProperty(property.getKey(), property.getValue()); } } return marshaller; }
@Override public void initialize() throws SchemaException, SAXException, IOException { schemaRegistry.initialize(); }
@Override public String debugDump() { return debugDump(0); }