Soap und Java

AThlord

Lt. Junior Grade
Registriert
Sep. 2005
Beiträge
271
Hallo Community!

Erst einmal muss ich sagen das ich noch nicht viel mit Webservices gemacht habe.

Meine (simple) Aufgabenstellung: eine Funktion mittels SOAP und Java auf einem entfernten Server rufen und einen String übergeben. Der Server liefert mir einfach den String wieder zurück. Ich muss das mit axis machen...

soweit so gut :D

Problem: Man muss sich authentifiezieren mittels API-Key und Developer-Key, beides habe ich.
Nur wie bekomme ich die Daten in den Header? ich blick einfach nicht durch und bin etwas erschlagen durch die Menge an Informationen... nun peil ich null mehr :D

das (ist ja fast peinlich:)) einzige was ich habe ist das:

Service service = new Service();
Call call = service.createCall();

später würde dann in dem call-Objekt ja noch angegeben werden welche Funktion gerufen werden soll usw., nur soweit komme ich ja nicht, da ich eben keine Ahnung habe wie ich die Daten in den Header bekomme.

Habt erbarmen mit mir :) ich Google schon 5 std... also ich kenne Google ;)

Gruß und danke,

Athlord
Ergänzung ()

niemand eine idee ? :(
 
Musst du zwingend SOAP nutzen? Ich kann dir RESTful-Webservices ans Herz legen. Schau dir am besten dieses Tutorial an: http://www.vogella.com/articles/REST/article.html

Der große Vorteil von REST ist die generische Schnittstelle (GET, POST, ...), also alles http-Methoden und die sehr hohe Geschwindigkeit, da der Service auf das Wesentliche reduziert ist. Ich habe bisher sehr gute Erfahrungen mit REST gemacht und würde kein SOAP mehr einsetzen.
 
leider muss ich das benutzen, ja :(

Hinweis:
ich muss zugeben das ich jetzt erst den Zusammenhang zwischen wsdl und soap verstanden habe... eben noch komplett neu alles für mich :)

ich habe mir jetzt die benötigten klassen mittels axis/xmlbeans generieren lassen, mit dem befehl (natürlich angepasst, aber damit ihr wisst was ich prinzipiell gemacht habe :):

%AXIS2_HOME%\bin\WSDL2Java -uri Axis2UserGuide.wsdl -p org.apache.axis2.axis2userguide -d xmlbeans -s

rausgekommenist folgendes: siehe datei unbenannt.png

nun habe ich mittels eclipse aus der build.xml ein projekt erstellt. hat auch wunderbar geklappt. nur wenn ich jetzt einen soap aufruf machen will, bekomme ich folgenden fehler:

Cannot load SchemaTypeSystem. Unable to load class with name schemaorg_apache_xmlbeans.system.s5CECDC9BE8EA96D3072681F89DDDEF1D.TypeSystemHolder. Make sure the generated binary files are on the classpath.


jetzt habe ich gegoogelt und folgende lösung gefunden:

--------------------------------
In case anyone gets this same error, here is how I solved it:

Buried in all those .xsb files, the WSDL2Java command creates a compiled
class, like so:

schemaorg_apache_xmlbeans/system/sA83263C4583E5B147EF2C07FFFC6DFF2/TypeSystemHolder.class

That class needs to be in the classpath used to compile the java source files
which WSDL2Java produced. Here's how the relevant parts of my build.xml
turned out:

<path id="axis.classpath">
<pathelement location="build/classes" />
<fileset dir="${axis.home}/lib">
<include name="**/*.jar" />
</fileset>
<fileset dir="lib">
<include name="*.jar"/>
</fileset>
<pathelement location="${build.classes}" />
</path>

<target name="compile_wsdl2" depends="wsdl2">
<echo message="Compiling wsdl2 files"/>

<javac
srcdir="wise"
destdir="${build.classes}"
deprecation="true"
failonerror="true" debug="true"
>

<include name="**/*.java"/>
<classpath refid="axis.classpath"/>
</javac>

<copy todir="${build.classes}" >
<fileset dir="wise" >
<include name="**/*.properties"/>
<!-- any XML/XSL file -->
<include name="**/*.x*"/>
</fileset>
</copy>
</target>

<!-- ./WSDL2Java.sh -uri wsdl/service.wsdl -ss -sd -o wise/ -p
com.siemens.swa.plugins.webservices.types -->
<target name="wsdl2" depends="clean,prepare">
<java classname="org.apache.axis2.wsdl.WSDL2Java" fork="true">
<classpath refid="axis.classpath"/>
<arg value="-uri"/>
<arg file="wsdl/service.wsdl"/>
<arg value="-ss"/>
<arg value="-sd"/>
<arg value="-o"/>
<arg file="wise"/>
<arg value="-p"/>
<arg value="com.siemens.swa.plugins.webservices.types"/>
</java>

<!-- Move the schema folder to classpath-->
<move todir="${build.classes}">
<fileset dir="wise">
<include name="**/*schema*/**/*.class"/>
<include name="**/*schema*/**/*.xsb"/>
</fileset>
</move>

</target>
----------------------------------

das ist bestimmt eine tolle Lösung, nur hab ich keine Ahnung was man in der build xml ändern muss... noch nie was mit ant gemacht...

sorry für den langen post, vllt kennt ja jmd das Problem hier :) habe die Hoffnung noch nicht aufgegeben :)

gruß Athlord
Ergänzung ()

falls irgendjemand das selbe Problem hat:
Einfach den in "ressources" enthalteten Ordnern beimir "schemaorg_apache_xmlbeans" in den Ordner
"build/classes" kopieren.
 

Anhänge

  • Unbenannt.PNG
    Unbenannt.PNG
    21,8 KB · Aufrufe: 140
Zurück
Oben