之前项目再集成webService发布服务 + log4j框架日志文件

来源:互联网 发布:哪的java技术培训好 编辑:程序博客网 时间:2024/06/07 01:39

P.S:之前的相关pom配置文件可以放到wms-parent统一管理

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>com.xinyi.wms</groupId>  <artifactId>wms-parent</artifactId>  <version>1.0</version>  <packaging>pom</packaging>   <properties>     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>     <org.mybatis.version>3.2.3</org.mybatis.version>     <org.springframework.version>4.0.0.RELEASE</org.springframework.version>  </properties>  <dependencies>  <!-- 添加依赖的接口 -->    <dependency>        <groupId>com.xinyi.wms</groupId>        <artifactId>wms-api</artifactId>        <version>1.0</version>    </dependency>   <!-- 添加单元测试 -->    <dependency>        <groupId>junit</groupId>        <artifactId>junit</artifactId>        <version>3.8.1</version>        <scope>test</scope>    </dependency>    <!-- 添加dubbo包 -->    <dependency>        <groupId>com.alibaba</groupId>        <artifactId>dubbo</artifactId>        <version>2.5.3</version>    </dependency>    <!-- lombok -->    <dependency>        <groupId>org.projectlombok</groupId>        <artifactId>lombok</artifactId>        <version>1.16.6</version>        <scope>provided</scope>    </dependency>    <!-- mybatis -->    <dependency>        <groupId>org.mybatis</groupId>        <artifactId>mybatis</artifactId>        <version>${org.mybatis.version}</version>    </dependency>    <!-- mybatis和spring集成包 -->    <dependency>        <groupId>org.mybatis</groupId>        <artifactId>mybatis-spring</artifactId>        <version>1.2.3</version>    </dependency>    <!-- 驱动包 -->    <dependency>        <groupId>mysql</groupId>        <artifactId>mysql-connector-java</artifactId>        <version>5.1.21</version>    </dependency>    <!-- druid连接池 -->    <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->    <dependency>        <groupId>com.alibaba</groupId>        <artifactId>druid</artifactId>        <version>1.0.16</version>    </dependency>    <!-- common-lang -->    <dependency>        <groupId>commons-lang</groupId>        <artifactId>commons-lang</artifactId>        <version>2.6</version>    </dependency>    <!--fileupload -->    <dependency>        <groupId>commons-fileupload</groupId>        <artifactId>commons-fileupload</artifactId>        <version>1.3.1</version>    </dependency>    <!-- spring -->    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-test</artifactId>        <version>${org.springframework.version}</version>        <scope>test</scope>    </dependency>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-core</artifactId>        <version>${org.springframework.version}</version>    </dependency>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-context</artifactId>        <version>${org.springframework.version}</version>    </dependency>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-context-support</artifactId>        <version>${org.springframework.version}</version>    </dependency>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-expression</artifactId>        <version>${org.springframework.version}</version>    </dependency>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-aop</artifactId>        <version>${org.springframework.version}</version>    </dependency>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-tx</artifactId>        <version>${org.springframework.version}</version>    </dependency>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-jdbc</artifactId>        <version>${org.springframework.version}</version>    </dependency>    <!-- aspectj -->    <dependency>        <groupId>org.aspectj</groupId>        <artifactId>aspectjrt</artifactId>        <version>1.7.4</version>    </dependency>    <dependency>        <groupId>org.aspectj</groupId>        <artifactId>aspectjweaver</artifactId>        <version>1.7.4</version>    </dependency>    <!-- cglib -->    <dependency>        <groupId>cglib</groupId>        <artifactId>cglib</artifactId>        <version>3.1</version>    </dependency>    <!-- 引入javamail -->    <dependency>        <groupId>javax.mail</groupId>        <artifactId>mail</artifactId>        <version>1.4.4</version>    </dependency>    <!-- fastjson -->    <dependency>        <groupId>com.alibaba</groupId>        <artifactId>fastjson</artifactId>        <version>1.2.7</version>    </dependency>    <dependency>        <groupId>org.codehaus.jackson</groupId>        <artifactId>jackson-core-asl</artifactId>        <version>1.9.12</version>    </dependency>    <dependency>        <groupId>org.codehaus.jackson</groupId>        <artifactId>jackson-mapper-lgpl</artifactId>        <version>1.9.12</version>    </dependency>    <dependency>        <groupId>org.freemarker</groupId>        <artifactId>freemarker</artifactId>    </dependency>    <dependency>        <groupId>org.quartz-scheduler</groupId>        <artifactId>quartz</artifactId>        <version>1.8.6</version>    </dependency>    <!-- servlet-api -->    <dependency>        <groupId>javax.servlet</groupId>        <artifactId>servlet-api</artifactId>        <version>2.5</version>        <scope>provided</scope>    </dependency>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-web</artifactId>        <version>${org.springframework.version}</version>    </dependency>    <dependency>        <groupId>org.springframework</groupId>        <artifactId>spring-webmvc</artifactId>        <version>${org.springframework.version}</version>    </dependency>    <!--freemarker -->    <dependency>        <groupId>org.freemarker</groupId>        <artifactId>freemarker</artifactId>        <version>2.3.23</version>    </dependency>    <!-- dubbo -->    <dependency>        <groupId>com.alibaba</groupId>        <artifactId>dubbo</artifactId>        <version>2.5.3</version>        <exclusions>            <exclusion>                <groupId>org.springframework</groupId>                <artifactId>spring</artifactId>            </exclusion>        </exclusions>    </dependency>    <!-- zookeeper -->    <dependency>        <groupId>com.101tec</groupId>        <artifactId>zkclient</artifactId>        <version>0.2</version>    </dependency>    <dependency>        <groupId>org.apache.zookeeper</groupId>        <artifactId>zookeeper</artifactId>        <version>3.4.5</version>    </dependency>    <!-- 日志框架 -->    <dependency>      <groupId>org.slf4j</groupId>      <artifactId>slf4j-api</artifactId>      <version>1.6.6</version>    </dependency>     <dependency>        <groupId>org.slf4j</groupId>        <artifactId>slf4j-log4j12</artifactId>        <version>1.7.12</version>    </dependency>    <dependency>      <groupId>log4j</groupId>      <artifactId>log4j</artifactId>      <version>1.2.16</version>    </dependency>    <!-- CXF webservice -->    <dependency>        <groupId>org.apache.cxf</groupId>        <artifactId>cxf-rt-frontend-jaxws</artifactId>        <version>3.0.3</version>    </dependency>    <dependency>        <groupId>org.apache.cxf</groupId>        <artifactId>cxf-rt-transports-http</artifactId>        <version>3.0.3</version>        </dependency>    <dependency>        <groupId>org.apache.cxf</groupId>        <artifactId>cxf-rt-frontend-jaxrs</artifactId>        <version>3.0.3</version>    </dependency>    </dependencies></project>

