// <binding> inside <component>
pattern = rootElementName + "/component/binding";
Rule createBindingSpecificationRule = new CreateBindingSpecificationRule();
digester.addRule(pattern, createBindingSpecificationRule);
digester.addInitializeProperty(pattern, "type", BindingType.DYNAMIC);
digester.addSetExtendedProperty(pattern, "expression", "value", true);
digester.addConnectChild(pattern, "setBinding", "name");
// <field-binding> inside <component>
// For compatibility with 1.3 DTD only, removed in 3.0 DTD
pattern = rootElementName + "/component/field-binding";
digester.addRule(pattern, createBindingSpecificationRule);
digester.addInitializeProperty(pattern, "type", BindingType.FIELD);
digester.addSetExtendedProperty(pattern, "field-name", "value", true);
digester.addConnectChild(pattern, "setBinding", "name");
// <inherited-binding> inside <component>
pattern = rootElementName + "/component/inherited-binding";
digester.addRule(pattern, createBindingSpecificationRule);
digester.addInitializeProperty(pattern, "type", BindingType.INHERITED);
digester.addSetLimitedProperties(pattern, "parameter-name", "value");
digester.addConnectChild(pattern, "setBinding", "name");
// <static-binding> inside <component>
pattern = rootElementName + "/component/static-binding";
digester.addRule(pattern, createBindingSpecificationRule);
digester.addInitializeProperty(pattern, "type", BindingType.STATIC);
digester.addSetExtendedProperty(pattern, "value", "value", true);
digester.addConnectChild(pattern, "setBinding", "name");
// <string-binding> inside <component>
// Maintained just for 1.3 DTD compatibility
pattern = rootElementName + "/component/string-binding";
digester.addRule(pattern, createBindingSpecificationRule);
digester.addInitializeProperty(pattern, "type", BindingType.STRING);
digester.addSetLimitedProperties(pattern, "key", "value");
digester.addConnectChild(pattern, "setBinding", "name");
// Renamed to <message-binding> in the 3.0 DTD
pattern = rootElementName + "/component/message-binding";
digester.addRule(pattern, createBindingSpecificationRule);
digester.addInitializeProperty(pattern, "type", BindingType.STRING);
digester.addSetLimitedProperties(pattern, "key", "value");
digester.addConnectChild(pattern, "setBinding", "name");
// <listener-binding> inside <component>
pattern = rootElementName + "/component/listener-binding";
digester.addRule(pattern, new CreateListenerBindingSpecificationRule());
digester.addSetLimitedProperties(pattern, "language", "language");
digester.addBody(pattern, "value");
digester.addConnectChild(pattern, "setBinding", "name");
// <external-asset>
pattern = rootElementName + "/external-asset";
Rule createAssetSpecificationRule = new CreateAssetSpecificationRule();
digester.addRule(pattern, createAssetSpecificationRule);
digester.addInitializeProperty(pattern, "type", AssetType.EXTERNAL);
digester.addValidate(
pattern,