springmvc mybatis axis2 整合服务器端 客户端

                SpringMvc Mybatis Axis2 整合服务器端 客户端

    由于公司项目需要对外提供webservice服务,之前只写过客户端程序,对于服务器端的程序没有任何开发经验,于是通过度娘的帮助在网上找到了很多类似的文章,每一篇文章都写的很详细。实际按照网上的文章操作起来并不是一帆风顺。这里我把我的整个过程重新整理一下。做成个详细的文档供大家参考。

1:创建Maven项目

springmvc mybatis axis2 整合服务器端 客户端

springmvc mybatis axis2 整合服务器端 客户端

springmvc mybatis axis2 整合服务器端 客户端

springmvc mybatis axis2 整合服务器端 客户端

Maven工程建立后有可能会出现报错,这是由于项目结构并不完整。在我们项目工程中完善我们的项目结构即可。

springmvc mybatis axis2 整合服务器端 客户端

 

springmvc mybatis axis2 整合服务器端 客户端

完整项目结构。

springmvc mybatis axis2 整合服务器端 客户端

结构完善以后我们进行pom.xml文件编写

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>axis2test</groupId>
  <artifactId>axis2test</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>axis2test Maven Webapp</name>
  <url>http://maven.apache.org</url>
     <properties>
          <axis2.version>1.6.2</axis2.version>
        <junit.version>4.12</junit.version>
        <spring.version>4.3.2.RELEASE</spring.version>
        <mybatis.version>3.4.1</mybatis.version>
        <mybatis.spring.version>1.3.1</mybatis.spring.version>
        <mysql.version>5.1.38</mysql.version>
        <commons.logging.version>1.2.17</commons.logging.version>
        <fastjson.version>1.2.44</fastjson.version>
        <aspectjweaver.version>1.8.13</aspectjweaver.version>
    </properties>
        
     <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>${spring.version}</version>
            </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>${spring.version}</version>
            </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.8</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.18</version>
        </dependency>        
        <!--axis2 begin-->
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2</artifactId>
            <version>${axis2.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-spring</artifactId>
            <version>${axis2.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-transport-http</artifactId>
            <version>${axis2.version}</version>
        </dependency>
        <dependency>
           <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-transport-local</artifactId>
            <version>${axis2.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-xmlbeans</artifactId>
            <version>${axis2.version}</version>
        </dependency>
    <!--axis2 end-->  
    </dependencies>
  
  <profiles>
        <profile>
            <id>jdk-1.8</id>
            <!-- 另外一种**方式 -->
            <activation>
                <activeByDefault>true</activeByDefault>
                <jdk>1.8</jdk>
            </activation>
            <properties>
                <maven.compiler.source>1.8</maven.compiler.source>
                <maven.compiler.target>1.8</maven.compiler.target>
                <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
            </properties>
        </profile>
    </profiles>
  <build>
    <finalName>axis2test</finalName>
  </build>
</project>

 

建立springContext.xml文件

spring配置进行最简易配置

<?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:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:task="http://www.springframework.org/schema/task"
    xsi:schemaLocation="http://www.springframework.org/schema/task 
        http://www.springframework.org/schema/task/spring-task-4.3.xsd
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.2.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">
    <!-- 启用注解 -->
    <context:annotation-config />
    <bean id="applicationContext" class="org.apache.axis2.extensions.spring.receivers.ApplicationContextHolder" />
</beans>

建立springContext-mvc.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:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  
    http://www.springframework.org/schema/context  
    http://www.springframework.org/schema/context/spring-context-3.1.xsd  
    http://www.springframework.org/schema/mvc  
    http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
    <mvc:annotation-driven></mvc:annotation-driven>
    <context:annotation-config />
    <!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 -->
    <context:component-scan base-package="com.hr" />
    <!-- 定义跳转的文件的前后缀 ,视图模式配置-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 -->
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>
</beans>

建立dbconfig.properties数据库配置文件

#url:jdbc:mysql://101.201.148.193:3306/managenew?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&characterSetResults=utf8&serverTimezone=Hongkong&zeroDateTimeBehavior=convertToNull 
url:jdbc:mysql://localhost:3306/manage?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&characterSetResults=utf8&serverTimezone=Hongkong&zeroDateTimeBehavior=convertToNull
driverClassName:com.mysql.cj.jdbc.Driver
username:root
password:root
filters:stat
   
maxActive:20
initialSize:1
maxWait:60000
minIdle:10
maxIdle:15

timeBetweenEvictionRunsMillis:60000
minEvictableIdleTimeMillis:300000
   
validationQuery:SELECT 'x'
testWhileIdle:true
testOnBorrow:false
testOnReturn:false

maxOpenPreparedStatements:20
removeAbandoned:true
removeAbandonedTimeout:1800
logAbandoned:true

建立spring-mybatis.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:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd  
    http://www.springframework.org/schema/context  
    http://www.springframework.org/schema/context/spring-context-3.1.xsd  
    http://www.springframework.org/schema/mvc  
    http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
    <context:property-placeholder location="classpath:dbconfig.properties"
        ignore-unresolvable="true" />
    <!-- 配置数据源 -->
    <bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
        init-method="init" destroy-method="close">
        <property name="url" value="${url}" />
        <property name="username" value="${username}" />
        <property name="password" value="${password}" />
        <!-- 初始化连接大小 -->
        <property name="initialSize" value="0" />
        <!-- 连接池最大使用连接数量 -->
        <property name="maxActive" value="20" />
        <!-- 连接池最小空闲 -->
        <property name="minIdle" value="0" />
        <!-- 获取连接最大等待时间 -->
        <property name="maxWait" value="60000" />
        <property name="validationQuery" value="${validationQuery}" />
        <property name="testOnBorrow" value="false" />
        <property name="testOnReturn" value="false" />
        <property name="testWhileIdle" value="true" />
        <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
        <property name="timeBetweenEvictionRunsMillis" value="60000" />
        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="25200000" />
        <!-- 打开removeAbandoned功能 -->
        <property name="removeAbandoned" value="true" />
        <!-- 1800秒,也就是30分钟 -->
        <property name="removeAbandonedTimeout" value="1800" />
        <!-- 关闭abanded连接时输出错误日志 -->
        <property name="logAbandoned" value="true" />
        <!-- 监控数据库 -->
        <!-- <property name="filters" value="stat" /> -->
        <property name="filters" value="mergeStat" />
    </bean>
    <!-- myBatis文件 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 加载mybatis的全局配置文件 -->
        <property name="mapperLocations" value="classpath:mapper/*/*.xml"></property>
        <property name="dataSource" ref="dataSource" />
        <!-- 配置数据库表对应的java实体类 -->
        <property name="typeAliasesPackage" value="com.hr.*.model" />
        <!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 -->        
      
    </bean>
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.hr.*.mapper" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
    </bean>
</beans>

修改web.xml文件

<web-app version="3.0" 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_3_0.xsd">
  <!-- 编码过滤器 -->
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <async-supported>true</async-supported>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!-- Spring监听器 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!-- 防止Spring内存溢出监听器 -->
    <listener>
        <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
    </listener>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring*.xml</param-value>
  </context-param>
  <servlet>
    <servlet-name>springMvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springContext-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springMvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  
  <servlet>
    <servlet-name>DruidStatView</servlet-name>
    <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>DruidStatView</servlet-name>
    <url-pattern>/druid/*</url-pattern>
  </servlet-mapping>
  
   <servlet>  
        <servlet-name>AxisServlet</servlet-name>  
        <servlet-class>  
            org.apache.axis2.transport.http.AxisServlet  
        </servlet-class>  
        <load-on-startup>1</load-on-startup>  
    </servlet>  
    <servlet-mapping>  
        <servlet-name>AxisServlet</servlet-name>  
        <url-pattern>/services/*</url-pattern>  
    </servlet-mapping>
  <filter>
    <filter-name>DruidWebStatFilter</filter-name>
    <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
    <init-param>
      <param-name>exclusions</param-name>
      <param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>DruidWebStatFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  <welcome-file-list>
        <welcome-file>/index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

配置完成后项目结构

springmvc mybatis axis2 整合服务器端 客户端

业务代码

UserMapper.java

package com.hr.user.mapper;
import java.util.HashMap;

import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;

import com.hr.user.model.User;
@Component
public interface UserMapper {

    User selectUser1(String username);

}

User.java

package com.hr.user.model;

public class User {
    private String username;

    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
    
}


IUserService.java

package com.hr.user.service;

import com.hr.user.model.User;

public interface IUserService {
    User getUserByUsername(String username);
}
 

UserServiceImpl.java

package com.hr.user.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.hr.user.mapper.UserMapper;
import com.hr.user.model.User;
import com.hr.user.service.IUserService;

@Service("userService")
public class UserServiceImpl implements IUserService {

  @Autowired(required=true)
  UserMapper userMapper;

    @Override
    public User getUserByUsername(String username) {
      User user = userMapper.selectUser1(username);    
        return user;

    }

}

UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >

<mapper namespace="com.hr.user.mapper.UserMapper">

    <select id="selectUser1" parameterType="java.lang.String" resultType="com.hr.user.model.User">

        select * from userinfo where username=#{username}

    </select>

</mapper>

数据库表就根据上面查询sql语句自己建立一下。

 

Axis2服务器端部分

我们已经在web.xml、pom.xml文件中已经把axis2的集成到项目当中。所以我们只需要编写业务代码即可。、

然后配置我们要对外提供webservice接口。这里对外提供实现类impl。

springmvc mybatis axis2 整合服务器端 客户端

这里是需要在webapp下面建立services.xml文件,webapp->WEB-INF->services->myservice->META-INF->services.xml

springmvc mybatis axis2 整合服务器端 客户端

services.xml文件如下

<service name="AxisService">  
    <description>AxisService</description>  
    <parameter name="ServiceObjectSupplier"><!-- 固定的不变 -->  
            org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier  
        </parameter>  
    <parameter name="SpringBeanName">userService</parameter><!-- bean名字 -->  
   <messageReceivers>
            <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
           <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
    </messageReceivers>  
</service>

 

这里<parameter name="SpringBeanName">userService</parameter><!-- bean名字 -->  userService就是userserviceimpl实现类的service名称。

springmvc mybatis axis2 整合服务器端 客户端

经过上面文件的配置以后我们就实现的axis2服务器端代码。

部署到tomcat后访问http://localhost:8089/hrsystem/services/AxisService?wsdl  

AxisService就是我们service.xml文件中配置的服务名可随意更换

springmvc mybatis axis2 整合服务器端 客户端

springmvc mybatis axis2 整合服务器端 客户端

 

Axis2客户端

我们可以使用myeclipse的Axis2插件直接生成代码即可。

选择Axis2 Code Generator

springmvc mybatis axis2 整合服务器端 客户端

springmvc mybatis axis2 整合服务器端 客户端

springmvc mybatis axis2 整合服务器端 客户端

springmvc mybatis axis2 整合服务器端 客户端

选择一个客户端代码输出位置即可

springmvc mybatis axis2 整合服务器端 客户端

把客户端代码整合到项目中。

springmvc mybatis axis2 整合服务器端 客户端

下一步我们可以写一下测试代码

springmvc mybatis axis2 整合服务器端 客户端

springmvc mybatis axis2 整合服务器端 客户端

 

此程序只是为了简易的配置测试使用。