public function write(&$obj, IProtocolFormatter $writer)
 {
     $writer->directWriteString(is_null($obj->getResponseURI()) ? "null" : $obj->getResponseURI());
     $writer->directWriteString(is_null($obj->getServiceURI()) ? "null" : $obj->getServiceURI());
     $writer->directWriteInt(-1);
     $writer->resetReferenceCache();
     $writer->beginWriteBodyContent();
     MessageWriter::writeObject($obj->getResponseDataObject(), $writer);
     $writer->endWriteBodyContent();
 }
 public static function writeObject(&$obj, IProtocolFormatter $formatter)
 {
     if (!self::$initialized) {
         self::init();
     }
     $writer = self::getWriter($obj);
     if (is_null($writer)) {
         throw new Exception("Writer is not found.");
     }
     try {
         if ($writer->isReferenceableType()) {
             $referenceCache = $formatter->getReferenceCache();
             if ($referenceCache == null) {
                 $formatter->resetReferenceCache();
                 $referenceCache = $formatter->getReferenceCache();
             }
             if ($referenceCache->hasObject($obj)) {
                 self::$s_referenceWriter->write($obj, $formatter);
                 return;
             } else {
                 $referenceCache->addObject($obj);
             }
         }
         $writer->write($obj, $formatter);
     } catch (Exception $ex) {
         if (LOGGING) {
             Log::logException(LoggingConstants::EXCEPTION, "Unable to write object", $ex);
         }
     }
 }