Webservice-cxf:Could not find portType named {http://impl.client.tianyuan.com/}SchedulerService
来源:互联网 发布:贵州 大数据大诚信 编辑:程序博客网 时间:2024/06/05 07:39
最近在做一个和webService有关的项目。
在使用客户端调取服务端的接口方法时,报如下错误:
十月 25, 2017 10:39:58 上午 org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean buildServiceFromWSDL
信息: Creating Service {http://impl.service.tianyuan.com/}SchedulerServiceC from WSDL: http://192.168.254.231:8080/SchedulerService?wsdl
Exception in thread "main" javax.xml.ws.WebServiceException: org.apache.cxf.service.factory.ServiceConstructionException: Could not find portType named {http://service.tianyuan.com/}SchedulerService
at org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:361)
at org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:350)
at javax.xml.ws.Service.getPort(Service.java:119)
at com.tianyuan.client.impl.SchedulerServiceC.getSchedulerServicePort(SchedulerServiceC.java:78)
at com.tianyuan.client.impl.SchedulerService_SchedulerServicePort_Client.main(SchedulerService_SchedulerServicePort_Client.java:47)
Caused by: org.apache.cxf.service.factory.ServiceConstructionException: Could not find portType named {http://service.tianyuan.com/}SchedulerService
at org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean.getInterfaceInfo(ReflectionServiceFactoryBean.java:631)
at org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean.initializeWSDLOperations(ReflectionServiceFactoryBean.java:639)
at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.initializeWSDLOperations(JaxWsServiceFactoryBean.java:303)
at org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean.buildServiceFromWSDL(ReflectionServiceFactoryBean.java:415)
at org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:525)
at org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:261)
at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFactoryBean.java:215)
at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:102)
at org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:91)
at org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactoryBean.java:157)
at org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxWsProxyFactoryBean.java:142)
at org.apache.cxf.jaxws.ServiceImpl.createPort(ServiceImpl.java:493)
at org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:359)
... 4 more
初看错误的大致意思是:在 {http://service.tianyuan.com/}命名空间中找不到SchedulerService。其中{http://service.tianyuan.com/}表示的是服务端的命名空间。所以错误翻译过来是,在服务端的service.tianyuan.com命名空间中,找不到SchedulerService。
大致原因是:
客户端代码中,有两处需要注意:
1、生成的客户端接口的实现类中有QName的service对象和**(接口名)ServicePort对象,其中的namespaceURI(http://*****)应该与f发出后的服务端的definitions标签的targetNameSpace一致。;
2、客户端接口中,标注在类名上的@WebService接口中有targetNameSpace属性和name属性,targetNameSpace表示的是命名空间,应该与服务端接口上的targetNameSpace属性的值一致,其中name属性的值也应该一致。
参考请往下翻,见 图++ 和 图-- 。
想具体了解,请继续往下看:
各个类的作用如下:
bean包中:
soapui生成的各种实体类;
impl包中:
1、第一个类可以无视,是soapui生成的启动服务端的类(当然该类中含有main方法),可以通过该类发布服务端,我自己写了一个类通过Endpoint来发布了服务端;
2、SchedulerServicePortImpl.java是一个实现类,实现的是根目录中最后一个SchedulerService.java接口,代码如下:
SchedulerServicePortImpl类:
在实现类中,与其接口一样,类名上上存在@WebService的标签,意思是将当前类暴露为WebService,其中实现类中的endpointInterface属性是必不可少的,而且,必须正确的指向该实现类的接口,并且包含该接口(也就是服务端的接口),
main包中:
Service.java是自己写的通过endpoint的方式来发布服务端的类(含有main方法),代码如下:
Service类:
最后我再介绍最后一个类——SchedulerService.java:
准确的来说是一个接口,他是wsdl文档中规定的接口,该接口中含有暴露给客户端的方法(直白的说就是客户端可以调用这些方法)。通过soapui软件;生成java代码后,会自动实现该接口中的方法,也就是说在impl包中的第二个类中,就是对该接口的各个方法的实现,如下图:
SchedulerService接口:
其中targetNameSpace代表命名空间,如果有客户端想访问该服务端,那么客户端接口上的命名空间应该与此一致。见下图++和图--。
客户端代码目录:
各个类的作用如下:
bean包中:
依旧是生成的实体类;
impl包中:
1、第一个类是soapui生成的启动客户端的main入口;
2、第二个类是客户端根据wsdl生成的客户端接口;
3、第三个类是客户端接口的实现类;
根目录下:
这三个包不清楚有什么用。。。。。
分析:
使用客户端调用服务端接口的方法时,肯定需要先调用服务端所提供接口中的方法,所以,客户端中的接口就应该与服务端中的接口关联起来,通过客户端的接口,调用服务端接口中的方法,所以,解决问题的地方就在客户端的接口和服务端的接口中。
而两个接口相连的重要属性,就是@WebService标签中的targetNameSpace属性(命名空间)
客户端接口代码:
@WebService中,targetNameSpace表示命名空间,必须与服务端接口的命名空间一致,name的值也应该互相一致。
图++
客户端接口实现类代码:
new QName中,namesapceURI是与definitions标签中的targetNamespace的值一致的。
namesapceURI:在这里就是http://impl.service.tianyuan.com/
definitions标签:发布服务端后,在浏览器上查看服务端的根标签。
图--
提示:
在生成的项目中,你会看到许多的targetNameSpace和http:// * * */的字眼,除了接口和实现类中,还有实体类中。这些和包结构是没有关系的。
需要注意的就是,客户端的命名空间 与对应的命名空间 。二者的值相等就可以了。
如果有不懂,或是不理解的同学,可以私信我,或者是下方留言,我看到后会及时回复的。
虽然,,,我也是一个小白。
- Webservice-cxf:Could not find portType named {http://impl.client.tianyuan.com/}SchedulerService
- Could not initialize class com.taobao.diamond.client.impl.DiamondEnvRepo
- Could not find method com.loopj.android.http.AsyncHttpResponseHandler
- cxf调用WebService时出现No operation was found with the name {http://impl.server.test.com/}helloWorld
- cxf客户端调用webservice,出现问题 Found element arg0 but could not find matching RPC/Literal part
- mulator: could not find virtual device named ‘AVD Name’
- mulator: could not find virtual device named ‘AVD Name’
- could not find virtual device named 'XXX' 的解决方法
- Could not find a storyboard named 'MainStoryBoard' in bundle NSBundle
- Could not find a storyboard named 'Main' in bundle
- Could not find a storyboard named 'Main' in bundle NSBundle
- Could not find a storyboard named 'Main' in bundle NSBundle
- Could not find a storyboard named 'Main' in bundle NSBundle
- 'Could not find a storyboard named 'Main' in bundle NSBundle ***
- Could not find a storyboard named 'Main' in bundle NSBundle
- Could not find any information for the class named ....
- Could not find a storyboard named 'Main' in bundle NSBundle
- Could not find a storyboard named 'Main' in bundle NSBundle
- 1024 祝所有程序员节日快乐
- Cocoa编程指南
- Logistic回归与Softmax回归
- 转载: 用 C# 做人脸检测(基于EmguCV)
- D12函数
- Webservice-cxf:Could not find portType named {http://impl.client.tianyuan.com/}SchedulerService
- python3 常见函数 map、reduce、filter、lambda、sorted
- 上传sftp,创建20171024目录,判断目录是否存在,复制文件,判断文件字符集
- D13递归
- SpringMVC上传图片总结(1)-Web Uploader--常规方法进行图片上传,使用了MultipartFile、MultipartHttpServletRequest
- fedora26下安装和配置openldap(1)
- Tera term串口下发AT命令测试
- MATLAB编译libsvm出现问题
- 数据结构第五版第二章实验1.实现顺序表的各种基本运算