程序员新人类 2014-11-17 11:00 采纳率: 0%
浏览 18541

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 标签注入失败啊?跪求各位大神,谢谢啦!

  • 写回答

2条回答

  • 程序员新人类 2014-11-17 11:16
    关注

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

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

    这样才能与spring集成。

    评论

报告相同问题?

悬赏问题

  • ¥15 flink cdc无法实时同步mysql数据
  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名