Hi Syed,

I think there are two points here:


   1. There is a bug with biomart, irrespective of how you query against it
   (soapUI, martview, Apache CXF). You've shown it in the previous email you
   sent: the response to my query contains multiple result rows that all share
   the same GO ID, even though the GO Name is different. For example,
   <resultsRow>
             <go_id xsi:type="xsd:string" modelReference="">GO ID(s)</go_id>
             <go_name xsi:type="xsd:string" modelReference="">GO
   Description</go_name>
          </resultsRow>
          <resultsRow>
             <go_id xsi:type="xsd:string"
   modelReference="">GO:0007049</go_id>
             <go_name xsi:type="xsd:string" modelReference="">cell
   cycle</go_name>
          </resultsRow>
          <resultsRow>
             <go_id xsi:type="xsd:string"
   modelReference="">GO:0007049</go_id>
             <go_name xsi:type="xsd:string" modelReference="">physiological
   process</go_name>
          </resultsRow>
   This simply doesn't make sense, especially as how the results (GO IDs)
   change if you don't ask to have the go_name attribute returned. Somewhere,
   there is an error in the methods being called. Perhaps this isn't a problem
   with biomart, but with whoever authored the uniprot mart. However, it is not
   a correct return type. Being able to access an up-to-date mart instance of
   uniprot might help resolve this issue.
   2. The soap client I'm using is NOT one I've written - it is
   autogenerated, via Apache CXF (a freely-available, widely-used SOAP app).
   Therefore *anyone* who may wish to use the Biomart SOAP instance you have
   via Apache CXF's wsdl2java feature *will* run into exactly the same problem.
   I think the problem may stem from the following part of martxsd:
       <xs:element name="queryResponse">
           <xs:complexType>
               <xs:sequence>
                   <xs:element minOccurs="0"
                               maxOccurs="unbounded"
                               name="resultsRow"
                               type="xs:string"/>
               </xs:sequence>
           </xs:complexType>
       </xs:element>
   This states that the query response will always be a sequence of
   xs:string, or in Java, a List<String>. This does not allow for the varied
   types of responses one can get based on the attributes of the query that
   they've written. Therefore I think that the java code is trying to fit in
   the response (such as the one Syed showed and which I copied a portion of
   into #1 above) into a sequence of xs:string, and this just isn't working. I
   can create an empty maven project that builds the Java code and runs the
   unit tests if it would help - then you could download that project, and just
   run it on your own system to see what the problem is and possible ways of
   resolving it. Perhaps there is some way to change the queryResponse?
   Because, as it stands, how does the queryResponse element above match the
   actual response given by the soap UI?

Thanks very much! :)



2009/1/24 Syed Haider <[email protected]>