1.在pom中导入相关的包(已在父类中配置)
2.写相关的接口和实现类

这里写图片描述


2.1 接口(用于区分之前原有相同名字的接口名,因此加1..):IStudentService1

package com.xinyi.wms.client.webservice.service;import javax.jws.WebService;import javax.jws.soap.SOAPBinding;import javax.jws.soap.SOAPBinding.Style;import com.xinyi.wms.api.entity.Student;@WebService@SOAPBinding(style=Style.RPC)public interface IStudentService1 {    public Student getStudentByName(String name);}

2.2 发布类: StudentServiceImpl2

package com.xinyi.wms.client.webservice.serviceImpl;import java.util.HashMap;import java.util.List;import java.util.Map;import javax.jws.WebService;import javax.jws.soap.SOAPBinding;import javax.jws.soap.SOAPBinding.Style;import org.apache.log4j.Logger;import org.springframework.beans.factory.annotation.Autowired;import com.xinyi.wms.api.entity.Student;import com.xinyi.wms.api.service.IStudentService;import com.xinyi.wms.client.webservice.service.IStudentService1;@WebService@SOAPBinding(style=Style.RPC)public class StudentServiceImpl2 implements IStudentService1{    private static Logger logger = Logger.getLogger(StudentServiceImpl2.class);    @Autowired    IStudentService studentService;    private  Map<String, Student> studentMap = new HashMap<String,Student>();    @Override    public Student getStudentByName(String name) {        List<Student> list = studentService.selectAll();        for (Student student : list) {            studentMap.put(student.getName(), student);        }        logger.info(studentMap.get(name));        return studentMap.get(name);    }}

