SpringBoot整合xfire发布webSerivce详细教程

5 篇文章 0 订阅

1.导入xfire的依赖包xfire-all,会自动导入相关依赖包,其中spring可能会与项目本身的spring冲突,需要将其排除依赖

       <dependency>
            <groupId>org.codehaus.xfire</groupId>
            <artifactId>xfire-all</artifactId>
            <version>1.2.6</version>
            <!--排除冲突的依赖包-->
            <exclusions>
                <exclusion>
                    <groupId>javax.activation</groupId>
                    <artifactId>activation</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

2.注入XFireSpringServlet

@Bean
    public ServletRegistrationBean registrationBean() {
        System.out.println("servletRegistrationBean----------");
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
        servletRegistrationBean.setServlet(new XFireSpringServlet());
        servletRegistrationBean.addUrlMappings("/webservice/*");
        return servletRegistrationBean;
    }

相当于web.xml中的:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<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>/webservice/*</url-pattern>
	</servlet-mapping>
</web-app>

3.创建一个xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
	//扫描被@webService的包
    <context:component-scan base-package="com.itender.ms.webService.impl" />
    <!-- XFire start -->
    <import resource="classpath:org/codehaus/xfire/spring/xfire.xml" />
    <!--<import resource="xfire.xml" />-->
    <bean id="webAnnotations" class="org.codehaus.xfire.annotations.jsr181.Jsr181WebAnnotations" />
    <bean id="jsr181HandlerMapping" class="org.codehaus.xfire.spring.remoting.Jsr181HandlerMapping">
        <property name="xfire" ref="xfire" />
        <property name="webAnnotations" ref="webAnnotations" />
    </bean>
</beans>

4.使用@ImportResource注入xml

@ImportResource(locations = {"classpath:config/applicationContext.xml"})
@Component
public class XfireConfig  {

}

5.创建@WebService接口及实现类

//webService接口
@WebService
public interface IOrgCheckWebService {

}
//实现类
//继承SpringBootBeanAutowiringSupport 可以让@Autowired注入成功,我重写了WebApplicationContextLocator的onStartup方法
@WebService(serviceName = "orgCheckWebService",name = "orgCheckWebService",
        targetNamespace = "http://impl.webService.ms.itender.com")
@BindingType(value = SOAPBinding.SOAP12HTTP_BINDING)
@Service
public class OrgCheckWebServiceImpl extends SpringBootBeanAutowiringSupport implements IOrgCheckWebService {

}

这样就完成了,但是在启动的时候会报错,原因是Spring4.0和xfire1.2.6有版本冲突。修改
第一个错误:Attribute “singleton” must be declared for element type “bean”.
因为:xfire定义bean的时候,用了 singleton 属性,Spring4.0取消了singletion
解决方案:找到xfire-spring-1.2.6.jar中的org/codehaus/xfire/spring的xfire.xml和和xfireXmlBeans.xml,将里边的singleton属性删除
第二个错误:cannot convert value of type ‘org.codehaus.xfire.spring.editors.ServiceFactoryEditor’
解决方案:修改xfire-spring-1.2.6.jar中的org/codehaus/xfire/spring/customEditors.xml文件,将< map>< /map>中的内容替换成下面的内容:

<entry key="org.codehaus.xfire.service.ServiceFactory" value="org.codehaus.xfire.spring.editors.ServiceFactoryEditor"></entry>

即将源文件的

	<map>
        <entry key="org.codehaus.xfire.service.ServiceFactory">
          <bean class="org.codehaus.xfire.spring.editors.ServiceFactoryEditor">
            <property name="transportManager" ref="xfire.transportManager" />
          </bean>
        </entry>
    </map>

替换成

	<map>
		<entry key="org.codehaus.xfire.service.ServiceFactory" value="org.codehaus.xfire.spring.editors.ServiceFactoryEditor"></entry>
    </map>

这样,在启动项目就可以成功了,如下图:
在这里插入图片描述
注意:修改xml文件的时候可以使用360解压直接打开,然后修改内容,我之前傻乎乎的直接解压出来后修改,之后再重新打成了jar包。。。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值