Search in sources :

Example 1 with XmlSchemaEnumerationFacet

use of org.apache.ws.commons.schema.XmlSchemaEnumerationFacet in project hale by halestudio.

the class XmlTypeUtil method configureSimpleTypeRestriction.

/**
 * Configure a type definition for a simple type based on a simple type
 * restriction.
 *
 * @param type the type definition
 * @param restriction the simple type restriction
 * @param index the XML index for resolving type definitions
 * @param reporter the report
 */
private static void configureSimpleTypeRestriction(XmlTypeDefinition type, XmlSchemaSimpleTypeRestriction restriction, XmlIndex index, IOReporter reporter) {
    QName baseTypeName = restriction.getBaseTypeName();
    XmlTypeDefinition baseTypeDef;
    if (baseTypeName != null) {
        // resolve super type
        baseTypeDef = index.getOrCreateType(baseTypeName);
    } else if (restriction.getBaseType() != null) {
        // simple schema type
        XmlSchemaSimpleType simpleType = restriction.getBaseType();
        // create an anonymous type
        QName anonymousName = new QName(type.getName().getNamespaceURI() + "/" + type.getName().getLocalPart(), // $NON-NLS-1$
        "AnonymousSuperType");
        baseTypeDef = new AnonymousXmlType(anonymousName);
        XmlTypeUtil.configureSimpleType(type, simpleType, index, reporter);
        // no schema location available at this point
        final String schemaLoc = null;
        // set metadata
        XmlSchemaReader.setMetadata(type, simpleType, schemaLoc, index);
    } else {
        reporter.error(new IOMessageImpl("Simple type restriction without base type, skipping type configuration.", null, restriction.getLineNumber(), restriction.getLinePosition()));
        return;
    }
    // set super type
    type.setSuperType(baseTypeDef);
    // mark as restriction
    type.setConstraint(RestrictionFlag.ENABLED);
    // assign no binding, inherit from super type
    // The following code expects schema to be valid.
    List<Validator> validators = new LinkedList<Validator>();
    // patterns and enumerations in one step are ORed together!
    List<String> values = new LinkedList<String>();
    List<Validator> patternValidators = new LinkedList<Validator>();
    // TODO different handling for date/time/g.../duration in
    // (min|max)(In|Ex)clusive
    // XXX only for date, time, duration, dateTime, gMonthDay, gYearMonth?
    // no also for some cases of gYear, gMonth, gDay (they can have a
    // timezone!)
    // but only need to handle cases where isDecimal() is false...
    XmlSchemaObjectCollection facets = restriction.getFacets();
    for (int i = 0; i < facets.getCount(); i++) {
        XmlSchemaFacet facet = (XmlSchemaFacet) facets.getItem(i);
        if (facet instanceof XmlSchemaEnumerationFacet) {
            values.add(facet.getValue().toString());
        } else if (facet instanceof XmlSchemaFractionDigitsFacet) {
            validators.add(new DigitCountValidator(DigitCountValidator.Type.FRACTIONDIGITS, Integer.parseInt(facet.getValue().toString())));
        } else if (facet instanceof XmlSchemaLengthFacet) {
            validators.add(new LengthValidator(LengthValidator.Type.EXACT, Integer.parseInt(facet.getValue().toString())));
        } else if (facet instanceof XmlSchemaMaxExclusiveFacet) {
            if (// number or date?
            isDecimal(facet.getValue().toString()))
                validators.add(new NumberValidator(NumberValidator.Type.MAXEXCLUSIVE, new BigDecimal(facet.getValue().toString())));
            else
                reporter.warn(new IOMessageImpl("(min|max)(In|Ex)clusive not supported for non-number types", null, facet.getLineNumber(), facet.getLinePosition()));
        } else if (facet instanceof XmlSchemaMaxInclusiveFacet) {
            if (// number or date?
            isDecimal(facet.getValue().toString()))
                validators.add(new NumberValidator(NumberValidator.Type.MAXINCLUSIVE, new BigDecimal(facet.getValue().toString())));
            else
                reporter.warn(new IOMessageImpl("(min|max)(In|Ex)clusive not supported for non-number types", null, facet.getLineNumber(), facet.getLinePosition()));
        } else if (facet instanceof XmlSchemaMaxLengthFacet) {
            validators.add(new LengthValidator(LengthValidator.Type.MAXIMUM, Integer.parseInt(facet.getValue().toString())));
        } else if (facet instanceof XmlSchemaMinLengthFacet) {
            validators.add(new LengthValidator(LengthValidator.Type.MINIMUM, Integer.parseInt(facet.getValue().toString())));
        } else if (facet instanceof XmlSchemaMinExclusiveFacet) {
            if (// number or date?
            isDecimal(facet.getValue().toString()))
                validators.add(new NumberValidator(NumberValidator.Type.MINEXCLUSIVE, new BigDecimal(facet.getValue().toString())));
            else
                reporter.warn(new IOMessageImpl("(min|max)(In|Ex)clusive not supported for non-number types", null, facet.getLineNumber(), facet.getLinePosition()));
        } else if (facet instanceof XmlSchemaMinInclusiveFacet) {
            if (// number or date?
            isDecimal(facet.getValue().toString()))
                validators.add(new NumberValidator(NumberValidator.Type.MININCLUSIVE, new BigDecimal(facet.getValue().toString())));
            else
                reporter.warn(new IOMessageImpl("(min|max)(In|Ex)clusive not supported for non-number types", null, facet.getLineNumber(), facet.getLinePosition()));
        } else if (facet instanceof XmlSchemaPatternFacet) {
            patternValidators.add(new PatternValidator(facet.getValue().toString()));
        } else if (facet instanceof XmlSchemaTotalDigitsFacet) {
            validators.add(new DigitCountValidator(DigitCountValidator.Type.TOTALDIGITS, Integer.parseInt(facet.getValue().toString())));
        } else if (facet instanceof XmlSchemaWhiteSpaceFacet) {
            reporter.info(new IOMessageImpl("White space facet not supported", null, facet.getLineNumber(), facet.getLinePosition()));
        // Nothing to validate according to w3.
        // Values should be processed according to rule?
        } else {
            reporter.error(new IOMessageImpl("Unrecognized facet: " + facet.getClass().getSimpleName(), null, facet.getLineNumber(), facet.getLinePosition()));
        }
    }
    if (!patternValidators.isEmpty())
        validators.add(new OrValidator(patternValidators));
    if (!values.isEmpty()) {
        // set enumeration constraint
        // no check of which values are okay, they must be validated
        // somewhere else.
        // XXX conversion to be done?
        type.setConstraint(new Enumeration<String>(values, false));
        validators.add(new EnumerationValidator(values));
    }
    if (!validators.isEmpty())
        type.setConstraint(new ValidationConstraint(new AndValidator(validators), type));
}
Also used : LengthValidator(eu.esdihumboldt.util.validator.LengthValidator) AndValidator(eu.esdihumboldt.util.validator.AndValidator) IOMessageImpl(eu.esdihumboldt.hale.common.core.io.report.impl.IOMessageImpl) XmlSchemaPatternFacet(org.apache.ws.commons.schema.XmlSchemaPatternFacet) XmlSchemaFractionDigitsFacet(org.apache.ws.commons.schema.XmlSchemaFractionDigitsFacet) NumberValidator(eu.esdihumboldt.util.validator.NumberValidator) UnionValidationConstraint(eu.esdihumboldt.hale.io.xsd.reader.internal.constraint.UnionValidationConstraint) ValidationConstraint(eu.esdihumboldt.hale.common.schema.model.constraint.type.ValidationConstraint) XmlSchemaMinExclusiveFacet(org.apache.ws.commons.schema.XmlSchemaMinExclusiveFacet) OrValidator(eu.esdihumboldt.util.validator.OrValidator) XmlSchemaEnumerationFacet(org.apache.ws.commons.schema.XmlSchemaEnumerationFacet) PatternValidator(eu.esdihumboldt.util.validator.PatternValidator) XmlSchemaObjectCollection(org.apache.ws.commons.schema.XmlSchemaObjectCollection) XmlSchemaFacet(org.apache.ws.commons.schema.XmlSchemaFacet) DigitCountValidator(eu.esdihumboldt.util.validator.DigitCountValidator) XmlSchemaMinInclusiveFacet(org.apache.ws.commons.schema.XmlSchemaMinInclusiveFacet) QName(javax.xml.namespace.QName) LinkedList(java.util.LinkedList) UnionValidationConstraint(eu.esdihumboldt.hale.io.xsd.reader.internal.constraint.UnionValidationConstraint) TypeConstraint(eu.esdihumboldt.hale.common.schema.model.TypeConstraint) ValidationConstraint(eu.esdihumboldt.hale.common.schema.model.constraint.type.ValidationConstraint) XmlSchemaMaxExclusiveFacet(org.apache.ws.commons.schema.XmlSchemaMaxExclusiveFacet) BigDecimal(java.math.BigDecimal) XmlSchemaTotalDigitsFacet(org.apache.ws.commons.schema.XmlSchemaTotalDigitsFacet) XmlSchemaMaxInclusiveFacet(org.apache.ws.commons.schema.XmlSchemaMaxInclusiveFacet) EnumerationValidator(eu.esdihumboldt.util.validator.EnumerationValidator) XmlSchemaMinLengthFacet(org.apache.ws.commons.schema.XmlSchemaMinLengthFacet) XmlSchemaSimpleType(org.apache.ws.commons.schema.XmlSchemaSimpleType) XmlSchemaLengthFacet(org.apache.ws.commons.schema.XmlSchemaLengthFacet) EnumerationValidator(eu.esdihumboldt.util.validator.EnumerationValidator) NumberValidator(eu.esdihumboldt.util.validator.NumberValidator) PatternValidator(eu.esdihumboldt.util.validator.PatternValidator) LengthValidator(eu.esdihumboldt.util.validator.LengthValidator) OrValidator(eu.esdihumboldt.util.validator.OrValidator) AndValidator(eu.esdihumboldt.util.validator.AndValidator) Validator(eu.esdihumboldt.util.validator.Validator) DigitCountValidator(eu.esdihumboldt.util.validator.DigitCountValidator) XmlSchemaMaxLengthFacet(org.apache.ws.commons.schema.XmlSchemaMaxLengthFacet) XmlSchemaWhiteSpaceFacet(org.apache.ws.commons.schema.XmlSchemaWhiteSpaceFacet)

