org.xml.sax.SAXException: cvc-enumeration-valid: Value '${web.transport.guarantee:NONE}' is not facet-valid with respect to enumeration '[NONE, INTEGRAL, CONFIDENTIAL]'. It must be a value from the enumeration.

What is this pre-processing facility called? Where can I find more information about it? And can I configure it?

Yes, I got it sort of working. However it appears to be a bug (or at least a problem in the design) in JBossXB. Specifically: JBossXB appears to validate the schema *before* doing any propertyRef replacements. This is probably because it is using Xerces with schema validation turned on.

However sometimes the schema enumerates valid values for a field. In the case of web.xml's 'transport-guarantee', such values are NONE and CONFIDENTIAL. But they are *not* ${foo:NONE}.

So trying to put a dynamic property ref in some parts of web.xml will fail. It will also fail for other schemas that enumerate valid values. It would be nice to find a solution to this?

Yes, I got it sort of working. However it appears to be a bug (or at least a problem in the design) in JBossXB. Specifically: JBossXB appears to validate the schema *before* doing any propertyRef replacements. This is probably because it is using Xerces with schema validation turned on.

However sometimes the schema enumerates valid values for a field. In the case of web.xml's 'transport-guarantee', such values are NONE and CONFIDENTIAL. But they are *not* ${foo:NONE}.

I don't think that's the case. My guess is that you are setting the value of that system property via some *-service.xml file? Which might mean that the system property is not yet set when the web.xml is parsed and hence value not substituted. Something along these lines http://community.jboss.org/message/367141#367141. That's just a guess though. The real question is how and when are you setting the value for that "foo" system property?