解决org.apache.axis2.AxisFault: unknown 错误

在使用Axis2发布Webservice服务后,客户端访问时可能遇到'unknown'错误。解决方法是确保服务名称全部使用小写,避免大写字母导致的异常。该问题时好时坏,通过此解决方案可以有效解决。

在编写Webservice程序时使用Axis2发布好服务后,编写客户端程序访问时可能会出现以下错误:

org.apache.axis2.AxisFault: unknown
at org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:102)
at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:370)
at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:416)
at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:228)
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:163)
at com.cherish.test.SayHelloStub.hello(SayHelloStub.java:186)
at com.cherish.test.Client.main(Client.java:21)

 

 

解决方法:发布的服务名称使用小写,如 test.aar

以上问题或许可以解决,感觉是Axis2 的问题。

时好时坏的,有时候服务名称中包含大写字母发布出来又不会出现以上错误。


### Apache Axis2 ADBException Unexpected subelement C_KEI_2解决方案 在使用 Apache Axis2 调用 WebService 时,如果遇到 `org.apache.axis2.databinding.ADBException: Unexpected subelement C_KEI_2` 错误,通常是由以下几个原因导致的: #### 1. **参数名称不匹配** 如果服务端和客户端定义的参数名称不一致,可能会导致此错误。例如,服务端 WSDL 中定义的参数名为 `C_KEI_2`,而客户端代码生成或调用时使用的参数名与之不符。需要确保客户端和服务端的参数名称完全一致[^3]。 #### 2. **命名空间(Namespace)问题** 如果服务端返回的数据中包含的命名空间与客户端生成代码时所期望的命名空间不一致,也会引发该错误Axis2 在解析 SOAP 消息时会对命名空间进行严格检查。可以通过以下方法解决: - 确保服务端返回的 SOAP 响应中的命名空间与 WSDL 文件中定义的一致。 - 修改 WSDL 文件中的命名空间为实际的服务对象包名。例如,如果命名空间是 `http://egov.toone.com`,则需要确保服务对象的包名与此一致[^4]。 #### 3. **操作绑定问题** 在某些情况下,客户端代码可能没有正确设置操作绑定,导致解析错误。可以通过显式设置操作来避免此类问题。例如: ```java call.setOperation(_operations[1]); ``` 这里的 `_operations[1]` 表示具体的操作索引,需要根据实际的 WSDL 定义选择正确的操作[^2]。 #### 4. **数据绑定问题** Axis2 使用 ADB(Axis Data Binding)进行数据绑定。如果服务端返回的数据结构与客户端生成的类结构不一致,也可能导致该错误解决方法包括: - 检查 WSDL 文件是否正确描述了所有数据结构。 - 重新生成客户端代码,确保其与最新的 WSDL 文件保持同步。 #### 示例代码 以下是一个简单的示例,展示如何通过设置操作绑定来解决类似问题: ```java import org.apache.axis2.client.ServiceClient; import org.apache.axis2.client.Options; import org.apache.axis2.addressing.EndpointReference; public class Axis2ClientExample { public static void main(String[] args) throws Exception { ServiceClient serviceClient = new ServiceClient(); Options options = new Options(); // 设置目标地址 options.setTo(new EndpointReference("http://example.com/sms/services/Sms")); // 设置操作 options.setAction("urn:yourOperationName"); serviceClient.setOptions(options); // 显式设置操作绑定 serviceClient.getAxisService().getOperations()[1].setSoapAction("urn:yourOperationName"); // 调用服务 Object response = serviceClient.sendReceive(new Object[]{}); System.out.println("Response: " + response); } } ``` #### 注意事项 - 确保服务端和客户端的 WSDL 文件版本一致。 - 如果问题仍然存在,可以尝试启用 Axis2 的调试日志,查看详细的 SOAP 请求和响应内容,从而进一步定位问题。 ---
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值