java - 将 WebEnv 和 QueryKey 示例用于 EFetch 时出现 ADBException

标签 java eclipse web-services exception apache-axis

我使用了来自 http://www.ncbi.nlm.nih.gov/books/NBK55696/ 的示例代码“使用 WebEnv 和 QueryKey 示例” - ESearch 部分似乎工作正常,但 EFetch 不行。我添加了命令“e.printStackTrace()”以获取完整的错误消息:

WebEnv: NCID_1_160921978_130.14.18.34_9001_1392822285_1227953195  
QueryKey: 1

org.apache.axis2.AxisFault: org.apache.axis2.databinding.ADBException: Unexpected subelement {http://www.ncbi.nlm.nih.gov/soap/eutils/efetch_pubmed}Affiliation  
org.apache.axis2.AxisFault: org.apache.axis2.databinding.ADBException: Unexpected subelement {http://www.ncbi.nlm.nih.gov/soap/eutils/efetch_pubmed}Affiliation  
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:190)  
at preparation.Client.main(Client.java:39)  
Caused by: java.lang.Exception: org.apache.axis2.databinding.ADBException: Unexpected subelement {http://www.ncbi.nlm.nih.gov/soap/eutils/efetch_pubmed}Affiliation  
at gov.nih.nlm.ncbi.www.soap.eutils.EFetchPubmedServiceStub$AuthorType$Factory.parse(EFetchPubmedServiceStub.java:47561)  
at gov.nih.nlm.ncbi.www.soap.eutils.EFetchPubmedServiceStub$AuthorListType$Factory.parse(EFetchPubmedServiceStub.java:12284)  
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:27035)  
at gov.nih.nlm.ncbi.www.soap.eutils.EFetchPubmedServiceStub$PubmedArticleType$Factory.parse(EFetchPubmedServiceStub.java:17841)  
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:54143)  
at gov.nih.nlm.ncbi.www.soap.eutils.EFetchPubmedServiceStub$EFetchResult$Factory.parse(EFetchPubmedServiceStub.java:48494)  
... 3 more  
Caused by: org.apache.axis2.databinding.ADBException: Unexpected subelement {http://www.ncbi.nlm.nih.gov/soap/eutils/efetch_pubmed}Affiliation  
at gov.nih.nlm.ncbi.www.soap.eutils.EFetchPubmedServiceStub$AuthorType$Factory.parse(EFetchPubmedServiceStub.java:47555)  
... 10 more  

我将 Eclipse(版本:3.7.2)与 Ubuntu 12.04 LTS 和 java-7-openjdk-amd64 作为 JRE 一起使用。 NCBI 页面提到在运行 Client.java 之前使用此命令:

wsdl2java -uri http://eutils.ncbi.nlm.nih.gov/soap/v2.0/efetch_pubmed.wsdl

取而代之的是,我简单地包含了在控制台中显示为输出的 jar 文件(仅二进制文件),因为这对 http://www.ncbi.nlm.nih.gov/books/NBK55696/ 上的所有其他示例都适用除了 ELink 示例:

org.apache.axis2.AxisFault: org.apache.axis2.databinding.ADBException: Unexpected subelement {http://www.ncbi.nlm.nih.gov/soap/eutils/elink}error 

我将描述我在我的项目中包含了哪些 jar 文件。

由于上述页面中用于下载eutils_axis2.jar的FTP链接失效,我搜索了当前路径并将其添加到我的Eclipse项目中。
他们的 README 说应该使用 JDK 版本 7.0.45 和 Axis2 版本 1.6.2,并且它是在 2013 年 12 月发布的。

我在 Google 中搜索“下载 wsdl2java.sh”以获取与 WSDL 相关的 Axis2 版本,并找到了包 axis2-eclipse-service-plugin-1.6.2.zip。我下载了包并将所有 jar 文件添加到我的项目中:

apache-mime4j-core-0.7.2.jar  
axiom-api-1.2.13.jar  
axiom-impl-1.2.13.jar  
axis2-adb-1.6.2.jar  
axis2-codegen-1.6.2.jar  
axis2-kernel-1.6.2.jar  
commons-codec-1.3.jar  
commons-fileupload-1.2.jar  
commons-httpclient-3.1.jar  
geronimo-jta_1.1_spec-1.1.jar  
geronimo-ws-metadata_2.0_spec-1.1.2.jar  
jaxen-1.1.1.jar  
jsr311-api-1.0.jar  
neethi-3.0.2.jar  
servlet-api-2.3.jar  
woden-api-1.0M9.jar  
woden-impl-commons-1.0M9.jar  
woden-impl-dom-1.0M9.jar  
wsdl4j-1.6.2.jar  
XmlSchema-1.4.7.jar  

然后我在包中搜索剩余的错误消息:

axis2-transport-http-1.6.2.jar  
axis2-transport-local-1.6.2.jar   
commons-logging-1.1.3.jar  
geronimo-javamail_1.4_spec-1.7.1.jar  
httpcore-4.3.2.jar  

我用谷歌搜索了类似的案例,但没有找到解决方案。如何修复开头提到的这条消息?

最佳答案

NCBI教程中提到的对应wsdl文件来自2010 .也许它已经过时了,但首先,请确保创建指定的 java 类工作正常。以下步骤是否会导致错误?

下载解压axis2-1.6.2 .

设置环境变量

export AXIS2_HOME=<path/to/axis2-1.6.2>
export JAVA_HOME=<path/to/java-7-openjdk-amd64>

下载以下文件

http://eutils.ncbi.nlm.nih.gov/soap/v2.0/efetch_pubmed.xsd
http://eutils.ncbi.nlm.nih.gov/soap/v2.0/efetch_db_pubmed.xsd
http://eutils.ncbi.nlm.nih.gov/soap/v2.0/efetch_pubmed.wsdl

并使用 efetch_pubmed.wsdl 文件在 axis2-1.6.2 目录中执行 bin/wsdl2java.sh。

sh wsdl2java.sh -uri <path/to/efetch_pubmed.wsdl>

两个java类应该出现在

src/gov/nih/nlm/ncbi/www/soap/eutils

(仍在您的 axis/bin 目录中)。将这些文件导入并与您的 Client.java 一起使用(指向教程中的文件名)。

对我来说效果很好。希望对您有所帮助。

关于java - 将 WebEnv 和 QueryKey 示例用于 EFetch 时出现 ADBException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21888354/

相关文章:

eclipse - 如何在 Eclipse 中为 "Open Declaration"(快捷键 F3)定义自定义操作

wcf - 从另一台机器使用 WCF 自托管服务

c# - 在运行时动态调用 Web 服务

java - 无法将 SpringBoot 项目导入 Eclipse IDE

c++ - 如何在我自己的staticLib中使用staticLib?

java - 如何获取系统中的方面列表

java - 如何根据特定输入范围读取文件并添加到数组

java - SPNEGO:在 GSS-API 级别未指定的故障(机制级别:校验和失败)

java - 如何在 Java 中基于稀疏列矩阵参数创建二维数组?

java - 使用 IVONA 文本转语音的 AWS Java NoSuchMethodError