2009-07-09 6 views
0

je traite un appel WebService SOAP à partir d'un serveur qui attend de recevoir les appels de méthode paramaters dans le format de:SOAP :: RPC :: Problèmes de formatage du pilote. Comment puis-je le changer?

<urn:offeringId> 354 </urn:offeringId> 

Mais SOAP RPC :: :: pilote génère des messages sous forme de:

<offeringId xsi:type = "xsd:int">354</offeringId> 

Le serveur conserve la moindre erreur quand il reçoit ces messages (d'autant plus qu'il est attendu offeringId être un type personnalisé interne lui-même, pas un int). Y a-t-il un moyen de configurer le pilote pour formater les choses de la manière attendue par le serveur? Le serveur fait-il même du SOAP? J'ai du mal à trouver une référence à ce style de formatage pour SOAP (je sais que cela fonctionne, car SOAPUI fonctionne très bien avec ce type de message).

-Jenny

Edit: J'ai au moins une partie de celui-ci résolu. le RPC :: Driver (évidemment) utilise le standard RPC, alors que apparemment le serveur auquel j'essaye de parler fait "document". Maintenant, quand je regarde l'API de RPC :: Driver, je vois une méthode nommée "add_document_method". Cela me semble être ce que je veux, mais je n'arrive pas à comprendre quels paramètres lui donner. Les exemples que je l'ai vu sur le net ne font pas de sens pour moi, des choses comme:

def GetNamePair(response) 
    response.account.each do |x| 
    class << x 
     attr :configuration, true  
    end  
    x.configuration = Hash[*x.a.map do |y| 
     [y.__xmlattr[XSD::QName.new(nil, 'n')], String.new(y)] 
    end.flatten] 
    end 
end 

mNS = 'urn:zimbraAdmin' 
drv.add_document_method('GetAllAdminAccountsRequest', mNS, [XSD::QName.new(mNS, 'GetAllAdminAccountsRequest')], 
    [XSD::QName.new(mNS, 'GetAllAdminAccountsResponse')]) 

puts YAML.dump(GetNamePair(drv.GetAllAdminAccountsRequest([])) 

Tout ce que je sais vraiment est que j'ai une méthode qui prend dans certains paramètres .... Je vraiment don Ne comprenez pas pourquoi, si cette méthode fait ce que je pense, ça doit être plus compliqué. N'est-ce pas juste une question de prendre exactement les mêmes données et de les former différemment? Je suis tellement confus ....

Répondre

0

Ok, ce que j'ai fini par faire était d'utiliser SOAP: RPC: Pilotes add_document_method, ce qui me demande de lui donner le wsdl, namespace, etc, et lui donner les attributs plus tard comme une seule chose hash d'entrée (et me donne la sortie dans un format similaire). Il a travaillé, il n'était pas aussi propre que add_rpc_method (qui est waht add_method par défaut)

-Jenny

Questions connexes