Question

I use Entrez Utilities Web Service library to access pubmed articles from my Java application (using pubmed identifier). Full working example how to use this tool was published by Renaud in this post on github. Everything works fine in most cases, however lately I found a pubmed id which makes the library crash.

The code that I use looks like this:

public PubmedArticleType searchById(Integer id) throws RemoteException {
    EUtilsServiceStub.ESearchRequest req = new EUtilsServiceStub.ESearchRequest();
    req.setDb("pubmed");
    req.setTerm(id+"[uid]");
    req.setEmail("gmail@gmail.com");
    req.setUsehistory("y");
    EUtilsServiceStub.ESearchResult res = service.run_eSearch(req);
    String webEnv = res.getWebEnv();
    String query_key = res.getQueryKey();

    EFetchPubmedServiceStub.EFetchRequest req2 = new EFetchPubmedServiceStub.EFetchRequest();
    req2.setWebEnv(webEnv);
    req2.setQuery_key(query_key);

    EFetchPubmedServiceStub.EFetchResult res2 = service2.run_eFetch(req2);
    for (int j = 0; j < res2.getPubmedArticleSet().getPubmedArticleSetChoice().length; j++) {

        PubmedArticleType art = res2.getPubmedArticleSet().getPubmedArticleSetChoice()[j].getPubmedArticle();
        if (art != null) {
            return art;
        }
    }
    return null;
}

When I call this function with id = 22363258 I get the error that isn't informative at all:

org.apache.axis2.AxisFault
    at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
    at gov.nih.nlm.ncbi.www.soap.eutils.EFetchPubmedServiceStub.fromOM(EFetchPubmedServiceStub.java)
    at gov.nih.nlm.ncbi.www.soap.eutils.EFetchPubmedServiceStub.run_eFetch(EFetchPubmedServiceStub.java:189)
    at ch.epfl.bbp.uima.pubmed.PubmedSearch.searchById(PubmedSearch.java:130)
    at ch.epfl.bbp.uima.pubmed.PubmedSearchTest.testPubmedId(PubmedSearchTest.java:14)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:300)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.IllegalArgumentException
    at gov.nih.nlm.ncbi.www.soap.eutils.EFetchPubmedServiceStub$PubModel_type0$Factory.fromString(EFetchPubmedServiceStub.java:20118)
    at gov.nih.nlm.ncbi.www.soap.eutils.EFetchPubmedServiceStub$PubModel_type0$Factory.fromString(EFetchPubmedServiceStub.java:20129)
    at gov.nih.nlm.ncbi.www.soap.eutils.EFetchPubmedServiceStub$ArticleType$Factory.parse(EFetchPubmedServiceStub.java)
    at gov.nih.nlm.ncbi.www.soap.eutils.EFetchPubmedServiceStub$MedlineCitationType$Factory.parse(EFetchPubmedServiceStub.java:28780)
    at gov.nih.nlm.ncbi.www.soap.eutils.EFetchPubmedServiceStub$PubmedArticleType$Factory.parse(EFetchPubmedServiceStub.java:19147)
    at gov.nih.nlm.ncbi.www.soap.eutils.EFetchPubmedServiceStub$PubmedArticleSetChoiceE$Factory.parse(EFetchPubmedServiceStub.java)
    at gov.nih.nlm.ncbi.www.soap.eutils.EFetchPubmedServiceStub$PubmedArticleSet_type0$Factory.parse(EFetchPubmedServiceStub.java:56549)
    at gov.nih.nlm.ncbi.www.soap.eutils.EFetchPubmedServiceStub$EFetchResult$Factory.parse(EFetchPubmedServiceStub.java:50607)
    ... 27 more

So, I have two questions:

  • What is the reason? What I can do to fix it?
  • Is there any other java API that I could use to access pubmed abstracts? I know I can parse html pages, but I realy don't want to do it, because it introduces more problems than it solves...
Was it helpful?

Solution

Here is a RESTful API that allows to retrieve abstracts and all meta informations from pubmed db.

The exact link that would retrieve all the data that I needed looks like this: http://www.ebi.ac.uk/europepmc/webservices/rest/search/resulttype=core&query=ext_id:22363258

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top