- 浏览: 276853 次
文章分类
最新评论
-
guji528:
oracle的统计函数真的很强大
Oracle 使用LAG和LEAD函数统计 -
haiyangyiba:
受教了
No Dialect mapping for JDBC type: 3 -
elvishehai:
能不能给个完整点的例子呀,我一直都没有试成功过,
简单的使用jackson的annotation -
miaoyue:
如果我想把name属性转成注释之后,之前的注释还在怎么做?
PowerDesigner 中将Comment(注释)及Name(名称)内容互相COPY的VBS代码 -
ianl_zt:
以上方法只适合在hibernate2中使用,现在hiberna ...
Hibernate的批量更新和删除
如果大家只是想了解如何写jaxws:endpoint 配置文件,可以直接跳到 3 jaxws:endpoing进行阅读.
0. 预备知识
如果你想了解CXF是如何与Spring进行集成的,首先你需要下载CXF代码,编译,然后生成相关的Eclipse工程文件。
具体的步骤在CXF wiki 上有说明
1. 基本原理
CXF采用的是Spring2.0提供的一个新接口就是扩展的NamespaceHandler。通过注册相关的NamespaceHandler以及xsd,在Spring处理到对应Namespace下的XML元素时将会调用NamespaceHandler中注册的Parser来进行处理。
瞧是不是挺简单的。
具体代码位置 Project: cxf-rt-frontend-jaxws
源代码 src/main/java Package org.apache.cxf.jaxws.spring
测试 src/test/java Package org.apache.cxf.jaxws.spring
schema: jaxws.xsd src/main/resources schemas
2. jaxws namespace
在jaxws.xsd中,你将看到有关 jaxws:endpoint, jaxws:server, jaxws:client的定义。
这里需要说明的内容有三点:
- jaxws的target namespace是 http://cxf.apache.org/jaxws,由于目前CXF还处于incubating 的状态,没有cxf.apache.org这个域名。为了能让Spring来进行xml文档校验的时候能够获得jaxws.xsd,Spring提供了一种通过ClassPath中获得jaxws.xsd方法。具体步骤如下就是在META-INF中添加spring.schema的方式将jaxws.xsd与对应的URI进行绑定,同时也需要将NamespaceHandler注册进Spring中。
- jaxws:endpoint 与 jaxws:server是对等的,他们都是对Web Services 服务端的描述。只是在JAXWS RI在最初的实现过程中,对于Server端的配置是通过Endpoint来进行描述的,而且JAXWS API也定义了Endpoint,因此为了保持与JAXWS API的一致性,在这里设置了jaxws:endpoint。
- jaxws front end 与 simple front end之间的关系。 CXF除了提供JAXWS 的实现,也延续Xfire的风格提供了简单POJO Web Services的实现前端 simple front end。Jaxws front end 继承了simple front end的绝大部分方法,它与simple front end 的最大不同就是提供了Web Services Meta data (JSR 181)的支持,提供从Annotation中获取Web Services的能力。对于 jaxws:server 以及 jaxws:client 你可以在 simple front end中找到对应的 simple:server , simple:client。
3. jaxws:endpoint示例
我们知道Spring为我们提供了一个很好的Dependence Injection的容器,我们可以通过XML在不修改任何Java Code的情况下,通过配置改变Spring beans 之间的属性。下面是endpoint的 schema,我们将结合schema向大家介绍有关spring的配置和使用。
- <xsd:schema xmlns="http://cxf.apache.org/jaxws"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:beans="http://www.springframework.org/schema/beans"
- xmlns:cxf-beans="http://cxf.apache.org/configuration/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- targetNamespace="http://cxf.apache.org/jaxws"
- elementFormDefault="qualified"
- attributeFormDefault="unqualified" >
- <xsd:import namespace="http://www.springframework.org/schema/beans" schemaLocation="http://www.springframework.org/schema/beans/spring-beans.xsd"/>
- <xsd:import namespace="http://cxf.apache.org/configuration/beans" schemaLocation="http://cxf.apache.org/schemas/configuration/cxf-beans.xsd"/>
- <xsd:element name="endpoint">
- <xsd:complexType>
- <xsd:complexContent>
- <xsd:extension base="beans:identifiedType">
- <xsd:all>
- <xsd:element name="binding" type="xsd:anyType" minOccurs="0" />
- <xsd:element name="dataBinding" type="xsd:anyType" minOccurs="0" />
- <xsd:element name="executor" type="xsd:anyType" minOccurs="0" />
- <xsd:element name="features" type="xsd:anyType" minOccurs="0" />
- <xsd:element name="implementor" type="xsd:anyType" minOccurs="0" />
- <xsd:element name="inInterceptors" type="xsd:anyType" minOccurs="0" />
- <xsd:element name="inFaultInterceptors" type="xsd:anyType" minOccurs="0" />
- <xsd:element name="invoker" type="xsd:anyType" minOccurs="0" />
- <xsd:element name="outInterceptors" type="xsd:anyType" minOccurs="0" />
- <xsd:element name="outFaultInterceptors" type="xsd:anyType" minOccurs="0" />
- <xsd:element name="properties" type="beans:mapType" minOccurs="0" />
- <xsd:element name="schemaLocations" type="schemasType" minOccurs="0" />
- <xsd:element name="serviceFactory" type="xsd:anyType" minOccurs="0" />
- <!---->xsd:all>
- <xsd:attributeGroup ref="cxf-beans:beanAttributes" />
- <xsd:attribute name="address" type="xsd:string" />
- <xsd:attribute name="bindingUri" type="xsd:string" />
- <xsd:attribute name="bus" type="xsd:string" />
- <xsd:attribute name="implementor" type="xsd:string"/>
- <xsd:attribute name="implementorClass" type="xsd:string"/>
- <xsd:attribute name="publish" type="xsd:boolean" default="true"/>
- <xsd:attribute name="endpointName" type="xsd:QName" />
- <xsd:attribute name="serviceName" type="xsd:QName" />
- <xsd:attribute name="wsdlLocation" type="xsd:string" />
- <!---->xsd:extension>
- <!---->xsd:complexContent>
- <!---->xsd:complexType>
- <!---->xsd:element>
- <!---->xsd:schema>
这里设置的endpoint中的很多子元素都定义成为了 xsd:anyType, 这是为了能通过原有Spring bean的方式来初始化具体的实例。例如: implementor 这个子元素。
xml 代码
- <jaxws:endpoint id="inlineImplementor" address="http://localhost:8080/simpleWithAddress">
- <jaxws:implementor>
- <bean class="org.apache.hello_world_soap_http.GreeterImpl">
- <property name="prefix" value="hello" />
- <!---->bean>
- <!---->jaxws:implementor>
- <!---->jaxws:endpoint>
当然对于properties来说,就是采用了spring中内建的Map类型的支持,具体的使用实例如下:
- <jaxws:endpoint id="withProerties" implementor="org.apache.hello_world_soap_http.GreeterImpl" address="http://localhost:8080/simpleWithAddress">
- <jaxws:properties>
- <entry key="Content-Type" value="text/plain" />
- <entry>
- <key>
- <value>javax.xml.stream.XMLInputFactory<!---->value>
- <!---->key>
- <ref bean="mappedXMLInputFactory"/">
- <!---->entry>
- <entry>
- <key>
- <value>javax.xml.stream.XMLOutputFactory<!---->value>
- <!---->key>
- <ref bean="mappedXMLOutputFactory"/">
- <!---->entry>
- <!---->jaxws:properties>
- <!---->jaxws:endpoint>
好现在看一下如何配置属性(attribute) jaxws:endpoint 也提供了对 implementor描述的属性, 当我们将 implementor定义成为一个java class时我们可以这样写
- <jaxws:endpoint id="implementor" implementor="org.apache.hello_world_soap_http.GreeterImpl" address="http://localhost:8080/simpleWithAddress"/>
<jaxws></jaxws>
当我们考虑将implementor定义成为一个bean的引用,就应该写成
<jaxws></jaxws>xml 代码
- <jaxws:endpoint id="implementor" implementor="#GreeterImpl" address="http://localhost:8080/simpleWithAddress"/>
这里再讲一下endpointName和serviceName的写法,大家可以看到这两个属性的类型都是Qname
- <jaxws:endpoint id="withEndpiontName" implementor="org.apache.cxf.jaxws.service.Hello" endpointname="e:HelloEndpointCustomized" servicename="s:HelloServiceCustomized" address="http://localhost:8080/test" />
<jaxws></jaxws>
4. EndpointDefinitionParser
看了上面的jaxws:endpoint 示例,大家可能会向CXF是如何将这些XML文件映射成为具体的 Jaxws Endpoint 呢? 有心的朋友只要看一下 EndpointDefinitionParser 就能略知一二了。
请注意 EndpointDefinitionParser的构造函数,里面调用了setBeanClass(EndpointImpl.class);当当我们的要设置的主角终于登场了。 再则就是 protected void doParse(Element element, ParserContext ctx, BeanDefinitionBuilder bean),如果你要配置自己的Bean对象,就需要花点功夫在这个函数上面了。
今天的介绍先到这,有兴趣的朋友可以用同样的方法来研究有关 jaxws:server以及jaxws:client的具体实现,还有我会在后面的文章中介绍在CXF中有关doParser的更为复杂的实现。
发表评论
-
AnnotationFormatError when using Spring 3.0 & JavaConfig
2011-02-25 10:52 5781Spring 3.0M3 及其以后的版本包含 ... -
Spring Schemas and Namespaces
2010-05-11 11:34 5987本章研究Spring命名空间,你将学到新的并且更简单的办 ... -
Spring 中的一些事务注解属性
2010-01-11 10:36 4252用 spring 事务管理器, ... -
Spring 3.0呼之欲出
2009-10-28 10:20 3222业界最著名使用最广泛的开源Java框架Spring宣布推出3. ... -
Spring与SOA
2009-08-27 09:28 44731.引言 SOA是一种构造分布式系统的方法,它将业务应用功能 ... -
Spring 2.5新特性(2)-Spring MVC中的新特性
2009-08-20 11:06 3929Spring框架从创建伊始就 ... -
Spring 2.5的新特性(1):配置简化和基于注解的功能
2009-08-20 10:55 4088简介 从诞生之初,Spring框架就坚守它的宗旨:简化企业级 ... -
Spring 2.5新特性及架构图
2009-07-03 09:04 3666Spring2.5是Spring2.1各个里程碑版本的终结。 ... -
Spring 2.5.6新特性之packagesToScan
2009-07-03 08:58 3200如果你使用早前版本的Spring,又恰好采用了Annotati ... -
Spring2.5注解实现AOP
2009-07-02 11:33 3272这个例子非常的简单,下面是实体类 package test; ... -
图解Spring Security默认使用的过滤器
2009-06-15 11:03 3853首先看一下auto-config="tr ... -
使用 Spring 2.5 TestContext 测试框架
2009-04-29 16:41 3045Spring 2.5 TestContext 测试框架用于测试 ... -
Spring 2.5 Annotation
2009-04-07 11:44 3315基于注释(Annotation) ... -
spring 注解
2009-04-01 09:33 3077Spring JSR-250注解 注释配 ... -
Spring2.0用注解实现事务管理
2009-04-01 09:31 4414Spring2.0框架的事务处理有两大类: 1 编码式事务 ... -
Spring技巧之简洁配置
2009-01-09 11:08 3278Spring2.0在配置上调整了不少地方,增加更加灵活、简洁的 ... -
spring框架使用任务调度quartz的例子-TriggerListener 篇
2008-09-04 21:31 2581有时候我们的任务(Job)需要再某些任务完成之后 ... -
spring框架使用任务调度quartz的例子-Job and Trigger 篇
2008-09-04 21:21 2291MainJob.java 1package jobs; 2 ... -
基于struts+spring+ibatis的轻量级J2EE开发
2008-08-29 09:17 2106JpetStore 4.0是ibatis的最新示例程序,基于S ... -
关于IntrospectorCleanupListener
2008-08-15 10:28 3555spring中的提供了一个名为org.springframew ...
相关推荐
**services.xml**文件则是具体的Web服务配置,利用Spring的`<jaxws:endpoint>`元素来注册和配置CXF的服务端点。 ```xml <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=...
在IT行业中,Spring框架...2. **服务代理创建**:在Spring中,我们可以通过`<jaxws:client>`标签来创建CXF客户端代理。这个标签允许我们指定服务接口、地址以及其他配置属性。在XML配置文件中,可能类似如下: ```xml ...
CXF是一个流行的开源框架,用于创建和消费Web服务,而Spring框架则是一个强大的Java企业级应用开发平台。本教程将深入探讨如何结合CXF和Spring来构建一个简单的Java WebService。 首先,我们需要理解CXF的基本概念...
<artifactId>cxf-spring-boot-starter-jaxws <version>3.x.x ``` 请确保替换`3.x.x`为最新的CXF版本。同时,别忘了检查Spring Boot的版本与CXF的兼容性。 接下来,我们需要定义一个接口,该接口将作为我们的Web...
xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation=" http://cxf.apache.org/configuration/security http://cxf.apache.org/schemas/configuration/security.xsd ...
<artifactId>cxf-spring-boot-starter-jaxws <version>3.2.5 ``` 接下来,我们需要创建一个服务接口和其实现类。例如,我们可以定义一个名为`HelloService`的接口,然后实现这个接口: ```java import javax....
<artifactId>cxf-spring-boot-starter-jaxws <version>3.x.y ``` 这里的`3.x.y`应替换为当前最新的CXF版本。 接下来,我们需要创建一个Java接口,该接口定义了Web服务的操作。例如,我们创建一个名为`...
spring-jaxws-cxf 该项目展示了如何使用纯 Java 配置将 CXF Apache JAX-WS 实现与 Spring 集成的简单示例。 建造 mvn clean verify 配置 JavaConfiguration或XMLConfiguration可以与CXFServletConfiguration一起...
<artifactId>cxf-spring-boot-starter-jaxws <version>3.x.x.RELEASE ``` 这里`2.x.x.RELEASE`和`3.x.x.RELEASE`需要替换为实际的Spring Boot和CXF版本号。 接下来,我们需要创建一个CXF的Web服务接口。这个...
- **自动配置**:Spring Boot引入了CXF的AutoConfiguration,简化了配置过程。只需在项目中引入CXF的依赖,并在启动类上添加@EnableCxfClient注解,Spring Boot会自动识别并配置CXF客户端。 6. **测试和调试**: ...
<artifactId>cxf-spring-boot-starter-jaxws <version>3.4.4 ``` 接下来,创建一个简单的Java接口,作为我们的Web服务接口。例如: ```java import javax.jws.WebService; import javax.jws.soap.SOAPBinding...
<artifactId>cxf-spring-boot-starter-jaxws <version>3.4.4 ``` 2. **配置CXF**:在`application.properties`或`application.yml`中,我们可以设置CXF的相关属性,比如端口号、WS-地址等。 **二、创建Web服务*...
<artifactId>cxf-spring-boot-starter-jaxws <version>3.x.x ``` 确保版本号与你的Spring Boot版本兼容。 2. 定义Web服务接口:创建一个Java接口,声明你需要提供的Web服务方法。例如: ```java import javax....
Spring整合Apache CXF框架是为了构建高效、灵活的Web服务应用。CXF是一个开源的Web服务框架,它不仅支持SOAP和RESTful服务,还能与Spring框架深度集成,简化服务的开发和部署。 **服务端配置** 1. **创建动态Web...
对于 CXF 客户端,可以使用 CXF 的 `JAXWS-RI` 工具生成客户端代码,也可以手动创建客户端代理类。生成客户端代码的命令如下(替换 `<wsdl-url>` 为你的 WSDL 地址): ```bash java -jar cxf-codegen-plugin.jar ...
<artifactId>cxf-spring-boot-starter-jaxws <version>3.1.11 ``` 二、定义要发布的接口和实现类 下一步,我们需要定义要发布的接口和实现类。 首先,我们定义了一个AppService接口: ```java @WebService ...
<artifactId>cxf-rt-frontend-jaxws <version>3.1.6 <groupId>org.apache.cxf <artifactId>cxf-rt-transports-http</artifactId> <version>3.1.6 ``` 知识点三:编写业务代码 在编写业务代码时,需要创建一...
<artifactId>cxf-rt-frontend-jaxws <version>3.4.4 <groupId>org.apache.cxf <artifactId>cxf-rt-transports-http</artifactId> <version>3.4.4 ``` 如果你计划创建RESTful服务,还需要添加`cxf-rt-...
我们可以通过添加`cxf-spring-boot-starter-jaxws`依赖到项目中来启动这个过程。在`pom.xml`文件中添加如下依赖: ```xml <groupId>org.apache.cxf <artifactId>cxf-spring-boot-starter-jaxws <version>3.4.4...
- `cxf-spring-boot-starter-jaxws`:Apache CXF库提供了JAX-WS规范的实现,用于发布和消费WebService。 ```xml <groupId>org.springframework.boot <artifactId>spring-boot-starter-web-services ...