基於Spring可擴充Schema自訂配置(1)

來源:互聯網
上載者:User

基於Spring可擴充Schema自訂配置(1)

本章主要介紹擴充前的準備工作。

簡述

本教程主要介紹如何擴充Spring的xml配置,讓Spring能夠識別我們自訂的Schema和Annotation。
這裡我們要實現的功能如下,首先讓Spring能夠識別下面的配置。

這個配置的要實現的功能是,配置完後能夠讓Spring掃描我們自訂的@Endpoint註解。並且根據註解自動發布WebService服務。功能未完全實現,作為擴充Spring的教程,起一個拋磚引玉的作用。

建立項目

首先需要建立一個Java項目,這裡使用Maven建立一個quickstart項目(普通Java項目)。
POM檔案內容如下

<code class="hljs 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/xsd/maven-4.0.0.xsd">    <modelversion>4.0.0</modelversion>    <groupid>com.codestd</groupid>    <artifactid>spring-cxf-annotation-support</artifactid>    <version>1.0.0-SNAPSHOT</version>    <name>${project.artifactId}</name>    <description>使您的項目可以通過註解的方式發布WebService,基於Spring+CXF封裝,無API侵入。</description>    <url>https://github.com/CodeSTD/spring-cxf-annotation-support</url>    <licenses>        <license>            <name>The Apache License, Version 2.0</name>            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>        </license>    </licenses>    <developers>        <developer>            <name>jaune(WangChengwei)</name>            <email>[email protected]</email>            <roles>                <role>developer</role>            </roles>            <timezone>GMT+8</timezone>        </developer>    </developers>    <scm>        <connection>            https://github.com/CodeSTD/spring-cxf-annotation-support.git        </connection>        <developerconnection>            https://github.com/CodeSTD/spring-cxf-annotation-support.git        </developerconnection>    </scm>    <properties>        <junit.version>4.12</junit.version>        <spring.version>4.2.4.RELEASE</spring.version>        <cxf.version>3.1.3</cxf.version>    </properties>    <dependencies>        <dependency>            <groupid>junit</groupid>            <artifactid>junit</artifactid>            <version>${junit.version}</version>            <scope>test</scope>        </dependency>        <dependency>            <groupid>org.springframework</groupid>            <artifactid>spring-context</artifactid>            <version>${spring.version}</version>        </dependency>        <dependency>            <groupid>org.apache.cxf</groupid>            <artifactid>cxf-rt-frontend-jaxws</artifactid>            <version>${cxf.version}</version>        </dependency>        <dependency>            <groupid>org.apache.cxf</groupid>            <artifactid>cxf-rt-transports-http-jetty</artifactid>            <version>${cxf.version}</version>        </dependency>        <dependency>            <groupid>org.springframework</groupid>            <artifactid>spring-test</artifactid>            <version>${spring.version}</version>        </dependency>        <dependency>            <groupid>log4j</groupid>            <artifactid>log4j</artifactid>            <version>1.2.14</version>            <scope>test</scope>        </dependency>        <dependency>            <groupid>org.slf4j</groupid>            <artifactid>slf4j-log4j12</artifactid>            <version>1.7.7</version>            <scope>test</scope>        </dependency>    </dependencies></project></code>
定義Schema
<code class="language-xml hljs "><!--{cke_protected}{C}%3C!%2D%2D%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%20standalone%3D%22no%22%3F%2D%2D%3E--><xsd:schema attributeformdefault="unqualified" elementformdefault="qualified" targetnamespace="http://www.codestd.com/schema/std/ws" xmlns="http://www.codestd.com/schema/std/ws" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsd="http://www.w3.org/2001/XMLSchema">    <xsd:import namespace="http://www.springframework.org/schema/beans">    <xsd:annotation>        <xsd:documentation><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%20Namespace%20support%20for%20the%20annotation%20provided%20by%20cxf%20framework.%20%5D%5D%2D%2D%3E--></xsd:documentation>    </xsd:annotation>    <xsd:element name="annotation-endpoint">        <xsd:complextype>            <xsd:complexcontent>                <xsd:extension base="beans:identifiedType">                    <xsd:attribute name="name" type="xsd:string" use="optional">                        <xsd:annotation>                            <xsd:documentation><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%20Name%20of%20bean.%20Insted%20of%20id%20%5D%5D%2D%2D%3E--></xsd:documentation>                        </xsd:annotation>                    </xsd:attribute>                    <xsd:attribute name="package" type="xsd:string" use="optional">                        <xsd:annotation>                            <xsd:documentation><!--{cke_protected}{C}%3C!%2D%2D%5BCDATA%5B%20Pakeage%20to%20scan.%20%5D%5D%2D%2D%3E--></xsd:documentation>                        </xsd:annotation>                    </xsd:attribute>                </xsd:extension>            </xsd:complexcontent>        </xsd:complextype>    </xsd:element></xsd:import></xsd:schema></code>

關於Sechma的知識此處不再贅述,不會用的小夥伴們需要先去瞭解下。sechma位置在src/main/resources/META-INF/schema/stdws-1.0.xsd。

定義註解
package com.codestd.spring.cxf.annotation;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * 用於暴露WebService服務,通過在類上加入{@code @Endpoint}註解實現服務暴露的目的。 * 

擴充Spring的Bean掃描功能,在Bean上加入此註解後會自動註冊到Spring容器中。 * @author jaune(WangChengwei) * @since 1.0.0 */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Endpoint { /** * 此Endpoint在Spring容器中的ID * @return */ String id(); /** * 服務發布的地址,應神略伺服器位址及連接埠號碼和項目路徑 * @return */ String address(); }

在Spring中的配置

開啟“Window”–“Preferences”–“XML”–“XML Catalog”。點擊“Add”,然後在Location中選擇我們上面建立的xsd。“Key type”選擇Namespace Name,key輸入http://www.codestd.com/schema/std/ws/stdws-1.0.xsd。即Sechma中定義的targetNamespace+檔案名稱。
在Spring中加入命名空間,並使用標籤,如下。這裡要用到Spring的註解掃描功能。

<code class="language-xml hljs "><!--{cke_protected}{C}%3C!%2D%2D%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%2D%2D%3E--><beans xmlns="http://www.springframework.org/schema/beans" xmlns:std="http://www.codestd.com/schema/std/ws" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd        http://www.codestd.com/schema/std/ws        http://www.codestd.com/schema/std/ws/stdws-1.0.xsd">    <std:annotation-endpoint package="com.codestd.spring.cxf.ws"></std:annotation-endpoint></beans></code>

在配置中定義了要掃描的包,不依賴與context的配置。

到此準備工作基本結束。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.