Example 2 with XmlSchemaEnumerationFacet

use of org.apache.ws.commons.schema.XmlSchemaEnumerationFacet in project cxf by apache.

the class XmlSchemaUtils method enumeratorValues.

/**
 * Retrieve the string values for an enumeration.
 * @param type
 */
public static List<String> enumeratorValues(XmlSchemaSimpleType type) {
    XmlSchemaSimpleTypeContent content = type.getContent();
    XmlSchemaSimpleTypeRestriction restriction = (XmlSchemaSimpleTypeRestriction) content;
    List<XmlSchemaFacet> facets = restriction.getFacets();
    List<String> values = new ArrayList<>();
    for (XmlSchemaFacet facet : facets) {
        XmlSchemaEnumerationFacet enumFacet = (XmlSchemaEnumerationFacet) facet;
        values.add(enumFacet.getValue().toString());
    }
    return values;
}
Also used : XmlSchemaFacet(org.apache.ws.commons.schema.XmlSchemaFacet) XmlSchemaSimpleTypeRestriction(org.apache.ws.commons.schema.XmlSchemaSimpleTypeRestriction) ArrayList(java.util.ArrayList) XmlSchemaSimpleTypeContent(org.apache.ws.commons.schema.XmlSchemaSimpleTypeContent) XmlSchemaEnumerationFacet(org.apache.ws.commons.schema.XmlSchemaEnumerationFacet)

