您的位置:首页 > 其它

cxf-webservice客户端与服务端的注意事项及常见异常

2017-10-25 17:18 597 查看

1.创建webservice

如何生成服务端:

1、使用soapui,通过wsdl文件生成服务端。

如何生成客户端:

1、使用soapui,通过wsdl文件生成客户端;

2、先发布服务端,通过apache-cxf的wsdl2java命令,生成客户端;

(如果条件允许,建议使用第二种)。

具体如何创建,请查看我的其他博客。

2.常见错误

1、警告: Interceptor for {http://impl.webservice.iTask.inspur.com/}SchedulerServiceC has thrown exception, unwinding now

org.apache.cxf.interceptor.Fault: No binding operation info while invoking unknown method with params unknown.


场景:报这个错时,说明你的服务端其实已经发布成功了。

目前我能想到的,出现这种错误的唯一情况只有手动在浏览器输入服务端地址的时候。

原因:输入的地址时候缺少?wsdl

解决:完整地址如:http://127.0.0.1:8080/task?wsdl

2、Exception in thread "main" javax.xml.ws.WebServiceException: javax.xml.ws.WebServiceException:Could not load Webservice SEI

场景:出现这种错误说明服务端发布失败。

原因:大意就是不能加载服务,简单的来说就是实现类找不到借口

解决:服务端一般会提供一个接口,例如叫SchedulerService,该接口一定会有一个实现类,例如叫SchedulerServicePortImpl。在该实现类中,会有一个@WebService的注解,其中的endpointInterface属性,必须指向其接口SchedulerService,例如endpointInterface = "com.lvxiaobu.webservice.service.SchedulerService",注意了,一定是指向了类,而不是仅仅指向了该接口所在的包,即应该加上该接口名称

3、Exception in thread "main" javax.xml.ws.WebServiceException: org.apache.cxf.service.factory.ServiceConstructionException:Could not find portType named
{http://tianyuan.com/}SchedulerService


场景:这种错误一般出现在使用客户端访问服务端的时候,且此时,服务端已成功发布。

原因:客户端的接口与服务端的接口没有关联起来,所以找不到。

解决:

1、在客户端中会有一个接口,例如SchedulerService,在该类上会有一个@WebService注解,其中的targetNameSpace属性和name属性,都必须和服务端对应接口类中的值一样;

2、在客户端提供的接口实现类中,会有QName对象的两个实例,其中的namesapceURI(http:// ************/)是有规定的。

3.2.1、如果服务端也是你启动的,那么这个namesapceURI与服务端接口实现类上的namespace的内容一致。

3.2.2、如果服务端不在你这,那么可以通过网页访问服务端,然后找到根节点wsdl:definitions下末尾的targetNameSpace,两者内容应该一致。



4、还有一种异常,是因为在调用服务端方法是,传入的参数是null,这种我就不说了。

最后,总而言之,webService的服务端与客户端的联系,一般要注意这几点:

1、通过输入地址访问服务端的时候,需要在地址末尾添加?wsdl;

2、服务端中,实现类的endpointInterface属性是否指向了其接口类;

3、服务端和客户端对应接口中,@WebService注解的targetNameSpace和name属性值应该一致,保证服务端和客户端两端的接口产生联系。

4、注意客户端实现类中,QName的namesapceURI 与 浏览器打开的服务端中的definitions根标签中的targetNameSpace一致。

疑问:

以上的3和4,好像只要满足一条,就不会异常4,比如,如果QName的namesapceURI与对应的targetNameSpace一致,那么客户端和服务端的targetNameSpace就不用一致了。还不知道为什么,如果有大神的话,希望可以留言告诉我。

如果有书写错误的地方,或者是有问题的地方请及时评论或者是私信,以免误导个别萌新。

虽然,我也是个萌新。

你好,我叫吕小布。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