View Single Post
  #5 (permalink)  
Old 08-29-2006, 01:28 PM
nyamada nyamada is offline
Intermediate Member
 
Posts: 19
Default Just for documentation purposes

Here's how I got the SOAP message to the server in Ruby:
Code:
#!/usr/bin/ruby -w                                                                                                                                                                                                                                                                  
#require 'yaml'                                                                                                                                                                                                                                                                     
require 'soap/rpc/driver'
require 'soap/header/simplehandler'

class ClientAuthHeaderHandler < SOAP::Header::SimpleHandler
    MyHeaderName = XSD::QName.new("urn:zimbra", "context")

    def initialize(sessionid = nil, authtoken = nil)
      super(MyHeaderName)
      @sessionid = sessionid
      @authtoken = authtoken
    end

    def on_simple_outbound
      if @sessionid
        { "sessionId" => @sessionid, "authToken" => @authtoken}
      end
    end
end

class FolderAction < SOAP::SOAPRawString
  attr :extraattr, true
  def initialize(op,id)
    super(nil)
    @extraattr = {"op"=>op,"id"=>id}
  end
end

class FolderActionRequest
  @@schema_element = ["action", "SOAP::SoapString"]
  attr_accessor :action
  def initialize(action)
    @action = action
  end
end

#----------- open up a SOAP connnection                                                                                                                                                                                                                                             
# the urn is zimbraAccount (for work on user accounts) or zimbra (for general admin functions)                                                                                                                                                                                      

s = SOAP::RPC::Driver.new('https://zimbraHost:7071/service/admin/soap/',
                          'urn:zimbraAccount')
s.wiredump_dev = STDERR  #if $DEBUG                                                                                                                                                                                                                                                 

s.options["protocol.http.ssl_config.verify_mode"] = nil
s.add_method('AuthRequest',"account", "password")
token, lifetime, sessionid = s.AuthRequest(user_id,password)
s.headerhandler << ClientAuthHeaderHandler.new(sessionid, token)

#-------now run the command                                                                                                                                                                                                                                                         
mNS = 'urn:zimbraMail'
folder_action = 'empty' # or read or delete or ...                                                                                                                                                                                                                                  
folder_id = 7 # here I want to work on empty the address book                                                                                                                                                                                                                       

s.add_document_method('FolderActionRequest',
                      'FolderActionRequest',
                      [XSD::QName.new(mNS, 'FolderActionRequest')],
                      [XSD::QName.new(mNS, 'FolderActionResponse')])

# do it!                                                                                                                                                                                                                                                                            
s.FolderActionRequest(FolderActionRequest.new(FolderAction.new(folder_action,folder_id)))
Hope this is useful for someone else; it took me a minute to figure out...
Reply With Quote