function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
pickerpicker 

Exception on Query

I am trying to query the Account object. 
 
QueryResult qr = xbinding.query("select Id,Name from Account");
 
This throws a null pointer exception everytime.  I have logged in, and set the session header for xbinding.  What else could be stopping me from running this query?  Any help would be greatly appreciated, i've been stuck on this for hours....
SuperfellSuperfell
What's the stack trace for the NPE look like ? there are issues with some versions of Axis and the crimson parser (which is the default parser on some JDK versions) that can cause an NPE inside Axis.
pickerpicker
Here is my stack trace from catch (RemoteException)
 
 
AxisFault
 faultCode: {urn:fault.partner.soap.sforce.com}INVALID_FIELD
 faultSubcode:
 faultString: INVALID_FIELD:
select Id,Name,Id from Account
               ^
ERROR at Row:1:Column:16
duplicate field selected: Id
 faultActor:
 faultNode:
 faultDetail:
        {urn:fault.partner.soap.sforce.com}fault:
     <sf:exceptionCode>INVALID_FIELD</sf:exceptionCode>
     <sf:exceptionMessage>
select Id,Name,Id from Account
               ^
ERROR at Row:1:Column:16
duplicate field selected: Id</sf:exceptionMessage>
     <sf:row>1</sf:row>
     <sf:column>16</sf:column>

INVALID_FIELD:
select Id,Name,Id from Account
               ^
ERROR at Row:1:Column:16
duplicate field selected: Id
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstruct
orAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingC
onstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:274)
        at java.lang.Class.newInstance0(Class.java:308)
        at java.lang.Class.newInstance(Class.java:261)
        at org.apache.axis.encoding.ser.BeanDeserializer.<init>(BeanDeserializer
.java:125)
        at org.apache.axis.encoding.ser.BeanDeserializer.<init>(BeanDeserializer
.java:111)
        at com.sforce.soap.partner.fault.InvalidFieldFault.getDeserializer(Inval
idFieldFault.java:88)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at org.apache.axis.encoding.ser.BaseDeserializerFactory.getSpecialized(B
aseDeserializerFactory.java:176)
        at org.apache.axis.encoding.ser.BaseDeserializerFactory.getDeserializerA
s(BaseDeserializerFactory.java:117)
        at org.apache.axis.encoding.DeserializationContextImpl.getDeserializer(D
eserializationContextImpl.java:466)
        at org.apache.axis.encoding.DeserializationContextImpl.getDeserializerFo
rType(DeserializationContextImpl.java:481)
        at org.apache.axis.message.SOAPFaultDetailsBuilder.onStartChild(SOAPFaul
tDetailsBuilder.java:172)
        at org.apache.axis.encoding.DeserializationContextImpl.startElement(Dese
rializationContextImpl.java:963)
        at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1672)
        at org.apache.crimson.parser.Parser2.content(Parser2.java:1963)
        at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1691)
        at org.apache.crimson.parser.Parser2.content(Parser2.java:1963)
        at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1691)
        at org.apache.crimson.parser.Parser2.content(Parser2.java:1963)
        at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1691)
        at org.apache.crimson.parser.Parser2.content(Parser2.java:1963)
        at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1691)
        at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:667)
        at org.apache.crimson.parser.Parser2.parse(Parser2.java:337)
        at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:448)
        at javax.xml.parsers.SAXParser.parse(SAXParser.java:345)
        at org.apache.axis.encoding.DeserializationContextImpl.parse(Deserializa
tionContextImpl.java:242)
        at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:538)
        at org.apache.axis.Message.getSOAPEnvelope(Message.java:376)
        at org.apache.axis.client.Call.invokeEngine(Call.java:2629)
        at org.apache.axis.client.Call.invoke(Call.java:2599)
        at org.apache.axis.client.Call.invoke(Call.java:2279)
        at org.apache.axis.client.Call.invoke(Call.java:2200)
        at org.apache.axis.client.Call.invoke(Call.java:1714)
        at com.sforce.soap.partner.SoapBindingStub.query(SoapBindingStub.java:15
42)
        at LeadScorer.getData(LeadScorer.java:285)
        at LeadScorer.scoreIt(LeadScorer.java:174)
        at LeadScorer.main(LeadScorer.java:85)
SuperfellSuperfell
That's not an NPE, that's a valid fault from the service, your query is invalid, you can't select the same field more than once (you have Id twice)
pickerpicker

Hey, thanks a lot Simon.  I did not know that i could not select the same column more than once.  Now that i have that problem solved, i have a new one. It seems that my queryMore is throwing an exception now.  Here is the stack trace:

