You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@axis.apache.org by Moshe Bar-Nachoom <mo...@silver-kite.com> on 2005/07/05 17:48:02 UTC

Re: help with wsdl and google api... Solved

Problem Solved
and i'm not even sure why. i think it might be a problem with calling 
the method with a wrong set or type of variables.
i just the same line from a different example and ths works great.
Thanks for the time and partience.


Soactive Inc wrote:

>There seems to be some issue with deserializing the response message
>to the GoogleSearchResult object. Not sure what the real issue here
>would be since the exception thrown does not seem to reveal the actual
>cause.
>
>I like to use dynamic invocations as opposed to static. Here is a code
>snippet (feel to use it) that I used  for calling the Google Search
>service (without invoking via stubs - you still need the complex types
>though).
>
>-Arun
>
>// imports...
>
>import org.apache.axis.encoding.ser.*;
>import org.apache.axis.client.Call;
>import org.apache.axis.client.Service;
>import javax.xml.rpc.ParameterMode;
>import javax.xml.namespace.QName;
>
>// also import the google complex type objects...
>
>
>// in your Java code, use this code snippet (within a try/catch block)
>// ....
>
>        // define qnames
>        String targetNamespace = "urn:GoogleSearch";
>        String schemaNamespace = "urn:GoogleSearch";
>
>        QName serviceName = new QName(targetNamespace, "GoogleSearchService");
>
>        QName portName = new QName(targetNamespace, "GoogleSearchPort");
>        QName operationName = new QName(schemaNamespace, "doGoogleSearch");
>
>        // create service
>        Service service = new Service();
>        Call call = (Call) service.createCall();
>
>        // set port and operation name
>        call.setPortTypeName(portName);
>        call.setOperationName(operationName);
>
>        QName strQName = new QName("http://www.w3.org/2001/XMLSchema",
> "string");
>        QName intQName = new QName("http://www.w3.org/2001/XMLSchema",  "int");
>        QName boolQName = new
>QName("http://www.w3.org/2001/XMLSchema",  "boolean");
>
>        call.addParameter("key", strQName, ParameterMode.IN);
>        call.addParameter("q", strQName, ParameterMode.IN);
>        call.addParameter("start", intQName, ParameterMode.IN);
>        call.addParameter("maxResults", intQName, ParameterMode.IN);
>        call.addParameter("filter", boolQName, ParameterMode.IN);
>        call.addParameter("restrict", strQName, ParameterMode.IN);
>        call.addParameter("safeSearch", boolQName, ParameterMode.IN);
>        call.addParameter("lr", strQName, ParameterMode.IN);
>        call.addParameter("ie", strQName, ParameterMode.IN);
>        call.addParameter("oe", strQName, ParameterMode.IN);
>
>        // return type
>	call.setReturnType(org.apache.axis.Constants.XSD_STRING);
>	call.setReturnType(new QName("urn:GoogleSearch",
>"GoogleSearchResult"), GoogleSearchResult.class);
>	call.setReturnQName(new QName("", "return"));
>
>	// register type mapping
>	call.registerTypeMapping(GoogleSearchResult.class, new
>QName("urn:GoogleSearch", "GoogleSearchResult"),
>BeanSerializerFactory.class, BeanDeserializerFactory.class);
>	call.registerTypeMapping(DirectoryCategory.class, new
>QName("urn:GoogleSearch", "DirectoryCategory"),
>BeanSerializerFactory.class, BeanDeserializerFactory.class);
>	call.registerTypeMapping(ResultElement.class, new
>QName("urn:GoogleSearch", "ResultElement"),
>BeanSerializerFactory.class, BeanDeserializerFactory.class);
>
>	// set end point address
>        call.setTargetEndpointAddress("http://api.google.com/search/beta2");
>
>	// execute
>        // Invoke the WebService
>        String key = ""; // set your key here
>        String queryStr = "query"; // your search keyword
>        GoogleSearchResult result = (GoogleSearchResult)
>call.invoke(new Object[]{key,
>		queryStr, new Integer(0), new Integer(10), new Boolean(false), null,
>new Boolean(false),
>			null, null, null});
>
>	StringBuffer resultStrBuf = new StringBuffer();
>	for (int i = 0; i < result.getResultElements().length; i++) {
>		ResultElement element = result.getResultElements()[i];
>		resultStrBuf.append((i+1) + ": " + element.getTitle() + "<br>");
>	}
>
>	System.out.println("Search Response: " + responseStrBuf.toString());
>
>
>
>
>
>On 7/4/05, Moshe Bar-Nachoom <mo...@silver-kite.com> wrote:
>  
>
>> Sorry...
>> my mistake.
>> i tested for nullity (gsr == null) and i got false.
>> then i tried to output the gsr, as is, to the screen and got "null"
>> but i have the traffic. i can see it in the sniffer.
>> what's going on there?
>> help!!! :-)
>>
>> 
>> 
>> 
>> Moshe Bar-Nachoom wrote: 
>> 
>> thanks Arun.
>> 1) gsr is not a null. i've tested it in various ways.
>> 
>> 2) the stack i get is very simple. it tells me i have an error: "Exception
>>in thread "Thread-1" java.lang.NullPointerException at
>>axisThread.run(Glycerine.java:637)".
>> this is the line that i use to print some of the values i should'va gotten
>>in response from the server. although the communication seens to be ok, i
>>still get this null ppinter exception when trying to: gsr.getEndIndex() (for
>>example)
>> 
>> an important thing to note is that the gsp.doGoogleSearch(..) method works
>>and creates a request and gets a response (i've
>>  monitored that using etherea)
>> 
>> thanks for the help so far.
>> desparately looking for the light at the end :)
>> 
>> 
>> Soactive Inc wrote: 
>> Moshe,
>>
>>I am not an expert on this but will try to help...
>>
>>Seems like gsr itself is null...Is that true? Also, do you have the stack
>>trace?
>>
>>-Arun
>>
>>On 7/3/05, Moshe Bar-Nachoom <mo...@silver-kite.com> wrote:
>> 
>> 
>> hi all,
>> i'm new here and hope i can find some answers.
>> 
>> i used the wsdl2java utility to create the stub of the google api so i can
>>call it from axis.
>> i try a simple search and look for a reply, which i try and print one of
>>its returning data.
>> 
>> the call is very simple:
>> GoogleSearchService gss = new GoogleSearchServiceLocator();
>> GoogleSearchPort gsp = gss.getGoogleSearchPort();
>> GoogleSearchResult gsr = gsp.doGoogleSearch(googleKey, "search word" 0, 10,
>>true, "", false, "", "", "");
>> 
>> what i try and do in return is display the value of:
>> gsr.getEstimatedTotalResultsCount() and / or
>>gsr.getSearchTime()
>> for which i get an error:
>> SOAP messaging exception: null
>> java.lang.NullPointerException
>> 
>> i ran ethereal to review traffic and it seems there's a full qualified SOAP
>>messaging going around where the client sends the request object and gets
>>the response object.SOAP messaging exception: null
>> java.lang.NullPointerException
>> 
>> 
>> it seems to me the ptoblem is in the way i read and use the data from the
>>returning response.
>> can you please help? this is rather urgent and i need every bit of info i
>>can put my hands on.
>> 
>> thank you very much.
>> moshe
>> 
>> 
>>
>> 
>> 
>> 
>> 
>> 
>>
>>    
>>
>
>
>  
>