针对 WebService 使用 Service 类获取 Port 类的一个参数问题的解释
2013-05-18 14:19
323 查看
最后在学习WebService时,看到对于官方的例子是这样写的.
注意看上面的PORT_NAME的定义,是一个QName,其就有namespaceURI和一个name值,而在使用serivce获取port时直接传递了接口名参数。
这样的例子是可以运行的,这就导致了本人在编写参考例子时,直接Copy了相应的代码,但是修改了各项名称,在运行时,即始终运行不起来,相应的错误为
以上的错误直接让人找不到方向,而实际问题是,service根据所传递的信息,在只传递了接口信息时,会默认构建一个QName的信息,再从service中寻找,如果寻找不到,自然就会产生上面的错误了。
在官方的例子中,它会默认构建HelloWorldPort这样qname去寻找,而在进行service.add时,恰好添加的就是HelloWorldPort这个qname,那么就恰好寻找到了。
而我们的例子,由于做了很多处理,导致默认添加到service的port的name并不是Service.class.getName+Port的组合,那么自然就找不到相应的port了。而正确的做法,其实也很简单,就是在获取port的时候,手动地指定要获取port类的qname,如下所示:
即在往service时添加什么样的port,那么在获取时就使用什么样的qname。再一步理解,addPort这个方法就可以理解为以键值对的方式往service里追加port,那么在获取的时候自然就要提供相应的key值了。如果不提供,就会使用默认的生成策略创建一个key值,那这个key值与addPort使用的key值不一样的话,自然就会产生上面的错误了。
备注:本文转载自:http://www.iflym.com/index.php/tag/cxf
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类的一个参数问题(java.net.MalformedURLException)
- 使用Struts2-tags的include,所带参数无法通过ongl直接获取的问题
- C#执行oraclec存储过程获取返回值的一个问题(使用到临时表)
- SpringBank 开发日志 重新设计Action调用Service的参数传递 使用泛型解决类型转换问题
- android中获取前一个Activity传递过来的参数获取不到的问题
- 来谈一下我在使用fo-dicom开源库时遇到的一些问题,这篇主要就是针对从RIS那获取worklist的,希望能帮助那些刚接触这个开源库的。
- js获取src请求 得到一个参数和多个参数写法(这是集中网上的多个方法,自己cv过去就可以使用)
- 使用ServletContextListener时获取上下文的初始化参数注意问题
- 关于过滤器使用了参数后,接口获取不到参数问题
- 获取Android源码时如何解决【fatal: Unable to look up android.git.kernel.org (port 9418) (Name or service not known)】的问题
- SpringMVC中使用Ajax POST请求以json格式传递参数服务端通过request.getParameter("name")无法获取参数值问题分析
- 动态使用webservice,以及含有ref类型的参数的问题
- 在使用mybaitis传参数的时候,仅传入一个类型为String的参数所遇到的问题
- 2017-10-11-jquery-使用ajax传递参数遇到的一个问题
- 关于在java环境下调用 .net的 webservice无法获取参数的问题
- WebService,ASMX文件使用XML格式数据传递参数、验证与获取XML格式返回值的一种方式
- 关于如何使用反射声明一个泛型类型变量(泛型参数是动态的)的问题
- 有关使用 GPS Intermediate Driver 无法获取到GPS数据的一个问题
- VS2005的一个小问题,我编写了一个min函数,使用模板,传递的参数没有智能提示