记录webservice调用异常--javax.wsdl.WSDLException: WSDLException (at /soap:Envelope)

今天将公司的新业务系统部署的正式服务器,使用docker进行部署,由于有3个系统,系统之间使用webservice进行交互,部署完成后,调试发现webservice不通,通过日志发现如下错误:

Caused by: org.apache.cxf.service.factory.ServiceConstructionException: Failed to create service.
	at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:87)
	at org.apache.cxf.jaxws.ServiceImpl.initializePorts(ServiceImpl.java:218)
	at org.apache.cxf.jaxws.ServiceImpl.initialize(ServiceImpl.java:161)
	... 106 common frames omitted
Caused by: javax.wsdl.WSDLException: WSDLException (at /soap:Envelope): faultCode=INVALID_WSDL: Expected element '{http://schemas.xmlsoap.org/wsdl/}definitions'.
	at com.ibm.wsdl.xml.WSDLReaderImpl.checkElementName(WSDLReaderImpl.java:2167)
	at com.ibm.wsdl.xml.WSDLReaderImpl.parseDefinitions(WSDLReaderImpl.java:248)
	at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(WSDLReaderImpl.java:2352)
	at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(WSDLReaderImpl.java:2338)
	at org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:255)
	at org.apache.cxf.wsdl11.WSDLManagerImpl.getDefinition(WSDLManagerImpl.java:165)
	at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:85)
	... 108 common frames omitted

通过报错信息,可以发现主要是wsdl返回的xml的节点信息有问题,期望节点是<wsdl:definitions>,但是对于的xml节点是<soap:Envelope>,由此首先想到的是wsdl返回的xml有问题,最后通过流程请求wsdl,发现确实是返回wsdl有问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,以下是使用 Axis 框架调用 WebService 的简单步骤: 1. 下载并安装 Axis 框架。 2. 创建一个 Java 项目,并将 Axis 库添加到项目中。 3. 通过 WSDL2Java 工具生成客户端代码。WSDL2Java 工具可以将 WSDL 文件转换为可用于 Java 客户端的代码。您可以通过以下命令行使用 WSDL2Java 工具: ``` wsdl2java -uri http://10.9.47.29:8011/ESB/ProxyService/UUM/AccountAndDepartmentService?wsdl -d /output/folder/path -p com.example.client ``` 其中,-uri 参数指定 WSDL 的 URL,-d 参数指定生成的 Java 代码的输出目录,-p 参数指定生成的 Java 代码的包名。 4. 在 Java 代码中调用 WebService。您可以通过以下代码调用 WebService: ``` import org.apache.axis.client.Service; import org.apache.axis.client.Call; import javax.xml.namespace.QName; import java.net.URL; public class Client { public static void main(String[] args) throws Exception { String endpoint = "http://10.9.47.29:8011/ESB/ProxyService/UUM/AccountAndDepartmentService"; String namespace = "http://accountanddepartmentservice.uum.ws.esb.aisino.com"; String method = "getDepartmentByName"; String param = "安溪县"; Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(new URL(endpoint)); call.setOperationName(new QName(namespace, method)); String result = (String) call.invoke(new Object[] { param }); System.out.println(result); } } ``` 其中,`endpoint` 参数指定 WebService 的地址,`namespace` 参数指定 WebService 的命名空间,`method` 参数指定要调用的方法,`param` 参数指定方法的参数。`Call.invoke()` 方法用于调用 WebService 方法,并返回结果。 5. 解析返回结果。在本例中,`result` 即为 WebService 返回的结果,即安溪县的相关信息。 需要注意的是,具体的操作方式可能因为工具和语言的不同而有所不同。您可以参考相关的文档和教程,或者向具体的技术支持人员咨询。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值