> Hi Allyson,
> Just tried your query on SoapUI, works fine. The count is correct too, it
> returns 2.
> 2 means  there are two gene names (cdc13 and CDC13) in UNIPROT PROTOTYPE
> mart and the number of result rows are ~60 because of GO IDs attributes
> selection which makes the result set with all the GO IDs against the said
> gene names. Unfortunately, I cant be of any help on your Soap client why its
> misbehaving, somebody from list please ????
>
> Hope this helps a bit,
> Syed
>
>
> Allyson Lister wrote:
>
>> Hi all,
>>
>> I've tried to recreate a simple query done in biomart.org <
>> http://biomart.org>'s own MartView using the new SOAP services. Here is
>> my Unit Test method where I've done the query:
>>
>>
>> public class TestClass {
>>
>>    MartServiceSoap client;
>>
>>    @Before
>>    public void setUp() {
>>        // the JaxWsProxyFactoryBean method of getting the client doesn't
>> work. While the interceptors work and are
>>        // clearly getting the right sort of response from the biomart
>> service, the getRegistry() calls and similar
>>        // don't work properly.
>>        BioMartSoapService biomartService = new BioMartSoapService();
>>        client = biomartService.getBioMartSoapPort();
>>
>>    }
>>
>>    /**
>>     * Test the XML-equivalent query:
>>     * <?xml version="1.0" encoding="UTF-8"?>
>>     * <!DOCTYPE Query>
>>     * <Query  virtualSchemaName = "default" formatter = "TSV" header = "0"
>> uniqueRows = "0" count = "" datasetConfigVersion = "0.5" >
>>     * <p/>
>>     * <Dataset name = "uniprot" interface = "default" >
>>     * <Filter name = "gene_name" value = "cdc13"/>
>>     * <Attribute name = "go_id" />
>>     * <Attribute name = "go_name" />
>>     * </Dataset>
>>     * </Query>
>>     */
>>    @Test
>>    public void GoFromUniProtTest() throws BioMartException_Exception {
>>
>>        Filter filter = new Filter();
>>        filter.setName( "gene_name" );
>>        filter.setValue( "cdc13" );
>>
>>        Attribute a1 = new Attribute();
>>        a1.setName( "go_id" );
>>        Attribute a2 = new Attribute();
>>        a2.setName( "go_name" );
>>
>>        Dataset dataset = new Dataset();
>>        dataset.setName( "uniprot" );
>>        dataset.getFilter().add( filter );
>>        dataset.getAttribute().add( a1 );
>>        dataset.getAttribute().add( a2 );
>>        List<String> results =
>>                client.query( "default", 0, 1, 0, new ArrayList<Dataset>(
>> Arrays.asList( dataset ) ) );
>>        int iii = 0;
>>        for ( String result : results ) {
>>            System.err.println( "result: " + iii++ + " " + result );
>>        }
>>    }
>> }
>>
>> I have done this test twice, once with count set to 0 (to return actual
>> results) and once with count set to 1, to see how many results we'd get. In
>> the MartView, there are 50 results. Here is the output when count == 0:
>>
>> result: 0
>> result: 1
>> result: 2
>> result: 3
>> result: 4
>> result: 5
>> result: 6
>> result: 7
>> result: 8
>> result: 9
>> result: 10
>> result: 11
>> result: 12
>> result: 13
>> result: 14
>> result: 15
>> result: 16
>> result: 17
>> result: 18
>> result: 19
>> result: 20
>> result: 21
>> result: 22
>> result: 23
>> result: 24
>> result: 25
>> result: 26
>> result: 27
>> result: 28
>> result: 29
>> result: 30
>> result: 31
>> result: 32
>> result: 33
>> result: 34
>> result: 35
>> result: 36
>> result: 37
>> result: 38
>> result: 39
>> result: 40
>> result: 41
>> result: 42
>> result: 43
>> result: 44
>> result: 45
>> result: 46
>> result: 47
>> result: 48
>> result: 49
>> result: 50
>> result: 51
>> result: 52
>> result: 53
>> result: 54
>> result: 55
>> result: 56
>> result: 57
>> result: 58
>> result: 59
>> result: 60
>> result: 61
>> result: 62
>> result: 63
>> result: 64
>> result: 65
>> result: 66
>>
>> As you can see, there are only empty strings in the results, and yet there
>> are 66 empty strings. How am I misinterpreting the return value of the
>> query? Also, why is the size of the results List 66, when martview returns
>> 50?
>>
>> When I run with count == 1, I get the following result:
>> result: 0 2
>>
>> This means there was only one item in the list, which contained the string
>> value "2". This implies that there are only 2 results for this query, when
>> martview says there are 50.
>>
>> I am confused! Martview says the query has 50 results, and provides those
>> results. MartSoap says there are 66 (or 2!) but cannot display any of those
>> results.
>>
>> Please let me know what I'm doing wrong!
>>
>> --
>>
>> Allyson Lister
>> http://lurena.vox.com
>>
>> CISBAN, http://www.cisban.ac.uk
>> Newcastle University
>>
>


-- 

Allyson Lister
http://lurena.vox.com

CISBAN, http://www.cisban.ac.uk
Newcastle University

Reply via email to