spring mvc-dubbo webservice 调用

问题描述

dubbo webservice 调用

项目原来用的是cxf 的webservice接口,需要集成dubbo系统。根据配置浏览器可以访问,但是原程序中,spring mvc的注入对象为null,详细问题如下:
web.xml 主要代码

 <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                classpath*:/applicationContext.xml
            </param-value>
        </context-param>
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>

        <filter>
            <filter-name>encodingFilter</filter-name>
            <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
            <init-param>
                <param-name>encoding</param-name>
                <param-value>UTF-8</param-value>
            </init-param>
            <init-param>
                <param-name>forceEncoding</param-name>
                <param-value>true</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>encodingFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping> 

        <!--dubbo 服务根路径-->
        <servlet>
            <servlet-name>dubbo</servlet-name>
            <servlet-class>
                com.alibaba.dubbo.remoting.http.servlet.DispatcherServlet
            </servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>dubbo</servlet-name>
            <url-pattern>/webservice/*</url-pattern>
        </servlet-mapping>
        <servlet>
            <servlet-name>SearchEngine</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <init-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath*:/spring-mvc.xml</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>SearchEngine</servlet-name>
            <url-pattern>/</url-pattern>
        </servlet-mapping>
        <session-config>
            <session-timeout>30</session-timeout>
        </session-config>
        <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener </listener-class>
        </listener>

provider.xml

<dubbo:application name="dubbo-webservice-provider" />
        <!-- registry address, used for service to register itself -->
        <dubbo:registry address="zookeeper://127.0.0.1:2181" />
        <!-- 用webservice协议在8181端口暴露服务 -->
        <dubbo:protocol name="webservice" port="8181" server="servlet" />
        <dubbo:service interface="com.chinasofti.searchengine.webservice.server.searchService.SearchService" ref="demoWSService" />
        <bean id="demoWSService" class="com.chinasofti.searchengine.webservice.server.searchService.impl.SearchServiceImpl" />

consumer.xml

 <dubbo:application name="consumer" />
    <!-- registry address, used for consumer to discover services -->
    <dubbo:registry address="zookeeper://127.0.0.1:2181" />
    <dubbo:consumer timeout="5000"/>
    <!-- which service to consume? -->
    <dubbo:reference id="demoWSService" interface="com.chinasofti.searchengine.webservice.server.searchService.SearchService" url="webservice://192.168.1.25:8181/SearchEngine/webservice/com.chinasofti.searchengine.webservice.server.searchService.SearchService"/>

通过上边的配置,可以在浏览器中访问“http://localhost:8181/SearchEngine/webservice/com.chinasofti.searchengine.webservice.server.searchService.SearchService?wsdl”,可以访问。

在客户端访问服务主要代码:

URL url = null;
        try {
             url = new URL("http://localhost:8181/SearchEngine/webservice/com.chinasofti.searchengine.webservice.server.searchService.SearchService?wsdl");
        } catch (MalformedURLException e) {
        }
        Service service = new SearchService(url);
        SearchServicePortType port = ((SearchService) service).getSearchServicePort();
        {
        com.chinasofti.searchengine.webservice.client.ws.SearchModel _searchAll_arg0 = null;
        com.chinasofti.searchengine.webservice.client.ws.MultConditionsVO _searchAll_arg1 = null;
        java.lang.String _searchAll__return = port.searchAll(searchModel,vo);
         }

通过调试,可以调用到服务端代码,但是服务端的spring mvc @Resource标签注入的对象为null。

   @Resource(name = "conClassDaoImpl")
        private ConClassDao conClassDao;

调试时,上边的conClassDao为null。

项目中调用其他功能spring 标签是可以注入的,也没有问题。
我是在原有的工程中集成dubbo配置的,哪个地方可能导致调用接口是spring 标签注入失败啊?跪求各位大神,谢谢啦!

解决方案

好吧,我自己发现问题了。provider.xml文件需要添加在applicationContext.xml文件中

<import resource="dubbo-demo-provider.xml" />

这样才能与spring集成。

解决方案二:

这种方式能够实现负载均衡么?比如我有10个节点,按照这种方式我只能配置其中一个,一旦这个节点发生故障,是不是就无法调通呢?

解决方案三:

这种方式能够实现负载均衡么?比如我有10个节点,按照这种方式我只能配置其中一个,一旦这个节点发生故障,是不是就无法调通呢?

时间: 2024-09-19 08:54:33

spring mvc-dubbo webservice 调用的相关文章

spring mvc 实现远程服务调用的几种方式

org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter 实现远程服务调用 (1)httpinvoker方式 服务器客户端都是spring时推荐这种方式 服务端 必须要实现 bean实体类  service接口类  serviceImpl服务实现类 客户端只需拷贝 bean 实体类  service接口类(注意 ,客户端 bean,service类要和服务端bean,service类包路径相同,比如都是 com.hlz

Spring MVC 原理 - DispatcherServlet调用完整过程(上)

本篇主要讲解了Spring mvc的调用过程,通过这个过程来了解Spring的原理. 进入web.xml中配置的Spring拦截(调度)器:   调用堆栈信息: 开始拦截,这一步主要是根据request获取handler(该handler可以配置): (接上面方法)这段代码中的if(isGet-主要解决浏览器的缓存问题,如果没有过修改,则返回(浏览器可能会用缓存响应). 调用方法handler: 进入handler方法: 进入方法invokeHandlerMethod: 440行进入下一个方法i

Spring mvc实现WEBSERVICE 和 CXF实现WEBSERVICE 各有什么特点

问题描述 其实我一直没弄明白, 实现webservice本质上就是一个请求,响应一串XML或者JSON或者其他什么格式类型,只有client和server定义好格式规则(协议),那么就可以通信,完成各种服务调用.springmvc 实现webservice比较直接易懂, 而且我觉得用起来也很好用.然后最近学习到CXF,我就一直没弄明白,为什么要用这个框架实现webservice? 它有什么优点? 解决方案 主要是webservice的协议:http+xml=soap既然是http协议,你只要按照

Spring MVC 原理 - DispatcherServlet调用完整过程(下)

上一篇到440行返回结果result. 返回result之后,使用result去获取ModelAndView,执行方法getModelAndView: 该方法主要通过result返回值来判断: 当前方法是带ResponseBody注解的,所以执行到这里: 进去方法: 这里是根据http类型做出相应的输出: 用户配置的: 接收的类型: 写的方法: 这里配置的json格式,所以会进入JSON方法: 写入ResponseBody后,返回mav: 最后返回之前调用handler的地方,之后会有一些不同种

Spring MVC中jsessionid所引起的问题 和解决

 转自:http://blog.csdn.net/seakingwy/article/details/1933687 jsessionid所引起的问题 在Spring MVC当使用RedirectView或者"redirect:"前缀来做重定向时,Spring MVC最后会调用:response.sendRedirect(response.encodeRedirectURL(url)); 对于IE来说,打开一个新的浏览器窗口,第一次访问服务器时,encodeRedirectURL(

spring mvc 如何在Controller类的每个方法执行前 调用我定义的一个方法

问题描述 在用spring mvc做一个项目 我想在@Controller类的每个方法@RequestMapping前都调用我定义的一个方法 该怎么弄? 我现在是这么弄的 手动在方法的第一行调用我定义的那方法 这样 太麻烦 有没有更好的方法呢 一下是我的代码@Controllerpublic class ModuleAction extends BaseAction {@Autowiredprivate ModuleMgr manager;@RequestMapping("/systemMgr/

spring mvc @Autowired 注入失败

问题描述 spring mvc @Autowired 注入失败 2C 配置如下: application-context.xml <?xml version=""1.0"" encoding=""UTF-8""?> xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:aop=""htt

深入整体分析Spring MVC framework

在当今的MVC framework里,似乎Webwork2逐渐成为主流, Webwork2+SpringFramework的组合变得越来越流行.这似乎意味着Spring自带的MVC framework远比Webwork2差,所以大家纷纷用Webwork2来代替.确实,Spring的MVC framework不算是整个Spring的核心部件,但它的威力却超过了很多人的想象.很多人包括xiecc认为Spring的MVC framework是非常优秀的,甚至比Webwork2更优秀. 下面列举一下Sp

Spring MVC 开发快速入门

快速入门 这篇文章将教你快速地上手使用 Spring 框架,如果你手上有一本<Spring in Action>, 那么你最好从第三部分"Spring 在 Web 层的应用--建立 Web 层"开始看, 否则那将是一场恶梦! 首先, 我需要在你心里建立起 Spring MVC 的基本概念. 基于 Spring 的 Web 应用程序接收到 http://localhost:8080/hello.do(事实上请求路径是 /hello.do) 的请求后, Spring 将这个请求