针对 WebService 使用 Service 类获取 Port 类的一个参数问题的解释
来源:互联网 发布:朴素贝叶斯网络 编辑:程序博客网 时间:2024/06/10 13:50
最后在学习WebService时,看到对于官方的例子是这样写的.
privatestatic final QName PORT_NAME =newQName("http://server.hw.demo/","HelloWorldPort");Service service = Service.create(SERVICE_NAME);String endpointAddress = "http://localhost:9000/helloWorld";service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);HelloWorld hw = service.getPort(HelloWorld.class);
注意看上面的PORT_NAME的定义,是一个QName,其就有namespaceURI和一个name值,而在使用serivce获取port时直接传递了接口名参数。
这样的例子是可以运行的,这就导致了本人在编写参考例子时,直接Copy了相应的代码,但是修改了各项名称,在运行时,即始终运行不起来,相应的错误为
java.net.MalformedURLException: Invalid address. Endpoint address cannot be null.
以上的错误直接让人找不到方向,而实际问题是,service根据所传递的信息,在只传递了接口信息时,会默认构建一个QName的信息,再从service中寻找,如果寻找不到,自然就会产生上面的错误了。
在官方的例子中,它会默认构建HelloWorldPort这样qname去寻找,而在进行service.add时,恰好添加的就是HelloWorldPort这个qname,那么就恰好寻找到了。
而我们的例子,由于做了很多处理,导致默认添加到service的port的name并不是Service.class.getName+Port的组合,那么自然就找不到相应的port了。而正确的做法,其实也很简单,就是在获取port的时候,手动地指定要获取port类的qname,如下所示:
QName userServicePortQName = newQName("http://cxf.java.study.m_ylf.com/","abcPort");service.addPort(userServicePortQName, SOAPBinding.SOAP11HTTP_BINDING, "http://localhost:8080/userService");UserService userService = service.getPort(userServicePortQName, UserService.class);
即在往service时添加什么样的port,那么在获取时就使用什么样的qname。再一步理解,addPort这个方法就可以理解为以键值对的方式往service里追加port,那么在获取的时候自然就要提供相应的key值了。如果不提供,就会使用默认的生成策略创建一个key值,那这个key值与addPort使用的key值不一样的话,自然就会产生上面的错误了。
备注:本文转载自:http://www.iflym.com/index.php/tag/cxf
- 针对 WebService 使用 Service 类获取 Port 类的一个参数问题的解释
- 针对WebService使用Service类获取Port类的一个参数问题解释
- 针对WebService使用Service类获取Port类的一个参数问题(java.net.MalformedURLException)
- SpringBoot 中针对同一类型的参数,可以用一个类来集中访问
- Web Service (014---webservice使用Jquery、Ajax请求WebService所遇到的跨域问题)
- 针对事务的一个问题的解答
- 针对事务的一个问题的解答
- 一个针对SQLServer操作的封装类
- WebService 注解的使用及解释
- 针对珠海公交应用存在问题的解释
- 针对ArcGIS Server 跨域问题的解释
- 针对ArcGIS Server 跨域问题的解释
- webservice 的使用问题
- 针对Android Service不能隐式启动的问题
- 一个WebService的助手类
- webservice通俗易懂的解释
- Windows Service中调用WebService时(StreamReaderl类的文件读取问题)
- #define只加一个参数 的解释
- asp.net 在aspx页面 中包含(引入)HTML文件,include
- 如何获取iphone的硬件版本以及系统信息
- iPhone开发之隐藏系统状态栏
- 使用intellij idea 搭建springmvc例子【简单景点登录】
- iPhone开发之启动画面及动画
- 针对 WebService 使用 Service 类获取 Port 类的一个参数问题的解释
- C# 防止连接跳出webbrowser界面
- 软件模型
- android的CursorLoader用法小结
- Ogre 界面(Overlay)
- 十进制转换任意进制
- 【穿高跟鞋的危害】
- 吐槽 回文字符串
- Merge k Sorted Lists