当前位置:天才代写 > tutorial > JAVA 教程 > 如何办理xfire宣布的Webservice中Spring注入为空的问题

如何办理xfire宣布的Webservice中Spring注入为空的问题

2017-11-02 08:00 星期四 所属: JAVA 教程 浏览:545

副标题#e#

Spring框架利用中注入为空是一个较量头疼的问题,碰着Webservice和Spring框架共同时,这个问题更容易呈现并很难发明问题的原因。

在做SSO系统中就碰着这样的问题,在Service的实现类中注入Ibatis数据库操纵的Mapper一直为空,最终发明原因是xfire和Spring共同利用时和普通利用xfire的设置方法差异

xfire可以快速宣布Webservice,凡是环境下,只需要下边几个步调。

1. 建设Service接口和实现类

譬喻SSOMethodsServices和SSOMethodsImpl

实现类中包罗Spring注解形式的注入

@Autowired

private AccountMapper accountMapper;

2. 在web.xml中插手xfire的设置

<servlet>   
    <servlet-name>XFireServlet</servlet-name>   
    <display-name>XFire Servlet</display-name>   
    <servlet-class>   
        org.codehaus.xfire.transport.http.XFireConfigurableServlet   
    </servlet-class>   
  </servlet>   
       
  <servlet-mapping>   
    <servlet-name>XFireServlet</servlet-name>   
    <url-pattern>/servlet/XFireServlet/*</url-pattern>   
  </servlet-mapping>   
       
  <servlet-mapping>   
    <servlet-name>XFireServlet</servlet-name>   
    <url-pattern>/services/*</url-pattern>   
  </servlet-mapping>

3.  在classpath目次下建设目次META-INF>xifre->services.xml

在services.xml文件中设置处事

<?xml version="1.0" encoding="UTF-8"?>     
<beans>     
<service xmlns="http://xfire.codehaus.org/config/1.0">     
    <name>SSOMethodsServices</name>     
    <serviceClass>com.test.sso.SSOMethodsServices</serviceClass>     
    <implementationClass>com.test.sso.impl.SSOMethodsImpl</implementationClass>     
</service>         
</beans>

这样,在欣赏器输入 ip:port/projectname/services 就可以看到宣布的Webservice,点击wsdl可以看到wsdl文件。

如何治理xfire公布的Webservice中Spring注入为空的问题

可是用soapUI举办测试,发明注入的accountMapper为空。呈现问题。

实验了直接办动注入,加@Component注解并添加包扫描等各类要领都无法注入,厥后发明其实在xfire的example目次下有spring的例子,回收了差异的设置要领,这种方法证明是有效的。

主要区别是:

1. servlet class利用org.codehaus.xfire.spring.XFireSpringServlet  而不是org.codehaus.xfire.transport.http.XFireConfigurableServlet。这一点是最要害的。

2. 利用一个xfire-servlet.xml设置文件设置处事而不是services.xml,在web.xml的context-param中添加xfire-servlet.xml。

3. 在applicationContext.xml中插手Webservice实现类的Bean。


#p#副标题#e#

详细设置如下,个中Service类和Impl类稳定

web.xml中部门设置

<context-param>   
    <param-name>contextConfigLocation</param-name>   
    <param-value>/WEB-INF/applicationContext.xml,/WEB-INF/xfire-servlet.xml</param-value>   
</context-param>   
       
<servlet>     
    <servlet-name>XFireServlet</servlet-name>     
    <servlet-class>     
        org.codehaus.xfire.spring.XFireSpringServlet     
    </servlet-class>     
</servlet>   
<servlet-mapping>     
    <servlet-name>XFireServlet</servlet-name>     
    <url-pattern>/servlet/XFireServlet/*</url-pattern>     
</servlet-mapping>     
<servlet-mapping>     
    <servlet-name>XFireServlet</servlet-name>     
    <url-pattern>/services/*</url-pattern>     
</servlet-mapping>

xfire-servlet.xml文件设置

<?xml version="1.0" encoding="UTF-8"?>   
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">   
<beans>   
    <!-- START SNIPPET: xfire -->
    <import resource="classpath:org/codehaus/xfire/spring/xfire.xml" />   
    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">   
        <property name="urlMap">   
            <map>   
                <entry key="/SSOMethodsServices">   
                    <ref bean="sso" />   
                </entry>   
            </map>   
        </property>   
    </bean>   
           
    <!-- Declare a parent bean with all properties common to both services -->
    <bean id="sso" class="org.codehaus.xfire.spring.remoting.XFireExporter">   
        <property name="serviceFactory">   
            <ref bean="xfire.serviceFactory" />   
        </property>   
        <property name="xfire">   
            <ref bean="xfire" />   
        </property>   
        <property name="serviceBean">   
            <ref bean="SSOMethodsImpl" />   
        </property>   
        <property name="serviceClass">   
            <value>com.test.sso.SSOMethodsServices</value>   
        </property>   
    </bean>   
    <!-- END SNIPPET: xfire -->
</beans>

applicationContext.xml中插手一条Bean设置

<bean id="SSOMethodsImpl" class="com.test.sso.impl.SSOMethodsImpl" />

这样的设置条件下,Webservice宣布乐成,而且accountMapper注入乐成。

 

    关键字:

天才代写-代写联系方式