# WebService Client: Parameterübergabe



## Guest (5. Aug 2006)

Hallo

Ich möchte auf den hier beschriebenen StockQuote-WebService zugreifen mittels folgendem "Client":

```
import java.net.URL;

import javax.xml.namespace.QName;
import javax.xml.rpc.Call;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.Service;
import javax.xml.rpc.ServiceFactory;

public class Client {

    public static void main(String[] args) throws Exception {
         URL url = new URL("http://www.webservicex.net/stockquote.asmx?WSDL");
        
         String ns = "http://www.webserviceX.NET/";
         QName qname = new QName(ns, "StockQuote");
         QName port = new QName(ns, "StockQuoteSoap");
         QName operation = new QName(ns, "GetQuote");
        
         ServiceFactory factory = ServiceFactory.newInstance();
         Service service = factory.createService(url, qname);
         Call call = service.createCall(port, operation);
         call.addParameter("symbol", org.apache.axis.Constants.XSD_STRING, ParameterMode.IN);
         System.out.println("output:" + call.invoke(new Object[] { "IBM" }));
    }
}
```
Dabei erhalte ich folgende Fehlermeldung:
Error invoking operation:  
javax.xml.rpc.JAXRPCException: Number of parameters passed in (1) doesn't match the number of IN/INOUT parameters (2) from the addParameter() calls

Kann mir jemand auf die Sprünge helfen, was ich falsch mache?

Herzlichen Dank


----------



## AlArenal (5. Aug 2006)

Naja, steht doch da: 
Die Methode erwartet zwei Parameter, du lieferst aber nur einen.


----------



## Gast (5. Aug 2006)

anscheinend musst du addParameter() weglassen, bei mir funktionierts dann


----------



## Guest (5. Aug 2006)

@AlArenal:
Gemäss dem WSDL-File wird nur ein String, das Symbol der Aktie, erwartet.

@Gast:
Echt?!!? Wenn ich addParameter() auskommentiere erhalte ich diverse Fehlermeldungen:

