/** Called by the sax parser when the end of an element is encountered. */ public void endElement(String namespaceURI, String local, String name) throws SAXException { if (name.equals(TagNames.CALLFLOW)) { // Do an integrity check. // For every Expect node, there must be // a valid event template. try { callFlow.checkIntegrity(); } catch (Exception ex) { System.out.println(ex.getMessage()); ex.printStackTrace(); throw new SAXException(ex.getMessage()); } } else if (name.equals(TagNames.JYTHON_CODE)) { if (this.jythonCode != null) { JythonInterp jythonInterp = callFlow.getJythonInterp(); try { jythonInterp.exec(this.jythonCode); } catch (PyException ex) { throw new SAXException( "error in evalScript \n" + this.jythonCode + "\n" + ex.getMessage()); } this.jythonCode = null; } } else if (name.equals(TagNames.EXPECT)) { if (this.jythonCode != null) currentExpectNode.setJythonCode(this.jythonCode); this.jythonCode = null; callFlow.addExpectNode(currentExpectNode); currentExpectNode = null; } else if (name.equals(TagNames.SIP_REQUEST)) { if (this.messageTemplateContext) { MessageTemplate msgTemplate = new MessageTemplate(messageTemplate, id, this.jythonCode); callFlow.addMessageTemplate(msgTemplate); messageTemplate = null; this.jythonCode = null; } } else if (name.equals(TagNames.SIP_RESPONSE)) { if (this.messageTemplateContext) { MessageTemplate msgTemplate = new MessageTemplate(this.messageTemplate, this.id, this.jythonCode); callFlow.addMessageTemplate(msgTemplate); messageTemplate = null; this.jythonCode = null; } } else if (name.equals(TagNames.GENERATE)) { generateContext = false; if (generatedMessage.messageType.equals(Attr.SipRequest) && generatedMessage.method == null) { System.out.println("Current message node = " + generatedMessage.messageId); throw new SAXException("Missing method"); } } else if (name.equals(TagNames.MESSAGE_TEMPLATES)) { messageTemplateContext = false; } }