Example 3 with XmlSchemaEnumerationFacet

use of org.apache.ws.commons.schema.XmlSchemaEnumerationFacet in project cxf by apache.

the class WSDLToCorbaHelper method createCorbaEnum.

private Enum createCorbaEnum(XmlSchemaSimpleTypeRestriction restrictionType, QName name, QName schematypeName) {
    Enum corbaEnum = new Enum();
    corbaEnum.setType(schematypeName);
    corbaEnum.setName(name.getLocalPart());
    corbaEnum.setQName(name);
    corbaEnum.setRepositoryID(REPO_STRING + name.getLocalPart().replace('.', '/') + IDL_VERSION);
    for (XmlSchemaFacet f : restrictionType.getFacets()) {
        XmlSchemaEnumerationFacet val = (XmlSchemaEnumerationFacet) f;
        Enumerator enumerator = new Enumerator();
        enumerator.setValue(val.getValue().toString());
        corbaEnum.getEnumerator().add(enumerator);
    }
    return corbaEnum;
}
Also used : Enum(org.apache.cxf.binding.corba.wsdl.Enum) XmlSchemaFacet(org.apache.ws.commons.schema.XmlSchemaFacet) Enumerator(org.apache.cxf.binding.corba.wsdl.Enumerator) XmlSchemaEnumerationFacet(org.apache.ws.commons.schema.XmlSchemaEnumerationFacet)

