code: public void processElement(CElementPropertyInfo property, ClassOutline classOutline, Outline model) {
  		XSComponent schemaComponent = property.getSchemaComponent();
  		ParticleImpl particle = (ParticleImpl) schemaComponent;
  		// must be reflection because of cxf-codegen
  		int maxOccurs = toInt(Utils.getField("maxOccurs", particle));
  		int minOccurs = toInt(Utils.getField("minOccurs", particle));
  		boolean nillable = toBoolean(Utils.getField("nillable",particle.getTerm())); 
  		JFieldVar field = classOutline.implClass.fields().get(propertyName(property));
  
  		// workaround for choices
  		boolean required = property.isRequired();
  		if (minOccurs < 0 || minOccurs >= 1 && required && !nillable) {
  			if (!hasAnnotation(field, NotNull.class)) {
  				processNotNull(classOutline, field);
  			}
  		}
  		if (maxOccurs > 1) {
  			if (!hasAnnotation(field, Size.class)) {
  				log("@Size (" + minOccurs + "," + maxOccurs + ") " + propertyName(property)
  						+ " added to class " + classOutline.implClass.name());
  
  				field.annotate(Size.class).param("min", minOccurs).param("max", maxOccurs);
  			}
  		}
  		if (maxOccurs == -1 && minOccurs > 0) { // maxOccurs="unbounded"
  			if (!hasAnnotation(field, Size.class)) {
  				log("@Size (" + minOccurs + ") " + propertyName(property) + " added to class "
  						+ classOutline.implClass.name());
  				field.annotate(Size.class).param("min", minOccurs);
  			}
  		}
  
  		XSTerm term = particle.getTerm();
  		if (term instanceof ElementDecl) {
  			processElement(property, classOutline, field, (ElementDecl) term);
  		} else if (term instanceof DelayedRef.Element) {
  			XSElementDecl xsElementDecl = ((DelayedRef.Element) term).get();
  			processElement(property, classOutline, field, (ElementDecl) xsElementDecl);
  		}
  
  	}
docs: XS:Element