Exception in thread "main" AxisFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
 faultSubcode: 
 faultString: java.lang.NullPointerException
 faultActor: 
 faultNode: 
 faultDetail: 
	{http://xml.apache.org/axis/}stackTrace:java.lang.NullPointerException
	at java.util.Hashtable.put(Hashtable.java:396)
	at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.setProperty(SAXParserImpl.java:395)
        usw...

Könntest du den Code posten, welcher bei dir funktioniert hat?

Gruss


----------



## AlArenal (6. Aug 2006)

Anonymous hat gesagt.:
			
		

> @AlArenal:
> Gemäss dem WSDL-File wird nur ein String, das Symbol der Aktie, erwartet.



Du meinst, die Fehlermeldung ist fehlerhaft?


----------



## Guest (6. Aug 2006)

AlArenal hat gesagt.:
			
		

> Anonymous hat gesagt.:
> 
> 
> 
> ...



Das Gefühl habe ich ja, da nur der eine Parameter erwartet wird.


----------



## SlaterB (6. Aug 2006)

tja, viel gibts von meiner Seite (ich war der zweite Gast) nicht zu posten:
einfach dein Code ohne addParameter()


```
import java.net.URL;

import javax.xml.namespace.QName;
import javax.xml.rpc.Call;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.Service;
import javax.xml.rpc.ServiceFactory;

public class Test {

	public static void main(String[] args) throws Exception {
		p("start");
		try {
			URL url =
				new URL("http://www.webservicex.net/stockquote.asmx?WSDL");

			String ns = "http://www.webserviceX.NET/";
			QName qname = new QName(ns, "StockQuote");
			QName port = new QName(ns, "StockQuoteSoap");
			QName operation = new QName(ns, "GetQuote");

			ServiceFactory factory = ServiceFactory.newInstance();
			Service service = factory.createService(url, qname);
			Call call = service.createCall(port, operation);
			//			call.addParameter(
			//				"symbol",
			//				org.apache.axis.Constants.XSD_STRING,
			//				ParameterMode.IN);

			p("output:" + call.invoke(new Object[] { "IBM" }));
		} catch (Exception e) {
			e.printStackTrace();
		}

	}
	public static void p(Object o) {
		System.out.println((o == null ? o : o.toString()));
	}
}
```
was du vielleicht testen könntest wäre ein Aufruf von invoke mit einem leeren Array,

mit addParameter() bekomme ich da die Fehlermeldung wie oben 
Number of parameters passed in (0) doesn't match the number of IN/INOUT parameters (2)

ohne addParameter() logischerweise:
Number of parameters passed in (0) doesn't match the number of IN/INOUT parameters (1)


-------

wie siehts da bei dir aus?

--------

ansonsten benutze ich etwas veraltetes Eclipse 2.1, Java 1.4 und einen ganzen Berg an Bibliotheken damit Java das überhaupt kompiliert.., wenn du sagst welche andere neben jaxrpc.jar benötigt wird, kann ichs mal mit weniger versuchen


```
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" path=""/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
    <classpathentry kind="src" path="/Utilities"/>
    <classpathentry kind="lib" path="D:/Test/lib/mysql-connector-java-3.0.14-production-bin.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/log4j-1.2.8.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/jaxrpc.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/xmlsec.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/addressing-1.0.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/axis.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/axis-url.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/bootstrap.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/cog-axis.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/cog-jglobus.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/cog-tomcat.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/cog-url.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/commonj.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/commons-beanutils.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/commons-cli-2.0.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/commons-collections-3.0.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/commons-digester.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/commons-discovery.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/commons-logging.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/concurrent.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/cryptix32.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/cryptix.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/cryptix-asn1.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/db2jcc.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/db2jcc_license_cu.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/globus_usage_core.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/globus_usage_packets_common.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/globus_wsrf_tools_test.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/jakarta-oro-2.0.8.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/jce-jdk13-125.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/jgss.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/junit.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/lucene-1.4-final.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/naming-common.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/naming-factory.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/naming-java.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/naming-resources.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/ogsadai-activities.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/ogsadai-core.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/ogsadai-examples.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/ogsadai-tools.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/ogsadai-wsrf.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/ogsadai-wsrf-stubs.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/opensaml.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/postgresql-8.1dev-403.jdbc2.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/postgresql-8.1dev-403.jdbc2ee.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/postgresql-8.1dev-403.jdbc3.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/puretls.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/resolver.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/saaj.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/servlet.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/wsdl4j.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/wsrf_common.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/wsrf_core.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/wsrf_core_registry.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/wsrf_core_registry_stubs.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/wsrf_core_samples_authzService.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/wsrf_core_samples_authzService_stubs.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/wsrf_core_samples_counter.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/wsrf_core_samples_counter_stubs.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/wsrf_core_samples_mgmt.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/wsrf_core_samples_mgmt_stubs.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/wsrf_core_stubs.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/wsrf_provider_jce.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/wsrf_test.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/wsrf_test_interop.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/wsrf_test_interop_stubs.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/wsrf_test_unit.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/wsrf_test_unit_stubs.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/wsrf_tools.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/wss4j.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/xalan.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/xercesImpl.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/xml-apis.jar"/>
    <classpathentry kind="lib" path="D:/Test/lib/xmldb.jar"/>
    <classpathentry kind="output" path=""/>
</classpath>
```


----------



## zubi (7. Aug 2006)

Danke für deine Antwort (ich bin der Gast-Startposter ).

Wenn ich addParameter() weglasse und invoke() einen leeren Object-Array übergebe, erhalte ich folgende Meldungen:

log4j:WARN No appenders could be found for logger (org.apache.axis.i18n.ProjectResourceBundle).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" AxisFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.generalException
 faultSubcode: 
 faultString: Error invoking operation:  
javax.xml.rpc.JAXRPCException: Number of parameters passed in (0) doesn't match the number of IN/INOUT parameters (1) from the addParameter() calls
 faultActor: 
 faultNode: 
 faultDetail: 
	{http://xml.apache.org/axis/}stackTrace:AxisFault

Mit addParameter() und leerem Array erhalte ich die gleiche Meldung wie du (0 von 2 erwarteten Parameter).

Zu meiner Umgebung: Die Klasse liegt in einem J2EE 1.4 Projekt erstellt vom JBoss-IDE PlugIn in Eclipse 3.1.2. Dabei werden standardmässig die J2EE 1.4, die Apache Axis 1.2 und die Web Services 1.0 Libraries dem Classpath hinzugefügt. Welche jedoch tatsächlich benutzt werden (sowohl für das Kompilieren als auch oder vorallem für die Ausführung) ist mir momentan noch nicht klar; ich habe diverse unterschiedliche Runtime-Fehler produziert, indem ich eine Bibliothek nach der anderen hinzugefügt habe...
Ich hab' irgendwie das Gefühl, dass auch hier der Fehler liegen muss, ansonsten müsste es bei mir ja auch funktionieren.


----------



## SlaterB (7. Aug 2006)

also in der Firma mit neueren Eclipse und Java 1.5 gehts auch wie von mir gepostet,
beide Male unter Windows, 
vielleicht können ja noch andere testen um sicher zu gehen


----------



## zubi (7. Aug 2006)

Es tut laufen . Seit ich die "original" Libraries des aktuellen Axis-Release verwende, funktioniert die Abfrage. Wo der Fehler in den von JBoss-IDE gewählten Bibliotheken liegt, weiss ich nicht und will ich momentan auch nicht wissen  :wink: .
Jedenfalls herzlichen Dank für deine Hilfe SlaterB!


----------