Example 4 with XmlSchemaEnumerationFacet

use of org.apache.ws.commons.schema.XmlSchemaEnumerationFacet in project tomee by apache.

the class CommonsSchemaInfoBuilder method createXmlTypeInfo.

public static XmlTypeInfo createXmlTypeInfo(QName qname, XmlSchemaType type) {
    if (qname == null)
        throw new NullPointerException("qname is null");
    if (type == null)
        throw new NullPointerException("type is null");
    XmlTypeInfo typeInfo = new XmlTypeInfo();
    typeInfo.qname = qname;
    typeInfo.anonymous = qname.getLocalPart().indexOf('>') >= 0;
    if (type instanceof XmlSchemaSimpleType) {
        XmlSchemaSimpleType simpleType = (XmlSchemaSimpleType) type;
        XmlSchemaSimpleTypeContent content = simpleType.getContent();
        if (content instanceof XmlSchemaSimpleTypeList) {
            XmlSchemaSimpleTypeList list = (XmlSchemaSimpleTypeList) content;
            typeInfo.simpleBaseType = list.getItemType().getQName();
            // this is a list
            typeInfo.listType = true;
        } else if (content instanceof XmlSchemaSimpleTypeRestriction) {
            XmlSchemaSimpleTypeRestriction restriction = (XmlSchemaSimpleTypeRestriction) content;
            typeInfo.simpleBaseType = restriction.getBaseTypeName();
            // is this an enumeration?
            for (Iterator iterator = restriction.getFacets().getIterator(); iterator.hasNext(); ) {
                if (iterator.next() instanceof XmlSchemaEnumerationFacet) {
                    typeInfo.enumType = true;
                    break;
                }
            }
        }
    } else if (type instanceof XmlSchemaComplexType) {
        XmlSchemaComplexType complexType = (XmlSchemaComplexType) type;
        // SOAP array component type
        typeInfo.arrayComponentType = extractSoapArrayComponentType(complexType);
        // process attributes (skip soap arrays which have non-mappable attributes)
        if (!isSoapArray(complexType)) {
            XmlSchemaObjectCollection attributes = complexType.getAttributes();
            for (Iterator iterator = attributes.getIterator(); iterator.hasNext(); ) {
                Object item = iterator.next();
                if (item instanceof XmlSchemaAttribute) {
                    XmlSchemaAttribute attribute = (XmlSchemaAttribute) item;
                    Object old = typeInfo.attributes.put(attribute.getQName().getLocalPart(), attribute.getSchemaTypeName());
                    if (old != null) {
                        throw new IllegalArgumentException("Complain to your expert group member, spec does not support attributes with the same local name and differing namespaces: original: " + old + ", duplicate local name: " + attribute);
                    }
                }
            }
        }
    } else {
        LOG.warn("Unknown schema type class " + typeInfo.getClass().getName());
    }
    return typeInfo;
}
Also used : XmlSchemaSimpleTypeList(org.apache.ws.commons.schema.XmlSchemaSimpleTypeList) XmlSchemaSimpleTypeRestriction(org.apache.ws.commons.schema.XmlSchemaSimpleTypeRestriction) XmlSchemaSimpleTypeContent(org.apache.ws.commons.schema.XmlSchemaSimpleTypeContent) XmlSchemaAttribute(org.apache.ws.commons.schema.XmlSchemaAttribute) XmlSchemaSimpleType(org.apache.ws.commons.schema.XmlSchemaSimpleType) Iterator(java.util.Iterator) XmlSchemaComplexType(org.apache.ws.commons.schema.XmlSchemaComplexType) XmlSchemaObject(org.apache.ws.commons.schema.XmlSchemaObject) XmlSchemaEnumerationFacet(org.apache.ws.commons.schema.XmlSchemaEnumerationFacet) XmlSchemaObjectCollection(org.apache.ws.commons.schema.XmlSchemaObjectCollection)

