public ReplyAction readReplyAction(Element replyElem, CompositeActivity parent) { ReplyAction replyAction = new ReplyAction(); // partner link String partnerLinkName = replyElem.getAttribute(BpelConstants.ATTR_PARTNER_LINK); PartnerLinkDefinition partnerLink = parent.findPartnerLink(partnerLinkName); if (partnerLink == null) { bpelReader.getProblemHandler().add(new ParseProblem("partner link not found", replyElem)); return replyAction; } replyAction.setPartnerLink(partnerLink); // port type Role myRole = partnerLink.getMyRole(); // BPEL-181 detect absence of my role if (myRole == null) { bpelReader .getProblemHandler() .add(new ParseProblem("partner link does not indicate my role", replyElem)); return replyAction; } PortType portType = bpelReader.getMessageActivityPortType(replyElem, partnerLink.getMyRole()); // operation Operation operation = bpelReader.getMessageActivityOperation(replyElem, portType); if (operation.getStyle() != OperationType.REQUEST_RESPONSE) { bpelReader .getProblemHandler() .add(new ParseProblem("not a request/response operation", replyElem)); return replyAction; } replyAction.setOperation(operation); // message exchange // BPEL-74: map the empty message exchange to null for compatibility with Oracle replyAction.setMessageExchange( XmlUtil.getAttribute(replyElem, BpelConstants.ATTR_MESSAGE_EXCHANGE)); // fault name Message replyMessage; Attr faultNameAttr = replyElem.getAttributeNode(BpelConstants.ATTR_FAULT_NAME); if (faultNameAttr != null) { QName faultName = XmlUtil.getQNameValue(faultNameAttr); replyAction.setFaultName(faultName); Fault fault = operation.getFault(faultName.getLocalPart()); if (fault == null) { bpelReader.getProblemHandler().add(new ParseProblem("fault not found", replyElem)); return replyAction; } replyMessage = fault.getMessage(); } else replyMessage = operation.getOutput().getMessage(); // variable VariableDefinition variable = bpelReader.getMessageActivityVariable( replyElem, BpelConstants.ATTR_VARIABLE, parent, replyMessage); replyAction.setVariable(variable); // correlations Element correlationsElement = XmlUtil.getElement(replyElem, BpelConstants.NS_BPEL, BpelConstants.ELEM_CORRELATIONS); if (correlationsElement != null) replyAction.setCorrelations( bpelReader.readCorrelations(correlationsElement, parent, variable)); return replyAction; }