Webservices WSO2 / SOAP mit C++

chrootdev

Grünschnabel
Hi,

ich beginne damit, mich mit Webservices zu befassen, aber ich komme damit nicht so ganz klar.

Ich habe mir WSO2 für Webservices mit C++ herunter geladen und unter Linux installiert.

Wie gehe ich jetzt weiter vor? Ich habe eine WSDL Datei, und möchte daraus die Client und Server Sourcefiles erzeugen.

Kennt sich hier jemand mit WSO2, welches eigentlich Apache Axis2 für C++ angepasst ist, aus?

Bin ich eigentlich mit meiner WSDL Datei auf dem richtigen Weg?

Ich wäre auch dankbar für links zu Einsteigertutorials oder Anleitungen die ein minimales Beispiel von A-Z durcharbeiten. Oder gibt es dazu irgendwelche (nicht allgemein Webservices betreffende) Bücher?

Ich habe auch laut Anleitung das WSDL2CPP Script erstellt, aber wenn ich die WSDL Beispieldatei damit verwende bekomme ich immer folgenden Fehler:

Code:
Exception in thread "main" org.apache.axis2.wsdl.codegen.CodeGenerationException: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
        at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.generate(CodeGenerationEngine.java:271)
        at org.apache.axis2.wsdl.WSDL2Code.main(WSDL2Code.java:35)
        at org.apache.axis2.wsdl.WSDL2CPP.main(WSDL2CPP.java:19)
Caused by: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
        at org.apache.axis2.wsdl.codegen.extension.SimpleDBExtension.engage(SimpleDBExtension.java:53)
        at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.generate(CodeGenerationEngine.java:224)
        ... 2 more
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.axis2.wsdl.codegen.extension.SimpleDBExtension.engage(SimpleDBExtension.java:50)
        ... 3 more
Caused by: org.apache.axis2.schema.SchemaCompilationException: java.io.IOException: Root location needs to be a directory!
        at org.apache.axis2.schema.writer.CPPBeanWriter.init(CPPBeanWriter.java:185)
        at org.apache.axis2.schema.SchemaCompiler.<init>(SchemaCompiler.java:211)
        at org.apache.axis2.schema.ExtensionUtility.invoke(ExtensionUtility.java:100)
        ... 8 more
Caused by: java.io.IOException: Root location needs to be a directory!
        at org.apache.axis2.schema.writer.CPPBeanWriter.initWithFile(CPPBeanWriter.java:300)
        at org.apache.axis2.schema.writer.CPPBeanWriter.init(CPPBeanWriter.java:146)
        ... 10 more

WSDL
Code:
<definitions name="HelloService"
   targetNamespace="http://www.examples.com/wsdl/HelloService.wsdl"
   xmlns="http://schemas.xmlsoap.org/wsdl/"
   xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
   xmlns:tns="http://www.examples.com/wsdl/HelloService.wsdl"
   xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <message name="SayHelloRequest">
      <part name="firstName" type="xsd:string"/>
   </message>
   <message name="SayHelloResponse">
      <part name="greeting" type="xsd:string"/>
   </message>
   <portType name="Hello_PortType">
      <operation name="sayHello">
         <input message="tns:SayHelloRequest"/>
         <output message="tns:SayHelloResponse"/>
      </operation>
   </portType>
   <binding name="Hello_Binding" type="tns:Hello_PortType">
   <soap:binding style="rpc"
      transport="http://schemas.xmlsoap.org/soap/http"/>
   <operation name="sayHello">
      <soap:operation soapAction="sayHello"/>
      <input>
         <soap:body
            encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
            namespace="urn:examples:helloservice"
            use="encoded"/>
      </input>
      <output>
         <soap:body
            encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
            namespace="urn:examples:helloservice"
            use="encoded"/>
      </output>
   </operation>
   </binding>
   <service name="Hello_Service">
      <documentation>WSDL File for HelloService</documentation>
      <port binding="tns:Hello_Binding" name="Hello_Port">
	 <soap:address location="http://www.examples.com/SayHello/" />
      </port>
   </service>
</definitions>

Danke!
 
Hi.
Ich habe auch laut Anleitung das WSDL2CPP Script erstellt, aber wenn ich die WSDL Beispieldatei damit verwende bekomme ich immer folgenden Fehler:

Code:
Caused by: java.io.IOException: Root location needs to be a directory!
Offenbar hast du irgendwo einen Pfad zu einer Datei angegeben wo eigentlich ein Verzeichnis erwartet wurde bzw. das Verzeichnis existiert nicht.

Du könntest mal gSOAP probieren. Es funktioniert sehr einfach...
Code:
wsdl2h dein_service.wsdl
soapcpp2 dein_service.h
Falls du selbst einen Service erstellst (statt einen vorhandenen Service zu konsumieren), kannst du auch direkt die Service.h Datei entwerfen, da soapcpp2 auch eine WSDL generieren kann.

Gruß
 
Hi und danke für die Antwort.

Von gSOAP hab ich mir die Homepage schon angesehen, und es sieht auch sehr gut aus, aber mein Problem ist, ich bin mir nicht sicher wie langlebig gSOAP ist?

Bei WSO bzw. Apache Axis kann ich sicher sein, das da ständig daran gearbeitet wird usw. Wie sieht das bei gSOAP aus? Entwickelt da eine Community mit?

Ich möchte nämlich für meine späteren Projekte einen wirklichen Standard verwenden und bei Produkten von Apache kann man sich darauf verlassen.
 
Von gSOAP hab ich mir die Homepage schon angesehen, und es sieht auch sehr gut aus, aber mein Problem ist, ich bin mir nicht sicher wie langlebig gSOAP ist?
Wer kann das schon sagen? Immerhin gibt es das Projekt schon fast 10 Jahre, ist unter einer kommerziellen Lizenz (mit Support) verfügbar und es wird von einigen bekannten Firmen verwendet (IBM etc.).
Bei WSO bzw. Apache Axis kann ich sicher sein, das da ständig daran gearbeitet wird usw. Wie sieht das bei gSOAP aus? Entwickelt da eine Community mit?
Kann ich nicht sagen. Das Projekt ist bei Sourceforge registriert, hat eine Mailing Liste etc.
Ich möchte nämlich für meine späteren Projekte einen wirklichen Standard verwenden und bei Produkten von Apache kann man sich darauf verlassen.
Meine Erfahrung mit Apache Projekten ist, das grundsätzlich erstmal nichts funktioniert. Auf den Ärger habe ich keine Lust und nehme lieber ein ausgereiftes Produkt.

Gruß
 
Zurück