8. Allgemeiner SOAP-Client für AltaVista BabelFish,
eBay Price Watcher und andere einfache SOAP-Dienste
Die folgende Java-Klasse "SoapResultFromArray"
implementiert einen allgemeinen SOAP-Client für einfache
SOAP-Dienste. Sie kann zum Beispiel mit obigem HelloWorldService
kommunizieren oder im Internet verfügbare SOAP-Dienste zum
Beispiel zum AltaVista
Babelfish Translation Service und zu eBay
nutzen. Allerdings funktioniert sie nur mit sehr einfachen
Diensten, die simple Objekte und Namespace-Strukturen
verwenden.
Speichern Sie die Java-Klasse in der neu zu erstellenden
Datei "SoapResultFromArray.java" und führen
Sie bei eingeschalteter Internetverbindung folgende
Kommandos aus:
javac SoapResultFromArray.java |
java SoapResultFromArray https://localhost/soap/servlet/rpcrouter
helloworld urn:helloworld getMessage sInput
MeinName |
java SoapResultFromArray
https://services.xmethods.net:80/perl/soaplite.cgi
urn:xmethodsBabelFish#BabelFish urn:xmethodsBabelFish
BabelFish translationmode de_en sourcedata
"Hallo Welt, Guten Tag" |
java SoapResultFromArray
https://services.xmethods.net:80/perl/soaplite.cgi
urn:xmethodsBabelFish#BabelFish urn:xmethodsBabelFish
BabelFish translationmode de_fr sourcedata
"Hallo Welt, Guten Tag" |
java SoapResultFromArray
https://services.xmethods.net:80/soap/servlet/rpcrouter
EbayWatcher urn:xmethods-EbayWatcher
getCurrentPrice auction_id 2049959393 |
java SoapResultFromArray
https://www.soapclient.com/xml/SQLDataSoap.WSDL
/SQLDataSRL /SQLDataSRL ProcessSRL SRLFile
/xml/whois.sri RequestName whois key
"ibm.com" |
java SoapResultFromArray
https://www.soapclient.com/xml/SQLDataSoap.WSDL
/SQLDataSRL /SQLDataSRL ProcessSRL SRLFile
/xml/web.sri RequestName Google key
"SOAP" > Result.html |
Falls Ihr Webbrowser die mit "java"
beginnenden Zeilen auf mehrere Zeilen umgebrochen hat: Bitte
geben Sie diese als eine einzige Kommandozeile ein.
Die beim eBay-Beispiel verwendete "auction_id"
"2049959393" müssen Sie durch eine
aktuell gültige eBay-ID-Nummer ersetzen.
Bei der mit "... > Result.html"
endenden Zeile müssen Sie die resultierende Datei "Result.html"
im Webbrowser anzeigen.
Informationen zu den benutzten SOAP-Diensten finden Sie
unter:
- HelloWorldService
- http://www.xmethods.net:
BabelFish
- http://www.xmethods.net:
eBay Price Watcher
- http://www.soapclient.com/whois.html
- http://www.soapclient.com/webSearch.html
- http://www.xmethods.net/ve2/Directory.po
- http://www.soapclient.com/XmethodsServices.html
Die Datei "SoapResultFromArray.java":
import java.net.*;
import java.util.*;
import org.apache.soap.*;
import org.apache.soap.rpc.*;
public class SoapResultFromArray
{
public static void main( String[] args )
{
if( 6 > args.length )
{
System.out.println( "Error: SoapResultFromArray needs at least 6 parameters:" );
System.out.println( " LocationURL SOAPAction NamespaceURI Method");
System.out.println( " ParmName1 ParmValue1 ParmName2 ParmValue2 ..." );
return;
}
System.out.println( "Location URL = " + args[0] );
System.out.println( "SOAPAction = " + args[1] );
System.out.println( "Namespace URI = " + args[2] );
System.out.println( "Method Name = " + args[3] );
int i = 3;
while( ++i < args.length - 1 )
{
System.out.println( i/2-1 + ". Param Name = " + args[i] );
System.out.println( i/2-1 + ". Param Value = " + args[++i] );
}
Object oResult = null;
try
{
oResult = getSoapResultFromObjectArray( args );
}
catch( Exception ex )
{
System.out.println( "Error:\n" + ex.getMessage() );
return;
}
if( null != oResult )
System.out.println( "Result Class = " + oResult.getClass() );
System.out.println( "Result Value = " + oResult );
}
public static Object getSoapResultFromObjectArray( Object[] args )
throws Exception
{
Object oResult = null;
Vector params = new Vector();
int i = 3;
while( ++i < args.length - 1 )
params.addElement( new Parameter( args[i++].toString(),
args[i].getClass(),
args[i], null ) ); // Parameters
Call call = new Call();
call.setTargetObjectURI( args[2].toString() ); // Namespace URI
call.setMethodName( args[3].toString() ); // Method Name
call.setEncodingStyleURI( Constants.NS_URI_SOAP_ENC );
call.setParams( params );
Response resp = call.invoke( new URL( args[0].toString() ), // Location URL
args[1].toString() ); // SOAPAction
if( resp.generatedFault() )
throw new Exception( resp.getFault().toString() );
else
if( null != resp.getReturnValue() )
oResult = resp.getReturnValue().getValue();
return oResult;
}
}
|
|