SpringBoot集成axis发布WebService服务

文章目录

    • 1、使用maven-web项目生成server-config.wsdd文件
      • 1.1、新建maven-web项目
        • 1.1.1、新建项目
        • 1.1.2、添加依赖
        • 1.2、编写服务接口和实现类
          • 1.2.1、OrderService接口
          • 1.2.2、OrderServiceImpl实现类
          • 1.3、配置deploy.wsdd文件
            • deploy.wsdd文件
            • 1.4、配置tomcat
              • 1.4.1、配置tomcat-server
              • 1.4.2、配置web.xml 文件
              • 1.5、生成server-config.wsdd文件
                • 1.5.1、验证服务是否发布
                • 1.5.2、生成server-config.wsdd文件
                • 1.5.3、验证server-config.wsdd文件
                • 2、将axis集成到SpringBoot应用中去
                  • 2.1、新建springboot应用
                  • 2.2、配置应用
                    • 2.2.1、复制server-config.wsdd文件
                    • 2.2.2、新建AxisServiceConfig配置类
                    • 2.2.3、新建EngineConfigurationFactoryServlet类
                    • 2.3、启动并访问
                    • 3、验证服务
                      • 3.1、获取wsdl文件
                      • 3.2、使用soapUI验证

                        本文档详细说明了使用SpringBoot集成axis发布WebService服务的步骤,供大家在开发的过程中参考

                        1、使用maven-web项目生成server-config.wsdd文件

                        1.1、新建maven-web项目

                        1.1.1、新建项目

                        新建maven-web项目,archetype这里选择maven-archetype-webapp

                        1.1.2、添加依赖

                        pom.xml的依赖添加如下:

                          javax.servlet javax.servlet-api 4.0.0 axis axis 1.4 axis axis-wsdl4j 1.5.1 javax.mail mail 1.4.7

                        1.2、编写服务接口和实现类

                        1.2.1、OrderService接口

                        新建一个OrderService接口,如下:

                        package com.iambest.study.axis.service;
                        public interface OrderService { /**
                             * 下单接口
                             * @param userId 用户ID
                             * @param token 令牌
                             * @param orderInfo 订单信息-JSON格式
                             * @return
                             */
                            String createOrder(String userId, String token, String orderInfo);
                            /**
                             * 支付接口
                             * @param userId 用户ID
                             * @param token 令牌
                             * @param paymentInfo 支付信息-JSON格式
                             * @return
                             */
                            String payment(String userId, String token, String paymentInfo);
                        }
                        
                        1.2.2、OrderServiceImpl实现类

                        新建接口实现类,这里演示需要,仅对方法做简单实现,如下:

                        package com.iambest.study.axis.service.impl;
                        import com.iambest.study.axis.service.OrderService;
                        public class OrderServiceImpl implements OrderService { @Override
                            public String createOrder(String userId, String token, String orderInfo) { return "SUCCESS";
                            }
                            @Override
                            public String payment(String userId, String token, String paymentInfo) { return "SUCCESS";
                            }
                        }
                        

                        1.3、配置deploy.wsdd文件

                        deploy.wsdd文件

                        在webapp/WEB-INF目录下新建deploy.wsdd文件,如下:

                                http://com.iambest.study.axis.service/OrderServiceHttpSoap11Endpoint 

                        1.4、配置tomcat

                        1.4.1、配置tomcat-server

                        菜单栏:Edit Configurations , 点击+号,选择Tomcat Server --> Local, 如下:

                        在Server标签页下,Application server: 点击Configure,选择你本地的Tomcat 服务器的路径,如下:

                        然后选择Deploymen标签页,点击+号,选择当前的项目即可

                        1.4.2、配置web.xml 文件

                        web.xml文件新增如下的内容:

                         AxisServlet org.apache.axis.transport.http.AxisServlet AxisServlet /services/*

                        1.5、生成server-config.wsdd文件

                        1.5.1、验证服务是否发布

                        直接启动tomcat,浏览器访问:http://127.0.0.1:8080/axis_study/services,显示如下的内容表示webservice服务发布成功了

                        1.5.2、生成server-config.wsdd文件

                        切换到tomcat的webapps目录下,我的是mac电脑,路径如下:/Users/david/Developer/apache-tomcat-8.5.98/webapps/axis_study/WEB-INF , 如果是别的电脑,则根据你的实际路径切换即可

                        执行如下的命令:

                        java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -l http://127.0.0.1:8080/axis_study/services deploy.wsdd
                        

                        显示如下,表示生成文件成功:

                        1.5.3、验证server-config.wsdd文件

                        将生成好的server-config.wsdd文件,复制到工程文件的WEB-INF目录下,和deploy.wsdd同级即可,然后重启tomcat,再次访问http://127.0.0.1:8080/axis_study/services ,显示如下表示成功生成server-config.wsdd文件

                        2、将axis集成到SpringBoot应用中去

                        2.1、新建springboot应用

                        新建springboot工程,将1.1.2章节的依赖添加到当前的pom.xml文件中,并将接口和实现类复制到当前的工程中,如下:

                        2.2、配置应用

                        2.2.1、复制server-config.wsdd文件

                        在resources目录下,新建WEB-INF文件夹,将1.5.2章节中生成的server-config.wsdd文件复制到WEB-INF目录下

                        2.2.2、新建AxisServiceConfig配置类

                        新建AxisServiceConfig配置类,内容如下:

                        package com.iambest.study.axis.config;
                        import org.apache.axis.transport.http.AxisServlet;
                        import org.springframework.boot.web.servlet.ServletRegistrationBean;
                        import org.springframework.context.annotation.Bean;
                        import org.springframework.context.annotation.Configuration;
                        @Configuration
                        public class AxisServiceConfig { @Bean
                            public ServletRegistrationBean axisServletServletRegistrationBean() { ServletRegistrationBean axisServletServletRegistrationBean =
                                        new ServletRegistrationBean<>(new AxisServlet(),"/services/*");
                                axisServletServletRegistrationBean.setName("AxisServlet");
                                axisServletServletRegistrationBean.setLoadOnStartup(1);
                                return axisServletServletRegistrationBean;
                            }
                        }
                        
                        2.2.3、新建EngineConfigurationFactoryServlet类

                        新建EngineConfigurationFactoryServlet类,必须放到org.apache.axis.configuration包路径下,内容入下:

                        package org.apache.axis.configuration;
                        import java.io.InputStream;
                        import javax.servlet.ServletConfig;
                        import org.apache.axis.AxisProperties;
                        import org.apache.axis.ConfigurationException;
                        import org.apache.axis.EngineConfiguration;
                        import org.apache.axis.EngineConfigurationFactory;
                        import org.apache.axis.components.logger.LogFactory;
                        import org.apache.axis.server.AxisServer;
                        import org.apache.axis.utils.ClassUtils;
                        import org.apache.axis.utils.Messages;
                        import org.apache.commons.logging.Log;
                        public class EngineConfigurationFactoryServlet extends EngineConfigurationFactoryDefault { protected static Log log =
                                    LogFactory.getLog(EngineConfigurationFactoryServlet.class.getName());
                            private ServletConfig cfg;
                            public static EngineConfigurationFactory newFactory(Object param) { return (param instanceof ServletConfig)
                                        ? new EngineConfigurationFactoryServlet((ServletConfig) param)
                                        : null;
                            }
                            protected EngineConfigurationFactoryServlet(ServletConfig conf) { super();
                                this.cfg = conf;
                            }
                            @Override
                            public EngineConfiguration getServerEngineConfig() { return getServerEngineConfig(cfg);
                            }
                            /**
                             * Get a default server engine configuration in a servlet environment.
                             *
                             * @param cfg a ServletContext
                             * @return a server EngineConfiguration
                             */
                            private static EngineConfiguration getServerEngineConfig(ServletConfig cfg) { String configFile = cfg.getInitParameter(OPTION_SERVER_CONFIG_FILE);
                                if (configFile == null) { configFile = AxisProperties.getProperty(OPTION_SERVER_CONFIG_FILE);
                                }
                                if (configFile == null) { configFile = SERVER_CONFIG_FILE;
                                }
                                String appWebInfPath = "/WEB-INF";
                                FileProvider config = null;
                                String realWebInfPath = EngineConfigurationFactoryServlet.class.getResource(appWebInfPath).getPath();
                                InputStream iss = ClassUtils.getResourceAsStream(EngineConfigurationFactoryServlet.class, appWebInfPath + "/" + SERVER_CONFIG_FILE);
                                if (iss != null) { config = new FileProvider(iss);
                                }
                                if (config == null) { log.error(Messages.getMessage("servletEngineWebInfError03", ""));
                                }
                                if (config == null && realWebInfPath != null) { try { config = new FileProvider(realWebInfPath, configFile);
                                    } catch (ConfigurationException e) { log.error(Messages.getMessage("servletEngineWebInfError00"), e);
                                    }
                                }
                                /**
                                 * Fall back to config file packaged with AxisEngine
                                 */
                                if (config == null) { log.warn(Messages.getMessage("servletEngineWebInfWarn00"));
                                    try { InputStream is =
                                                ClassUtils.getResourceAsStream(AxisServer.class,
                                                        SERVER_CONFIG_FILE);
                                        config = new FileProvider(is);
                                    } catch (Exception e) { log.error(Messages.getMessage("servletEngineWebInfError02"), e);
                                    }
                                }
                                return config;
                            }
                        }
                        

                        最终的项目结构如下图所示:

                        2.3、启动并访问

                        启动springboot应用,并访问:http://127.0.0.1:8080/services路径,显示内容如下表示发布服务成功:

                        3、验证服务

                        3.1、获取wsdl文件

                        通过wget命令获取wsdl文件

                        wget -O OrderService.wsdl http://127.0.0.1:8080/services/OrderService?wsdl
                        

                        文件获取成功,如下:

                        3.2、使用soapUI验证

                        导入刚才的wsdl文件后,发送请求信息,返回如下的信息,表示成功: