BeanDefinitionParserUtils.setPropertyValue(beanDefinition, element.getAttribute("fault-code"), "faultCode");
BeanDefinitionParserUtils.setPropertyValue(beanDefinition, element.getAttribute("fault-string"), "faultString");
BeanDefinitionParserUtils.setPropertyValue(beanDefinition, element.getAttribute("fault-actor"), "faultActor");
List<Element> faultDetails = DomUtils.getChildElementsByTagName(element, "fault-detail");
SoapFaultDetailValidationContext validationContext = new SoapFaultDetailValidationContext();
List<String> soapFaultDetails = new ArrayList<String>();
List<String> soapFaultDetailPaths = new ArrayList<String>();
for (Element faultDetailElement : faultDetails) {
if (faultDetailElement.hasAttribute("file")) {
if (StringUtils.hasText(DomUtils.getTextValue(faultDetailElement).trim())) {
throw new BeanCreationException("You tried to set fault-detail by file resource attribute and inline text value at the same time! " +
"Please choose one of them.");
}
String filePath = faultDetailElement.getAttribute("file");
soapFaultDetailPaths.add(filePath);
} else {
String faultDetailData = DomUtils.getTextValue(faultDetailElement).trim();
if (StringUtils.hasText(faultDetailData)) {
soapFaultDetails.add(faultDetailData);
} else {
throw new BeanCreationException("Not content for fault-detail is set! Either use file attribute or inline text value for fault-detail element.");
}
}
XmlMessageValidationContext context = new XmlMessageValidationContext();
String schemaValidation = faultDetailElement.getAttribute("schema-validation");
if (StringUtils.hasText(schemaValidation)) {
context.setSchemaValidation(Boolean.valueOf(schemaValidation));
}
String schema = faultDetailElement.getAttribute("schema");
if (StringUtils.hasText(schema)) {
context.setSchema(schema);
}
String schemaRepository = faultDetailElement.getAttribute("schema-repository");
if (StringUtils.hasText(schemaRepository)) {
context.setSchemaRepository(schemaRepository);
}
validationContext.addValidationContext(context);
}
if (!soapFaultDetails.isEmpty() || !soapFaultDetailPaths.isEmpty()) {
beanDefinition.addPropertyValue("faultDetails", soapFaultDetails);
beanDefinition.addPropertyValue("faultDetailResourcePaths", soapFaultDetailPaths);