public function write(RecordInterface $record) { $xmlWriter = new XMLWriter(); $xmlWriter->openMemory(); $xmlWriter->setIndent(true); $xmlWriter->startDocument('1.0', 'UTF-8'); $xmlWriter->startElement('soap:Envelope'); $xmlWriter->writeAttribute('xmlns:soap', 'http://schemas.xmlsoap.org/soap/envelope/'); if ($record instanceof ExceptionRecord) { $xmlWriter->startElement('soap:Body'); $xmlWriter->startElement('soap:Fault'); $xmlWriter->writeElement('faultcode', 'soap:Server'); $xmlWriter->writeElement('faultstring', $record->getMessage()); if ($record->getTrace()) { $xmlWriter->startElement('detail'); $graph = new GraphTraverser(); $graph->traverse($record, new Visitor\XmlWriterVisitor($xmlWriter, $this->namespace)); $xmlWriter->endElement(); } $xmlWriter->endElement(); $xmlWriter->endElement(); } else { $xmlWriter->startElement('soap:Body'); $record = new Record($this->requestMethod . 'Response', $record->getRecordInfo()->getFields()); $graph = new GraphTraverser(); $graph->traverse($record, new Visitor\XmlWriterVisitor($xmlWriter, $this->namespace)); $xmlWriter->endElement(); } $xmlWriter->endElement(); $xmlWriter->endDocument(); return $xmlWriter->outputMemory(); }