Descripción breve
Este tutorial presenta principalmente cómo extender la configuración XML de Spring para que Spring pueda reconocer nuestro esquema y anotación personalizados.
Las funciones que queremos implementar aquí son las siguientes: Primero, deje que Spring reconozca la siguiente configuración.
<STD: anotación-endpoint />
La función para implementar en esta configuración es que después de la configuración, Spring puede escanear nuestra anotación personalizada @Endpoint. Y publicar automáticamente los servicios de servicio web de acuerdo con las anotaciones. La función no se implementa completamente, y como un tutorial para extender la primavera, juega un papel en la atraer a Jade.
Crea un proyecto
Primero, debe crear un proyecto Java, y aquí usa Maven para crear un proyecto rápido (Proyecto Java Normal).
El contenido del archivo POM es el siguiente
<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.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0. http://maven.apache.org/xsd/maven-4.0.0.xsd "> <ModelVersion> 4.0.0 </modelversion> <MoupRid> com.codestd </groupid> <artifactId> Spring-CXF-Annotation-Support </artifactid> <versión> 1.0.0-snapshot </versión> <name> $ {Project.ArtifactId} </name> <Scuidion> Permite que su proyecto publique WebService a través de anotaciones, basadas en la encapsulación Spring+CXF, sin intrusión API. </descripción> <url> https://github.com/codestd/spring-cxf-annotation-support </url> <licencias> <licencia> <name> la licencia de apache, versión 2.0 </name> <url> http://www.apache.org/licenses/license-2.0.txt </sl> </licensive> </ licencias> <velopers> <velopeler> <name> jaune (wangchengwei) </name> <icloalic> [email protected] </orma correal> <nombro> /role></roles><timezone>GMT+8</timezone></developer></developers><scm><connection>https://github.com/CodeSTD/spring-cxf-annotation-support.git</connection><developerConnection>https://github.com/Cod estd/spring-cxf-annotation-support.git </desarrolloConnection> </scm> <properties> <Junit.version> 4.12 </junit.version> <spring.version> 4.2.4.Release </spring.version> <cxf.version> 3.1.3 </cxf.version> </prope rties> <Spendencies> <Spendency> <MoupRid> Junit </groupid> <artifactid> Junit </arfactid> <versers> $ {Junit.version} </verversion> <cope> test </cope> </pendency> <Spendency> <ProupID> org.springFramework </grocO upID> <artifactid> spring-Context </arfactid> <ververy> $ {spring.version} </versión> </pendency> <pendency> <proupid> org.apache.cxf </groupid> <artifactid> cxf-rt-frontend-Jaxws </arfactiD> <Version> $ {cx F.Version} </versión> </pendency> <epardency> <grupid> org.apache.cxf </groupid> <artifactid> cxf-rt-transports-http-jetty </artifactid> <versión> $ {cxf.version} </versión> </dependencia> <dependency> <grupid> org.springframework </groupid> <artifactId> spring-test </arfactid> <ververyS> $ {spring.version} </verversion> </pendency> <pendency> <proupid> log4J </proupid> <artifactid> log4j </artifactid> <versers ersion> <cope> test </cope> </pepertency> <epardency> <grupid> org.sslf4j </uproupid> <arfactid> slf4j-log4j12 </arfactid> <versión> 1.7.7 </versión> <cope> test </pope> </pendency> </ject>>Esquema de definición
<? xml versión = "1.0" encoding = "utf-8" standalone = "no"?> <xsd: schema xmlns = "http://www.codestd.com/schema/std/ws" xmlns: xsd = "http://www.w3.org/2001/xmlschema" xmlns: beans = "http://www.springframework.org/schema/beans" TargetNamespac e = "http://www.codestd.com/schema/std/ws" elementFormdefault = "calificado" atributeFormDefault = "no calificado"> <xsd: import Namespace = "http://www.springframework.org/schema/beans"/> <xsd: anotación> <xsd: documentación> <! [CDATA [Soporte de espacio de nombres para la anotación proporcionada por CXF Framework. ]]> </xsd: documentación> </xsd: anotación> <xsd: elemento name = "Annotation-endpoint"> <xsd: complextype> <xsd: complejContent> <xsd: extension = "frijoles: identificado type"> <xsd: atremit name = "name" type = "xsd: string" Use = "Opcional"> <xsd: anotación> <xsd: documentación> <! [CDATA [Nombre de Bean. Insted de id]]> </xsd: documentación> </xsd: anotación> </xsd: attribute> <xsd: attribute name = "paquete" type = "xsd: string" use = "opcional"> <xsd: annotation> <xsd: documentación> <! [Cdata [pakeage to escane. ]]> </xsd: documentación> </xsd: anotación> </xsd: atributo> </xsd: extensión> </xsd: complejContent> </xsd: complextype> </xsd: elemento> </xsd: esquema>
El conocimiento sobre Sechma no se describirá aquí. Los amigos que no saben cómo usarlo necesitan aprender primero al respecto. La ubicación de SECHMA está en SRC/Main/Resources/Meta-Inf/Schema/STDWS-1.0.XSD.
Anotación de definición
paquete com.codestd.spring.cxf.annotation; import java.lang.annotation.documented; import java.lang.annotation.elementType; import java.lang.annotation.retention; import java.lang.annotation.annotation El propósito de la exposición al servicio al agregar {@code @Endpoint} anotación a la clase. * <P> Extienda la función de escaneo de frijoles de la primavera. Después de agregar esta anotación al frijol, se registrará automáticamente en el contenedor de resorte. *@author jaune (wangchengwei)*@since 1.0.0*/ @target (elementtype.type) @Retention (retentionPolicy.runtime) @documentedpublic @interface endpoint {/*** La identificación de este punto de finalización en el contenedor de Spring* @return*/string id ();/*** La dirección del servicio está publicada, la dirección de puerto, el puerto y el número de proyecto* DIRECCIÓN();}Configuración en primavera
Abra "Ventana", "Preferencias", "XML", "Catálogo XML". Haga clic en "Agregar" y luego seleccione el XSD que creamos anteriormente en la ubicación. "Tipo de clave" Seleccione Nombre del espacio de nombres e ingrese la clave en http://www.codestd.com/schema/std/ws/stdws-1.0.xsd. Es decir, el nombre de archivo TargetNamespace+ definido en SechMa.
Agregue espacios de nombres en primavera y use etiquetas de la siguiente manera. Aquí necesitamos usar la función de escaneo de anotación de Spring.
<? xml versión = "1.0" encoding = "utf-8"?> <frijoles xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-in Estado "xmlns: std =" http://www.codestd.com/schema/std/ws "xsi: schemalocation =" http: //www.springframew ork.org/schema/Beansshttp://www.springframework.org/schema/Beans/spring-Beans-4.0.xsdhttp://www.cod estd.com/schema/std/wshttp://www.codestd.com/schema/std/ws/stdws-1.0.xsd"><std:annotation-endpoint paquete = "com.codestd.spring.cxf.ws"/> </beans>
El paquete a escanear se define en la configuración y no depende de la configuración con el contexto.
Lo anterior es el esquema de configuración personalizado de Spring Extensible (1) compartido por el editor. Espero que sea útil para todos.