示例#1
0
文件: Soap.php 项目: seytar/psx
 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();
 }