Exception in thread "main" javax.xml.ws.WebServiceException: Could not find wsdl

本文介绍了一种解决CXF Webservice客户端访问方法时出现的异常问题的方法。异常原因是客户端的方法未与服务端正确绑定。通过在客户端Service接口上添加@WebService注解,可以有效解决此问题。

CXF webservice 客户端访问方法时,出现异常

异常信息如下:

Exception in thread "main" javax.xml.ws.WebServiceException: Could not find wsdl:binding operation info for web method getListPnameByuid.
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:113)
at $Proxy14.getListPnameByuid(Unknown Source)
at cn.navidog.front.users.testwebservice.main(testwebservice.java:21)
 

原因是因为客户端的service中的方法没有跟服务端绑定,只需要将客户端的Service接口加上注解@WebService,异常便解决了。

 

import javax.jws.WebService;
import core.service.WSResult;
@WebService 
public interface INotification {
	public WSResult SendNotification();
}
Java 中,`javax.xml.ws.WebServiceException` 是一个与 JAX-WS 相关的运行时异常,通常表示在 Web 服务调用过程中发生了错误。如果该异常导致了空指针异常(`NullPointerException`),则表明问题可能与服务调用过程中某些对象未被正确初始化或处理有关。 以下是可能导致 `WebServiceException` 并引发空指针异常的常见原因及解决方法: ### 1. **服务端点未正确初始化** 当调用 Web 服务时,如果服务端点未正确初始化或配置,则可能导致 `WebServiceException`。例如,使用 `Service.create()` 方法创建服务实例时,若传入的 WSDL URL 或服务名称为空或无效,将导致异常。确保所有参数均正确设置,并检查服务端点地址是否有效。 ```java URL wsdlURL = new URL("http://example.com/MyService?wsdl"); MyService service = new MyService(wsdlURL, new QName("http://example.com/", "MyService")); MyPort port = service.getMyPort(); ``` ### 2. **请求参数未正确设置** 如果请求参数为空或未正确设置,可能导致空指针异常。例如,在调用 Web 服务方法时,若传入的参数为 `null`,而服务端未对此进行处理,则可能引发异常。确保所有参数在调用前已正确初始化,并在调用前进行空值检查。 ```java if (input != null) { response = port.callWebService(input); } else { throw new IllegalArgumentException("Input parameter cannot be null"); } ``` ### 3. **处理大文件或复杂数据类型时的序列化问题** 在处理包含大文件(如压缩包)的请求时,若数据未正确序列化或传输,可能导致 `WebServiceException`。例如,当请求体中包含分卷压缩包时,可能会因数据格式不兼容而导致异常。建议使用 `MTOM`(Message Transmission Optimization Mechanism)来优化二进制数据的传输,并确保服务端支持该机制。 ```java // 启用 MTOM BindingProvider bindingProvider = (BindingProvider) port; bindingProvider.getRequestContext().put(BindingProviderProperties.ENABLE_MTOM, true); ``` ### 4. **网络或服务器问题** 网络连接中断或服务器端未正确响应可能导致 `WebServiceException`。例如,若服务器端在处理请求时发生错误,可能会返回异常。建议在网络请求失败时进行重试,并捕获异常以进行适当的处理。 ```java try { response = port.callWebService(input); } catch (WebServiceException e) { // 处理异常并记录日志 System.err.println("WebService call failed: " + e.getMessage()); // 可以选择重试或抛出自定义异常 } ``` ### 5. **日志记录与调试** 在调试过程中,启用详细的日志记录可以帮助识别问题的根本原因。可以使用 `java.util.logging` 或其他日志框架(如 Log4j)来记录详细的请求和响应信息。 ```java import java.util.logging.Logger; Logger logger = Logger.getLogger(MyClass.class.getName()); logger.info("Calling web service with input: " + input); ``` ### 6. **检查依赖库版本** 确保所有相关的 JAX-WS 和 Apache CXF 依赖库版本兼容,并且没有冲突。版本不兼容可能导致 `WebServiceException`。可以通过检查项目的构建文件(如 `pom.xml` 或 `build.gradle`)来确认依赖库版本。 ```xml <!-- Maven 示例 --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>3.4.4</version> </dependency> ``` ### 7. **异常处理策略** 在调用 Web 服务时,应采用适当的异常处理策略。可以使用 `try-catch` 块来捕获 `WebServiceException` 并进行相应的处理,例如记录错误信息、通知用户或尝试恢复。 ```java try { response = port.callWebService(input); } catch (WebServiceException e) { // 处理异常 System.err.println("WebServiceException occurred: " + e.getMessage()); } ``` ### 8. **测试与验证** 在开发和测试阶段,应使用工具(如 SoapUI 或 Postman)来验证 Web 服务的调用是否正常工作。这有助于快速识别和解决问题。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值