Krankes Vorhaben: Von VB auf Java Webservice

Status
Nicht offen für weitere Antworten.

The_S

Top Contributor
Hi-Ho,

ich publiziere mit der @WebService Annotation einen WebService (wer häts gedacht). Auf diesen WebService greift eine VB-Anwendung drauf zu (kein VB.NET oder sonstwas, sondern das ganz alte VB6, das von M$ schon nicht mehr supported wird). Das Problem bei der Sache:

Der Performante und einfachere Weg von VB um den WebService aufzurufen erzeugt bspw. folgende XML:

Code:
<SOAP-ENV:Envelope xmlns:SOAPSDK1="http://www.w3.org/2001/XMLSchema"
	xmlns:SOAPSDK2="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:SOAPSDK3="http://schemas.xmlsoap.org/soap/encoding/"
	xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
	<SOAP-ENV:Body>
		<SOAPSDK4:test xmlns:SOAPSDK4="xyz"> 
			<SOAPSDK4:arg0>Holla die Waldfee, ich bin ein Parameter</SOAPSDK4:arg0>
		</SOAPSDK4:test>
	</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Problem hierbei ist der Parameter. Sobald der Namespace (SOAPSDK4) vor dem Argument steht (also ich beziehe mich auf die Zeile

Code:
<SOAPSDK4:arg0>Holla die Waldfee, ich bin ein Parameter</SOAPSDK4:arg0>

), wird das von Java nicht mehr als Parameter erkannt und ich erhalte folglich "null".

Über einen anderen, weitaus inporformanteren und komplizierteren Weg, könnte ich von VB aus sagen, dass anstelle von

Code:
<SOAPSDK4:arg0>Holla die Waldfee, ich bin ein Parameter</SOAPSDK4:arg0>

das hier

Code:
<arg0>Holla die Waldfee, ich bin ein Parameter</arg0>

generiert und abgeschickt werden soll. Dann funktionierts. Ist aber wie gesagt sehr unperformant und kompliziert.

Deshalb meine Frage: Kann ich meinem Java-Webservice irgendwie beibringen, dass er auch Parameter in der anderen Form akzeptiert?

Danke!
 

Ebenius

Top Contributor
Funktioniert es denn auch nicht, wenn Du bei der Annotation den targetNamespace=xyz setzt?

Wie sieht dann das WSDL Deines WebServices aus? Damit kann man mehr sagen.
 

The_S

Top Contributor
Der Namespace ist gesetzt.

wsdl:

Code:
<types></types>
<message name="test">
<part name="arg0" type="xsd:string"></part>
</message>
<message name="testResponse">
<part name="return" type="xsd:string"></part>
</message>
<portType name="DLP">
<operation name="test" parameterOrder="arg0">
<input message="tns:test"></input>
<output message="tns:testResponse"></output>
</operation>
</portType>
<binding name="DlpPortBinding" type="tns:DLP">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"></soap:binding>
<operation name="test">

<soap:operation soapAction=""></soap:operation>
<input>
<soap:body use="literal" namespace="http://localhost:8080/DlpService/wsdl"></soap:body>
</input>
<output>
<soap:body use="literal" namespace="http://localhost:8080/DlpService/wsdl"></soap:body>
</output>
</operation>
</binding>
<service name="DlpService">
<port name="DlpPort" binding="tns:DlpPortBinding">
<soap:address location="http://localhost:8080/DlpService"></soap:address>
</port>
</service>
</definitions>

Danke schonmal :) .
 

Ebenius

Top Contributor
Nur damit ich das richtig verstehe: Du musst nur die message-parts (also arg0) vom Namespace-Prefix befreien, damit es funktioniert? Oder auch die Message (test)?
 

Ebenius

Top Contributor
Also mir schaut's so aus, als ob das VB-Zeug einfach RPC-style nicht kann und auf Teufel-komm-raus Document-style spielen möchte. Bin leider kein Experte, was JAX-WS angeht.
 

The_S

Top Contributor
Also wie gesagt, ich bekomms schon von VB in der richtigen Form rüber. Nur da mit enormen Aufwand und performance-verlust.

Deshalb die Frage, ob man IRGENDWIE Java beibringen kann, auch die VB-Anfrage entgegen zu nehmen. Falls das nicht klappt, ist das auch nicht so schlimm. Ist sowieso nur Migrations-Phase und VB als Frontend wird ohnehin später abgelöst.

Mein JPA und EmbeddedId Problem ist da viel dringlicher ;) .
 

foobar

Top Contributor
Für M$ bedeutet plattformunabhängig läuft mit WinXP und Vista SCNR

Ich hatte auch mal ein ganz ähnliches Problem mit einem Webservice und .net Client. Alle anderen Webserviceclients konnten auf den Dienst zugreifen nur der doofe .net wollte net.
Durch langes Suchen habe ich dann heraus gefunden, daß der Client sich an einer bestimmten Notation im WSDL aufgehangen hat. Es gab aber auch keine vernünftige Fehlermeldung oder ähnliches es ging einfach net.
Letztendlich habe ich dann eine kompatibliätsoption in cxf gefunden anhand der ich dann ein WSDL von Hand erstellen konnte.

Probleme mit Namespaces gab es in dem Zusammenhand auch einige. Viele Clients sind da eben sehr kleinlich *gg*
 

foobar

Top Contributor
Die Interoperabilität von WS ist generell ein Problem. Wenn dann noch eine andere Problemwelt wie M$ dazu kommt, geht gar nichts mehr *gg*

Es gibt auch Tools um die Kompatibiltät zu testen z.b. in Eclipse WTP
http://www.ws-i.org/
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben