}
context.pop();
} else if (XmlUtil.matchesTagNS(e2, WSDLConstants.QNAME_FAULT)) {
context.push();
context.registerNamespaces(e2);
Fault fault = new Fault(forest.locatorTable.getStartLocation(e2));
fault.setParent(operation);
String messageAttr =
Util.getRequiredAttribute(e2, Constants.ATTR_MESSAGE);
fault.setMessage(context.translateQualifiedName(context.getLocation(e2), messageAttr));
String nameAttr =
XmlUtil.getAttributeOrNull(e2, Constants.ATTR_NAME);
fault.setName(nameAttr);
operation.addFault(fault);
gotFault = true;
// check for extensiblity attributes
for (Iterator iter2 = XmlUtil.getAllAttributes(e2);
iter2.hasNext();
) {
Attr e3 = (Attr)iter2.next();
if (e3.getLocalName().equals(Constants.ATTR_MESSAGE) ||
e3.getLocalName().equals(Constants.ATTR_NAME))
continue;
// possible extensibility element -- must live outside the WSDL namespace
checkNotWsdlAttribute(e3);
if (!handleExtension(context, fault, e3, e2)) {
// ignore the extensiblity attribute
// TODO throw a WARNING
}
}
// verify that there is at most one child element and it is a documentation element
boolean gotDocumentation2 = false;
for (Iterator iter2 = XmlUtil.getAllChildren(e2);
iter2.hasNext();
) {
Element e3 = Util.nextElement(iter2);
if (e3 == null)
break;
if (XmlUtil
.matchesTagNS(e3, WSDLConstants.QNAME_DOCUMENTATION)) {
if (gotDocumentation2) {
errReceiver.error(forest.locatorTable.getStartLocation(e), WsdlMessages.PARSING_ONLY_ONE_DOCUMENTATION_ALLOWED(e.getLocalName()));
}
gotDocumentation2 = true;
if(fault.getDocumentation() == null)
fault.setDocumentation(getDocumentationFor(e3));
} else {
// possible extensibility element -- must live outside the WSDL namespace
checkNotWsdlElement(e3);
if (!handleExtension(context, fault, e3)) {
checkNotWsdlRequired(e3);