Example 5 with XmlSchemaEnumerationFacet

use of org.apache.ws.commons.schema.XmlSchemaEnumerationFacet in project cxf by apache.

the class EnumType method writeSchema.

@Override
public void writeSchema(XmlSchema root) {
    XmlSchemaSimpleType simple = new XmlSchemaSimpleType(root, true);
    simple.setName(getSchemaType().getLocalPart());
    XmlSchemaSimpleTypeRestriction restriction = new XmlSchemaSimpleTypeRestriction();
    restriction.setBaseTypeName(Constants.XSD_STRING);
    simple.setContent(restriction);
    Object[] constants = getTypeClass().getEnumConstants();
    List<XmlSchemaFacet> facets = restriction.getFacets();
    for (Object constant : constants) {
        XmlSchemaEnumerationFacet f = new XmlSchemaEnumerationFacet();
        f.setValue(getValue(constant));
        facets.add(f);
    }
}
Also used : XmlSchemaFacet(org.apache.ws.commons.schema.XmlSchemaFacet) XmlSchemaSimpleType(org.apache.ws.commons.schema.XmlSchemaSimpleType) XmlSchemaSimpleTypeRestriction(org.apache.ws.commons.schema.XmlSchemaSimpleTypeRestriction) XmlSchemaEnumerationFacet(org.apache.ws.commons.schema.XmlSchemaEnumerationFacet)

Aggregations

XmlSchemaEnumerationFacet (org.apache.ws.commons.schema.XmlSchemaEnumerationFacet)7 XmlSchemaFacet (org.apache.ws.commons.schema.XmlSchemaFacet)5 XmlSchemaSimpleTypeRestriction (org.apache.ws.commons.schema.XmlSchemaSimpleTypeRestriction)5 XmlSchemaSimpleType (org.apache.ws.commons.schema.XmlSchemaSimpleType)4 XmlSchemaSimpleTypeContent (org.apache.ws.commons.schema.XmlSchemaSimpleTypeContent)3 QName (javax.xml.namespace.QName)2 Enum (org.apache.cxf.binding.corba.wsdl.Enum)2 Enumerator (org.apache.cxf.binding.corba.wsdl.Enumerator)2 XmlSchemaObjectCollection (org.apache.ws.commons.schema.XmlSchemaObjectCollection)2 AST (antlr.collections.AST)1 IOMessageImpl (eu.esdihumboldt.hale.common.core.io.report.impl.IOMessageImpl)1 TypeConstraint (eu.esdihumboldt.hale.common.schema.model.TypeConstraint)1 ValidationConstraint (eu.esdihumboldt.hale.common.schema.model.constraint.type.ValidationConstraint)1 UnionValidationConstraint (eu.esdihumboldt.hale.io.xsd.reader.internal.constraint.UnionValidationConstraint)1 AndValidator (eu.esdihumboldt.util.validator.AndValidator)1 DigitCountValidator (eu.esdihumboldt.util.validator.DigitCountValidator)1 EnumerationValidator (eu.esdihumboldt.util.validator.EnumerationValidator)1 LengthValidator (eu.esdihumboldt.util.validator.LengthValidator)1 NumberValidator (eu.esdihumboldt.util.validator.NumberValidator)1 OrValidator (eu.esdihumboldt.util.validator.OrValidator)1