AxisFault
 faultCode: {urn:fault.partner.soap.sforce.com}INVALID_QUERY_LOCATOR
 faultSubcode:
 faultString: INVALID_QUERY_LOCATOR: invalid query locator
 faultActor:
 faultNode:
 faultDetail:
        {urn:fault.partner.soap.sforce.com}fault:
     <sf:exceptionCode>INVALID_QUERY_LOCATOR</sf:exceptionCode>
     <sf:exceptionMessage>invalid query locator</sf:exceptionMessage>


INVALID_QUERY_LOCATOR: invalid query locator
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstruct
orAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingC
onstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:274)
        at java.lang.Class.newInstance0(Class.java:308)
        at java.lang.Class.newInstance(Class.java:261)
        at org.apache.axis.encoding.ser.BeanDeserializer.<init>(BeanDeserializer
.java:125)
        at org.apache.axis.encoding.ser.BeanDeserializer.<init>(BeanDeserializer
.java:111)
        at com.sforce.soap.partner.fault.InvalidQueryLocatorFault.getDeserialize
r(InvalidQueryLocatorFault.java:84)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at org.apache.axis.encoding.ser.BaseDeserializerFactory.getSpecialized(B
aseDeserializerFactory.java:176)
        at org.apache.axis.encoding.ser.BaseDeserializerFactory.getDeserializerA
s(BaseDeserializerFactory.java:117)
        at org.apache.axis.encoding.DeserializationContextImpl.getDeserializer(D
eserializationContextImpl.java:466)
        at org.apache.axis.encoding.DeserializationContextImpl.getDeserializerFo
rType(DeserializationContextImpl.java:481)
        at org.apache.axis.message.SOAPFaultDetailsBuilder.onStartChild(SOAPFaul
tDetailsBuilder.java:172)
        at org.apache.axis.encoding.DeserializationContextImpl.startElement(Dese
rializationContextImpl.java:963)
        at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1672)
        at org.apache.crimson.parser.Parser2.content(Parser2.java:1963)
        at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1691)
        at org.apache.crimson.parser.Parser2.content(Parser2.java:1963)
        at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1691)
        at org.apache.crimson.parser.Parser2.content(Parser2.java:1963)
        at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1691)
        at org.apache.crimson.parser.Parser2.content(Parser2.java:1963)
        at org.apache.crimson.parser.Parser2.maybeElement(Parser2.java:1691)
        at org.apache.crimson.parser.Parser2.parseInternal(Parser2.java:667)
        at org.apache.crimson.parser.Parser2.parse(Parser2.java:337)
        at org.apache.crimson.parser.XMLReaderImpl.parse(XMLReaderImpl.java:448)

        at javax.xml.parsers.SAXParser.parse(SAXParser.java:345)
        at org.apache.axis.encoding.DeserializationContextImpl.parse(Deserializa
tionContextImpl.java:242)
        at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:538)
        at org.apache.axis.Message.getSOAPEnvelope(Message.java:376)
        at org.apache.axis.client.Call.invokeEngine(Call.java:2629)
        at org.apache.axis.client.Call.invoke(Call.java:2599)
        at org.apache.axis.client.Call.invoke(Call.java:2279)
        at org.apache.axis.client.Call.invoke(Call.java:2200)
        at org.apache.axis.client.Call.invoke(Call.java:1714)
        at com.sforce.soap.partner.SoapBindingStub.queryMore(SoapBindingStub.jav
a:1573)
        at LeadScorer.getData(LeadScorer.java:302)
        at LeadScorer.scoreIt(LeadScorer.java:175)
        at LeadScorer.main(LeadScorer.java:85)

SuperfellSuperfell
Did the query call actually return you a queryLocator ? have you read the notes on how many active cursors you can have (5) and when they timeout (15 minutes of inactivity).
pickerpicker

I am not sure if it returns me a query locator, but im trying to use:

qr = xbinding.queryMore(qr.getQueryLocator());

 

The timeout should not be a problem, as i am grabbing only 1 row of data per query and queryMore call.

I am also not sure of how many cursors i have.  The original query works fine, does what it should.  My code fails on the first call to queryMore.  Does that explain it well enough?  do i need to include more code?

SuperfellSuperfell
You only need to call queryMore if the original call to query returns a QueryResult that says done is false.
pickerpicker
So how does one go about closing old cursors so as not the exceed the limit (5)?
SuperfellSuperfell
When you create the 6th cursor the one with the oldest last used date is deleted.