private function loadMessagePart(Message $message, DOMElement $node) { $part = new Part($message, $node->getAttribute("name")); $part->setDocumentation($this->getDocumentation($node)); $message->addPart($part); return function () use($part, $node) { if ($node->hasAttribute("element")) { list($name, $ns) = self::splitParts($node, $node->getAttribute("element")); $part->setElement($part->getDefinition()->getSchema()->findElement($name, $ns)); } elseif ($node->hasAttribute("type")) { list($name, $ns) = self::splitParts($node, $node->getAttribute("type")); $part->setType($part->getDefinition()->getSchema()->findType($name, $ns)); } $this->dispatcher->dispatch('message.part', new MessagePartEvent($part, $node)); }; }