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:
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