这里是列表文本直入正题:关于CXF自行百度。 这里是列表文本发布两种 WS 和 RS 实现效果如下: 源码:https://git.oschina.net/Z201/SSJH/tree/master/ssh-webservice 里面有些其它项目 不用担心 直接构
- 这里是列表文本直入正题:关于CXF自行百度。 这里是列表文本发布两种 WS 和 RS 实现效果如下:
源码:https://git.oschina.net/Z201/SSJH/tree/master/ssh-webservice 里面有些其它项目 不用担心 直接构建就行了。
<properties> <!-- 项目框架组合版本号 --> <java-version>1.8</java-version> <javax.el-api.version>3.0.0</javax.el-api.version> <javax.servlet-api.version>3.0.1</javax.servlet-api.version> <spring.version>4.2.5.RELEASE</spring.version> <org.springframework.data.version>1.7.2.RELEASE</org.springframework.data.version> <!-- 页面模板引擎ibeetl --> <com.ibeetl.version>2.4.1</com.ibeetl.version> <!-- LOG框架 --> <org.log4j2.version>2.8.1</org.log4j2.version> <!-- jackson框架 组合--> <com.fasterxml.jackson.version>2.8.1</com.fasterxml.jackson.version> <net.sf.json-lib.version>2.4</net.sf.json-lib.version> <!-- MYSQL 数据库驱动 --> <mysql.driver.version>5.1.28</mysql.driver.version> <!-- springfox-swagger --> <springfox-swagger.version>2.2.2</springfox-swagger.version> <!-- 嵌入数据库 H2 --> <h2.database.version>1.4.182</h2.database.version> <!-- JBOSS ORM 组合套装 --> <org.hibernate.version>4.3.11.Final</org.hibernate.version> <hibernate-commons-annotation.version>5.0.1.Final</hibernate-commons-annotation.version> <hibernate-jpa-2.1-api.version>1.0.0.Final</hibernate-jpa-2.1-api.version> <hibernate.validator.version>5.2.1.Final</hibernate.validator.version> <!-- 阿里巴巴 Druid连接 --> <alibaba.druid.version>1.0.17</alibaba.druid.version> <!-- Quartz 任务调度 --> <org.quartz.version>2.2.2</org.quartz.version> <!-- AOP 组合--> <org.aspectj.version>1.8.8</org.aspectj.version> <cglib.nodep.version>3.1</cglib.nodep.version> <!-- 上传组件 --> <apache.commons.fileupload>1.3.1</apache.commons.fileupload> <!-- lang3--> <apache.commons.lang3>3.4</apache.commons.lang3> <!-- io--> <apache.commons.io>2.4</apache.commons.io> <!-- collections--> <apache.commons.collections>3.2.1</apache.commons.collections> <!-- lombok 语法糖 --> <projectlombok.version>1.16.8</projectlombok.version> <!-- shiro 权限 --> <shiro.version>1.2.4</shiro.version> <!-- 单元测试 --> <junit.version>4.10</junit.version> <!-- Apache CXF RS WS 实现 --> <cxf.version>3.1.7</cxf.version> <!-- ActiveMQ MOM中间件--> <activemq.version>5.13.3</activemq.version> <!-- 指定Maven编译项目编译格式 --> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties>
里面的东西比较多 个人测试的时候其它的子项目也需要管理版本。
<properties> <oauth2.version>1.0.0</oauth2.version> <!-- 指定Maven编译项目编译格式 --> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.cn.z201.core</groupId> <artifactId>ssh-core</artifactId> <version>${project.version}</version> </dependency> <!-- Spring 4.* --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> <exclusions> <!-- 排除通用日志 改支持SLF4j --> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> <exclusions> <!-- 排除通用日志 改支持SLF4j --> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-websocket</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-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <!-- spring data jpa --> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-jpa</artifactId> <version>${org.springframework.data.version}</version> </dependency> <!-- hibernate 4.* --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-osgi</artifactId> <version>${org.hibernate.version}</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-envers</artifactId> <version>${org.hibernate.version}</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-infinispan</artifactId> <version>${org.hibernate.version}</version> <exclusions> <exclusion> <artifactId>jboss-transaction-api_1.1_spec</artifactId> <groupId>org.jboss.spec.javax.transaction</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.hibernate.common</groupId> <artifactId>hibernate-commons-annotations</artifactId> <version>${hibernate-commons-annotation.version}</version> </dependency> <dependency> <groupId>org.hibernate.javax.persistence</groupId> <artifactId>hibernate-jpa-2.1-api</artifactId> <version>${hibernate-jpa-2.1-api.version}</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>${hibernate.validator.version}</version> </dependency> <!-- hibernate 依赖包 end --> <!-- 增强 AOP --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>${org.aspectj.version}</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>${org.aspectj.version}</version> </dependency> <!-- AOP end--> <!-- 代理 --> <dependency> <groupId>cglib</groupId> <artifactId>cglib-nodep</artifactId> <version>${cglib.nodep.version}</version> </dependency> <!-- Druid --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>${alibaba.druid.version}</version> </dependency> <!-- mysql driver --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.driver.version}</version> </dependency> <!-- 这才是主角 --> <dependency> <groupId>javax.ws.rs</groupId> <artifactId>jsr311-api</artifactId> <version>1.1.1</version> </dependency> <!-- CXF RS 核心包 --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxrs</artifactId> <version>${cxf.version}</version> </dependency> <!-- cxf rs 扩展 --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-rs-extension-providers</artifactId> <version>${cxf.version}</version> </dependency> <!-- rs cors认证 --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-rs-security-cors</artifactId> <version>${cxf.version}</version> </dependency> <!-- swagger API文档生成 --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-rs-service-description-swagger</artifactId> <version>${cxf.version}</version> </dependency> <!-- RESTful WADL生成 --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-rs-service-description</artifactId> <version>${cxf.version}</version> </dependency> <!-- CXF WS 核心包 --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>${cxf.version}</version> </dependency> <!-- CXF WS 安全管理 --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-ws-security </artifactId> <version>${cxf.version}</version> </dependency> <!-- CXF HTTP传输 --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>${cxf.version}</version> </dependency> <!-- cxf HTTP传输 jetty支持 --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http-jetty</artifactId> <version>${cxf.version}</version> </dependency> <!-- cxf 依赖包 end --> <!-- oltu 依赖包 begin --> <dependency> <groupId>org.apache.oltu.oauth2</groupId> <artifactId>org.apache.oltu.oauth2.client</artifactId> <version>${oauth2.version}</version> </dependency> <dependency> <groupId>org.apache.oltu.oauth2</groupId> <artifactId>org.apache.oltu.oauth2.common</artifactId> <version>${oauth2.version}</version> </dependency> <dependency> <groupId>org.apache.oltu.oauth2</groupId> <artifactId>org.apache.oltu.oauth2.authzserver</artifactId> <version>${oauth2.version}</version> </dependency> <dependency> <groupId>org.apache.oltu.oauth2</groupId> <artifactId>org.apache.oltu.oauth2.resourceserver</artifactId> <version>${oauth2.version}</version> </dependency> <!-- oltu 依赖包 end --> </dependencies>
上面是依赖
applicationContext.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:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <description>Spring Configuration</description> <!-- <aop:aspectj-autoproxy proxy-target-class="true" /> --> <!-- 如果配置了 <context:component-scan>那么<context:annotation-config/>标签就可以不用再xml中配置了,因为前者包含了后者 --> <context:component-scan base-package="cn.z201" /> <!-- 配置 cxf配置文件 --> <import resource="classpath*:/apache-cxf/cxf-config.xml" /> <import resource="classpath*:/apache-cxf/cxf-restful.xml" /> <import resource="classpath*:/apache-cxf/cxf-soap.xml" /> <!-- 配置数据源基础信息 --> <context:property-placeholder location="classpath*:/db.properties" /> <!-- 生产数据源 mysql <import resource="classpath*:/dataSource/dataSource-mysql.xml" /> --> <!-- 测试数据源 h2 --> <import resource="classpath*:/dataSource/dataSource-h2.xml" /> </beans>
dataSource-h2.xml 测试数据源:
<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" xmlns:jpa="http://www.springframework.org/schema/data/jpa" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- for tests is used memory database (H2) --> <jdbc:embedded-database id="datasource" type="H2" /> <!-- 配置EntityManagerFactory --> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="persistenceUnitName" value="core" /> <property name="dataSource" ref="datasource" /> <!-- persistence管理实体 <property name="persistenceUnitName" value="ZENG"></property> <property name="persistenceXmlLocation" value="META-INF/persistence.xml"></property> --> <!-- 配置JPA提供商的适配器 ,可以通过内部bean的方式来配置 --> <property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"></bean> </property> <property name="packagesToScan" value="cn.z201.entities" /> <!-- 配置JPA的基本属性,例如JPA 实现产品的属性 --> <property name="jpaProperties"> <props> <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> <!-- 在控制台显示SQL语句 --> <prop key="hibernate.show_sql">true</prop> <!-- 格式化SQL语句显示 --> <prop key="hibernate.format_sql">true</prop> <!-- 全部使用注解,所以禁止Hibernate HBM 此时只搜索class文件 --> <prop key="hibernate.archive.autodetection">class</prop> <!-- 方言 --> <prop key="hibernate.dialect">${hibernate.h2.dialect}</prop> <prop key="hibernate.jdbc.fetch_size">50</prop> <prop key="hibernate.jdbc.batch_size">25</prop> <!-- 指定事务隔离级别 2.读以提交数据 --> <prop key="connection.isolation">2</prop> <!-- 避免createClob() method threw error --> <prop key="hibernate.temp.use_jdbc_metadata_defaults">false</prop> <prop key="hibernate.current_session_context_class">thread</prop> </props> </property> </bean> <!-- 配置Spring Data JPA扫描目录 --> <jpa:repositories base-package="cn.z201.entities" entity-manager-factory-ref="entityManagerFactory" transaction-manager-ref="transactionManager"> </jpa:repositories> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> <property name="entityManagerFactory" ref="entityManagerFactory" /> </bean> <!-- 启用 annotation事务 --> <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="false" /> </beans>
cxf 的配置文件 cxf-config.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" xmlns:soap="http://cxf.apache.org/bindings/soap" xmlns:core="http://cxf.apache.org/core" xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation="http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd http://cxf.apache.org/bindings/soap http://cxf.apache.org/schemas/configuration/soap.xsd"> <import resource="classpath:META-INF/cxf/cxf.xml" /> <bean id="inMessageInterceptor" class="org.apache.cxf.interceptor.LoggingInInterceptor" /> <bean id="outMessageInterceptor" class="org.apache.cxf.interceptor.LoggingOutInterceptor" /> <bean id="logInbound" class="org.apache.cxf.interceptor.LoggingInInterceptor" /> <bean id="logOutbound" class="org.apache.cxf.interceptor.LoggingOutInterceptor" /> <!-- 亦可在 jaxrs:server 内配置jaxrs:inInterceptors 拦截器,如下边注释掉的 --> <bean id="cxf" class="org.apache.cxf.bus.spring.SpringBus"> <property name="inInterceptors"> <list> <ref bean="logInbound" /> </list> </property> <property name="outInterceptors"> <list> <ref bean="logOutbound" /> </list> </property> <property name="outFaultInterceptors"> <list> <ref bean="logOutbound" /> </list> </property> <property name="inFaultInterceptors"> <list> <ref bean="logInbound" /> </list> </property> </bean> <!-- CORS认证 <bean id="corsFilter" class="org.apache.cxf.rs.security.cors.CrossOriginResourceSharingFilter"> <property name="allowOrigins" value="http://localhost"/> </bean> --> </beans>
cxf-restful.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" xmlns:core="http://cxf.apache.org/core" xmlns:jaxrs="http://cxf.apache.org/jaxrs" xsi:schemaLocation="http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd"> <jaxrs:server address="/restful/v1/userInfo" serviceName="userInfoRestful" > <jaxrs:serviceBeans> <ref bean="userInfoRestfulImpl" /> </jaxrs:serviceBeans> <jaxrs:providers> <bean class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider" /> <!-- 认证拦截器 <ref bean="authFilter"/> --> </jaxrs:providers> <jaxrs:extensionMappings> <entry key="json" value="application/json" /> <entry key="xml" value="application/xml" /> </jaxrs:extensionMappings> <jaxrs:languageMappings> <entry key="en" value="en-gb" /> </jaxrs:languageMappings> </jaxrs:server> <jaxrs:server address="/restful/v1/example" serviceName="exampleRestful" > <jaxrs:serviceBeans> <ref bean="exampleRestfulImpl" /> </jaxrs:serviceBeans> <jaxrs:providers> <bean class="com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider" /> </jaxrs:providers> <jaxrs:extensionMappings> <entry key="json" value="application/json" /> <entry key="xml" value="application/xml" /> </jaxrs:extensionMappings> <jaxrs:languageMappings> <entry key="en" value="en-gb" /> </jaxrs:languageMappings> </jaxrs:server> </beans>
cxf-soap.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" xmlns:core="http://cxf.apache.org/core" xmlns:soap="http://cxf.apache.org/bindings/soap" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation="http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://cxf.apache.org/bindings/soap http://cxf.apache.org/schemas/configuration/soap.xsd"> <!-- 这里如果不指定serviceClass 将看不到返回xml信息 --> <jaxws:server address="/soap/v1" serviceClass="cn.z201.soap.UserInfoSoap"> <jaxws:serviceBean> <ref bean="userInfoSoapImpl"/> </jaxws:serviceBean> </jaxws:server> </beans>
web.xml:
<?xml version="1.0" encoding="UTF-8"?> <web-app 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" version="3.0"> <display-name>Archetype Created Web Application</display-name> <context-param> <param-name>webAppRootKey</param-name> <param-value>webapp.root</param-value> </context-param> <!-- 自定义拦截器,用户静态文件缓存以及调试信息显示。 --> <filter> <filter-name>filter</filter-name> <filter-class>cn.z201.filter.HttpFilter</filter-class> </filter> <filter-mapping> <filter-name>filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 字符集处理 --> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!--添加监听 --> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener> <!-- spring 配置 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:/applicationContext.xml </param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- 配置缓存清除监听器,负责处理由 JavaBean Introspector 功能而引起的缓存泄露 --> <listener> <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> </listener> <!-- CXF begin --> <servlet> <servlet-name>CXFServlet</servlet-name> <servlet-class> org.apache.cxf.transport.servlet.CXFServlet </servlet-class> <!-- 开启异步请求 --> <async-supported>true</async-supported> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/api/*</url-pattern> </servlet-mapping> <!-- CXF end --> <!-- 启用Web监控统计功能 通过 http://ip:port/druid/ 地址访问即可--> <servlet> <servlet-name>DruidStatView</servlet-name> <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class> <init-param> <!-- 只允许本地ip访问。 --> <param-name>allow</param-name> <param-value>127.0.0.1</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>DruidStatView</servlet-name> <url-pattern>/druid/*</url-pattern> </servlet-mapping> <!-- session timeout --> <session-config> <!-- 分钟 --> <session-timeout>0</session-timeout> </session-config> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> </web-app>