Mark,
Obwohl dies vor einiger Zeit gefragt wurde, stieß ich auf eine Lösung und dachte, es Leute in der Zukunft helfen könnten.
Mein Bedarf war ähnlich. Ich habe eine .xsd von einem Kollegen und möchte eine Klassendatei von ihm erzeugen. Meine Hoffnung ist, dass ich das Objekt leicht marshallen kann und es an seinen REST-fähigen Endpunkt übergeben kann, wo sein Java-Server die Nutzlast entmarshallt und dynamisch das Objekt auf seiner Seite ohne zusätzlichen Aufwand baut.
Die Lösung, die ich fand, war die soap4r
von https://github.com/rubyjedi/soap4r zu bekommen. Ich habe die beiden * .rb Dateien im Verzeichnis bin ausführbare Datei und dann lief:
bin/xsd2ruby.rb --xsd <source>.xsd --classdef <filename_prefix>
Diese eine neue Datei erzeugt mit jedem der xsd:complexType
als Klasse implementiert. Alle anderen komplexen Typen wurden auch mit den richtigen Vererbungsbeziehungen generiert, und xsd:element
wurde als Instanzvariable definiert und auch ein Klasseninitialisierer definiert.
Lauf xsd2ruby.rb
selbst die Optionen ergab:
~/src/test/soap4r:bin/xsd2ruby.rb
Usage: bin/xsd2ruby.rb --xsd xsd_location [options]
xsd_location: filename or URL
Example:
bin/xsd2ruby.rb --xsd myapp.xsd --classdef foo
Options:
--xsd xsd_location
--classdef [filenameprefix]
--mapping_registry
--mapper
--module_path [Module::Path::Name]
--force
--quiet
Aus Gründen der Vollständigkeit, dehnte ich meine Klasse mit der folgenden (dies ist ein "Prospect" Klasse):
class Prospect
include Enumerable
def each(&block)
self.instance_variables.collect{|v| (v.gsub /@/, '').to_sym }.each(&block)
end
end
Diese Lassen Sie mich es als den Körper einer Net::HTTP::Post
Anfrage verwenden.
Auf die Frage eines freien to_xml
: Ich habe es nicht gefunden. Das Ruby-Objekt kommt mit einem to_yaml
und to_json
aus der Box, aber ich habe keine einfache Konvertierung in XML gefunden. Also kam es auf eine eigene Rolle "to_xml".
Hoffe, das hilft.
Es gibt eine Möglichkeit, ActiveX-Klassenobjekte in XML zu serialisieren. Aber ich glaube nicht, dass Sie nach etwas dieser Art suchen. – Chirantan