调用WebService接口遇到的问题。

本文分享了一种解决调用WebService接口时遇到的XML字符问题的方法,并探讨了使用Eclipse自带工具生成客户端代码时出现的日志记录异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工作需要,调用一个项目的接口,原本采用的是wsimport 命令的方式。但是后来发现,如果服务在windows上,一切正常,可以调用到接口。但是如果服务在Linux上,调用接口会报  "在文档的元素内容中找到无效的 XML 字符 (Unicode: 0x0)".网上说是接口返回的xml的字符集有问题。折腾了半天都搞不定。


后面换一种eclipse自带的生成webService Client的方式,来调用接口,但是也有问题。

第2种:webService Client方式。

  第一步:新建Java项目。

第二步:select a wizard新建WebService Client 代码,这里需要正确的http://192.168.1.251:8180/TestProject/services/ws/DSMAuth?wsdl



第三步:测试生成的代码。


问题点:以上可以正常测试,但是当我部署到Tomcat上面的时候,报“ org.apache.commons.discovery.DiscoveryException: No implementation defined for org.apache.commons.logging.LogFactory“错误。说是没有实现log记录方式。但是我明明有放log的jar包进去。所有这种方式也放弃了。如果有人解决,请多多指教留言,谢谢哈。 因为这种方式不行,后面只能再想办法。突然有个灵感,用wsimport方法生成的代码,调用接口报xml字符有问题,那如果我返回String字符串是不是就没问题了呢。以下是用最终的方法。


第1种方法:

第一步:1、借助wsimport命令工具自动生成客户端代码


打开命令行窗口,切换到项目的src目录,执行"wsimport -keep http://192.168.1.251:8180/Testproject/services/ws/DSMAuth?wsdl"生成客户端代码,如下图所示:



这样就会生成代码到WebService_Wsimport/src目录下。


第二步:新建测试类,main方法里面书写如下。

//创建WSDL的URL,注意不是服务地址  
URL url=null;
try {
url = new URL(urlStr);
} catch (Exception e) {
System.out.println("接口的url访问出错!!");
}  
//创建服务名称  
QName qname = new QName("http://ws.lddsm.com", "DSMAuth");  
Service service = Service.create(url, qname);  
// //调用查询方法  
String result=null;
try {
// //获取服务实现类  
DSMAuth authService = service.getPort(DSMAuth.class); 
result = authService.getRegisterInfoNew(null);
       
} catch (Exception e) {
System.out.println("调用接口失败!");
}  
return result;


问题:上面这句authService.getRegisterInfoNew(null);原先返回的是一个类,后面改成返回String,就不会报XML字符问题了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值