2.3 因为集成了SpringMVC…原本这一层应该在manager层,想试验MVC跟webService共存,因此放在这
类: CXFSerlvetExtend
在此就做了一件事:继承CXFNonSpringServlet,覆写loadBus方法:里面代码全部复制至源码的CXFSerlvet类;如果是Spring集成,则可以省略此类

        @Override        protected void loadBus(ServletConfig servletConfig) {           /* ApplicationContext wac = WebApplicationContextUtils.           getWebApplicationContext(servletConfig.getServletContext());*/            ApplicationContext wac = (ApplicationContext) servletConfig.getServletContext()         .getAttribute(FrameworkServlet.SERVLET_CONTEXT_PREFIX+"springMVC");

在resources目录中添加配置文件: application-cxf-client.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:jaxws="http://cxf.apache.org/jaxws"    xsi:schemaLocation="            http://www.springframework.org/schema/beans             http://www.springframework.org/schema/beans/spring-beans.xsd            http://cxf.apache.org/jaxws             http://cxf.apache.org/schemas/jaxws.xsd">    <import resource="classpath:META-INF/cxf/cxf.xml" />      <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />      <!-- 创建服务类 -->    <bean id="StudentServiceImpl" class="com.xinyi.wms.client.webservice.serviceImpl.StudentServiceImpl2"/>    <!--         发布服务         serviceClass:服务接口全限定名        serviceBean:服务类对象,通过#号在spring容器找到对应id的对象        address:发布地址.    -->    <jaxws:server         serviceClass="com.xinyi.wms.client.webservice.service.IStudentService1"         serviceBean="#StudentServiceImpl"         address="/studentService">    </jaxws:server></beans>

3.在application-client.xml中引入cxf配置文件

    <!-- 引入CXF配置文件 -->    <import resource="classpath:application-cxf-client.xml"/>

以及MVC相关模板配置:

            <!--配置freeMarker的模板路径 -->    <bean        class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">        <!-- 配置freemarker的文件编码 -->        <property name="defaultEncoding" value="UTF-8" />        <!-- 配置freemarker寻找模板的路径 -->        <property name="templateLoaderPath" value="/WEB-INF/views/" />    </bean>    <!--freemarker视图解析器 -->    <bean id="viewResolver"        class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">        <!-- 是否在model自动把session中的attribute导入进去; -->        <property name="exposeSessionAttributes" value="true" />        <!-- 配置逻辑视图自动添加的后缀名 -->        <property name="suffix" value=".ftl" />        <!-- 配置视图的输出HTML的contentType -->        <property name="contentType" value="text/html;charset=UTF-8" />    </bean>    <!-- 使用Spring+quartz完成定时任务 -->    <!-- 配置作业类 -->    <bean        class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">        <property name="messageConverters">            <util:list id="beanList">                <ref bean="mappingJacksonHttpMessageConverter" />            </util:list>        </property>    </bean>    <bean id="mappingJacksonHttpMessageConverter"        class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">        <property name="supportedMediaTypes">            <list>                <value>text/html;charset=UTF-8</value>            </list>        </property>    </bean>    <!--处理上传 -->    <bean        class="org.springframework.web.multipart.commons.CommonsMultipartResolver"        id="multipartResolver">        <property name="maxUploadSize" value="100000000" />    </bean>

4.在web.xml中添加配置的发布类的路径

      <!-- 设置webservice容器加载配置文件路径 -->      <servlet>        <servlet-name>CXFSerlvet</servlet-name>        <servlet-class>com.xinyi.wms.client.webservice.publish.CXFSerlvetExtend</servlet-class>        <load-on-startup>2</load-on-startup>      </servlet>      <!--请求拦截的路径格式-->      <servlet-mapping>        <servlet-name>CXFSerlvet</servlet-name>        <url-pattern>/ws/*</url-pattern>      </servlet-mapping>

在发布类中集成了log4j记录日志信息

log4j.properties

# Global logging configurationlog4j.rootLogger=stdout,I,D,E# MyBatis logging configuration...log4j.logger.com.xinyi.wms.manager.test.App=TRACE### 输出信息到控制抬 ####log4j.appender.stdout = org.apache.log4j.ConsoleAppender#log4j.appender.stdout.Target = System.out#log4j.appender.stdout.layout = org.apache.log4j.PatternLayout#log4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n### 输出DEBUG 级别以上的日志到=H://xinyi/logs/debug ###log4j.appender.D = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.D.File = H://xinyi/logs/debug/debug#服务器启动日志是追加,false:服务器启动后会生成日志文件把老的覆盖掉log4j.appender.D.Append = truelog4j.appender.D.Threshold = DEBUGlog4j.appender.D.layout = org.apache.log4j.PatternLayoutlog4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n#日志的最大容量为10Mlog4j.appender.D.maxFileSize=10240KB   #设置每天生成一个文件名后添加的名称,备份名称:年月日.loglog4j.appender.D.DatePattern='_'yyyy-MM-dd'.log'### 输出INFO 级别以上的日志到=H://xinyi/logs/info###log4j.appender.I = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.I.File =H://xinyi/logs/info/infolog4j.appender.I.Append = truelog4j.appender.I.Threshold = INFOlog4j.appender.I.layout = org.apache.log4j.PatternLayoutlog4j.appender.I.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n#设置每天生成一个文件名后添加的名称,备份名称:年月日.loglog4j.appender.I.DatePattern='_'yyyy-MM-dd'.log'#日志的最大容量为10Mlog4j.appender.I.maxFileSize=10240KB   ### 输出ERROR 级别以上的日志到=H://xinyi/logs/error###log4j.appender.E = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.E.File =H://xinyi/logs/error/errorlog4j.appender.E.Append = truelog4j.appender.E.Threshold = ERRORlog4j.appender.E.layout = org.apache.log4j.PatternLayoutlog4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n#设置每天生成一个文件名后添加的名称,备份名称:年月日.loglog4j.appender.E.DatePattern='_'yyyy-MM-dd'.log'#日志的最大容量为10Mlog4j.appender.E.maxFileSize=10240KB   

在web.xml中加入日志的启动项

<!-- 配置日期框架 -->  <display-name>log web</display-name>    <context-param>        <param-name>log4jConfigurationLocation</param-name>        <param-value>classpath*:log4j.properties</param-value>    </context-param>    <!--每隔60s扫描log4j的配置文件,这里配置的log4jRefreshInterval参数表示能不用重启web服务器就能动态更改log4j日志级别,这也是和Spring整合的一大好处-->    <context-param>        <param-name>log4jRefreshInterval</param-name>        <param-value>60000</param-value>    </context-param>    <listener>    <!--日志监听-->    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>    </listener>

附上测试截图:

这里写图片描述


这里写图片描述


将生成的wsdl右键保存到本地,用SoapUI软件创建一个soap项目,并填入相应请求参数来模拟获取webService服务,如下图:


这里写图片描述

阅读全文
0 0
原创粉丝点击