Index: C:/workspace/woden/woden/src/org/apache/woden/internal/BaseWSDLReader.java =================================================================== --- C:/workspace/woden/woden/src/org/apache/woden/internal/BaseWSDLReader.java (revision 473144) +++ C:/workspace/woden/woden/src/org/apache/woden/internal/BaseWSDLReader.java (working copy) @@ -886,15 +886,46 @@ } else { - //TODO this is a temp fix, correct action to use MEP to determine default - if(faultRef.getDirection().equals(Direction.IN)) + //This is a limited solution supporting the 3 MEPs in the Part 2 spec. + //TODO generic support for user-defined, extensible MEPs. + + InterfaceOperationElement iop = (InterfaceOperationElement)faultRef.getParentElement(); + URI mep = iop.getPattern(); + + if(Constants.MEP_URI_IN_OUT.equals(mep)) { - faultRef.setMessageLabel(MessageLabel.IN); + //Ruleset is fault-replaces-message, so fault is in same direction as msg. + //The is replaced by an . + //The is replaced by an . + //The msg label should match the msg label. + if(Constants.ELEM_OUTFAULT.equals(faultRefEl.getLocalName())) + { + faultRef.setMessageLabel(MessageLabel.OUT); + } + else + { + faultRef.setMessageLabel(MessageLabel.IN); + } } - else + else if(Constants.MEP_URI_ROBUST_IN_ONLY.equals(mep)) { - faultRef.setMessageLabel(MessageLabel.OUT); + //Ruleset is message-triggers-fault, so fault is opposite direction to msg. + //The can trigger an . + //The msg label should match the msg label. + if(Constants.ELEM_OUTFAULT.equals(faultRefEl.getLocalName())) + { + faultRef.setMessageLabel(MessageLabel.IN); //the is triggered by the + } + else + { + //TODO this MEP may have only s, not s, so treat this as an error. + faultRef.setMessageLabel(MessageLabel.OUT); + } } + else if(Constants.MEP_URI_IN_ONLY.equals(mep)) + { + //TODO Ruleset is no-faults, so treat this as an error. + } } parseExtensionAttributes(faultRefEl, InterfaceFaultReferenceElement.class, faultRef, desc); @@ -953,7 +984,8 @@ } else { - //TODO this is a temp fix, correct action to use MEP to determine default + //This is a limited solution supporting the 3 MEPs in the Part 2 spec. + //TODO generic support for user-defined, extensible MEPs. if(message.getDirection().equals(Direction.IN)) { message.setMessageLabel(MessageLabel.IN); @@ -1285,8 +1317,50 @@ if(msgLabel != null) { faultRef.setMessageLabel(new NCName(msgLabel)); - //Note, the BindFaultRef component does not expose msg label so no derived default is needed. - //The msgLabel attr is only used for validating against a placeholder message from a MEP. + } + else + { + //This is a limited solution supporting the 3 MEPs in the Part 2 spec. + //TODO generic support for user-defined, extensible MEPs. + + BindingOperationElement bop = (BindingOperationElement)faultRef.getParentElement(); + InterfaceOperationElement iop = bop.getInterfaceOperationElement(); + URI mep = iop.getPattern(); + + if(Constants.MEP_URI_IN_OUT.equals(mep)) + { + //Ruleset is fault-replaces-message, so fault is in same direction as msg. + //The is replaced by an . + //The is replaced by an . + //The msg label should match the msg label. + if(Constants.ELEM_OUTFAULT.equals(faultRefEl.getLocalName())) + { + faultRef.setMessageLabel(MessageLabel.OUT); + } + else + { + faultRef.setMessageLabel(MessageLabel.IN); + } + } + else if(Constants.MEP_URI_ROBUST_IN_ONLY.equals(mep)) + { + //Ruleset is message-triggers-fault, so fault is opposite direction to msg. + //The can trigger an . + //The msg label should match the msg label. + if(Constants.ELEM_OUTFAULT.equals(faultRefEl.getLocalName())) + { + faultRef.setMessageLabel(MessageLabel.IN); //the is triggered by the + } + else + { + //TODO this MEP may have only s, not s, so treat this as an error. + faultRef.setMessageLabel(MessageLabel.OUT); + } + } + else if(Constants.MEP_URI_IN_ONLY.equals(mep)) + { + //TODO Ruleset is no-faults, so treat this as an error. + } } parseExtensionAttributes(faultRefEl, BindingFaultReferenceElement.class, faultRef, desc); @@ -1352,7 +1426,8 @@ } else { - //TODO this is a temp fix, correct action to use MEP to determine default + //This is a limited solution supporting the 3 MEPs in the Part 2 spec. + //TODO generic support for user-defined, extensible MEPs. if(message.getDirection().equals(Direction.IN)) { message.setMessageLabel(MessageLabel.IN);