您的位置:首页 > 其它

调用WebService接口遇到的问题。

2017-11-28 17:30 330 查看
工作需要,调用一个项目的接口,原本采用的是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 href="http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl" target=_blank>"生成客户端代码,如下图所示:



这样就会生成代码到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字符问题了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: