spring-ws服务端和简单的eclipse生成的webservice 客户端 示例
文章分类:Java编程
spring -ws是基于契约先行(contract first)的原则实现的web service。
自从JDK1.5的annotation出现以后,我偏向于写注解而不写xml,所以我在项目中尽量写注解来替代xml
闲话少说。动手做。
必备包:spring.jar ; spring-ws-1.5.8-all.jar ; wsdl4j-1.6.1.jar ; spring-mvc-2.5.6.jar;
XmlSchema-1.4.3.jar ; commons-logging-1.1.1.jar
spring-ws是契约先行,先写wsdl文件的内容,然后生成所需要的java类。
而wsdl是由包含请求和返回以及数据xsd文件,使用spring-ws生成的。
这里演示一个简单的spring-ws
一个人客户端输入自己的卡号,返回这个人的所有信息。
xsd文件(workerInfo.xsd)
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="
http://www.w3.org/2001/XMLSchema
"
xmlns:tns="
http://ajjws.com/schemas/workerinfo
"
elementFormDefault="qualified"
targetNamespace="
http://ajjws.com/schemas/workerinfo
">
<!--查询请求,输入的是一个字符串的证件号码CardNo-->
<xs:element name="WorkerRequest">
<xs:complexType>
<xs:all>
<xs:element name="CardNo" type="xs:string" />
</xs:all>
</xs:complexType>
</xs:element>
<!--数据返回,返回的是一个WorkerInfo数据类型-->
<xs:element name="WorkerResponse">
<xs:complexType>
<xs:all>
<xs:element name="WorkerResponse" type="tns:WorkerInfo" />
</xs:all>
</xs:complexType>
</xs:element>
<!--WorkerInfo数据类型其实就是一个Java类,由下面几个属性组成-->
<xs:complexType name="WorkerInfo">
<xs:sequence>
<xs:element name="id" type="xs:long"></xs:element>
<xs:element name="cardNo" type="xs:string"></xs:element>
<xs:element name="workerName" type="xs:string"></xs:element>
<xs:element name="workerSex" type="xs:string"></xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>
对于spring-ws要配置的地方有
web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance
" xmlns="
http://java.sun.com/xml/ns/javaee
" xmlns:web="
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd
" xsi:schemaLocation="
http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd
" id="WebApp_ID" version="2.5">
<display-name>ajjws</display-name>
<servlet>
<servlet-name>ajjws</servlet-name>
<servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>
<init-param>
<param-name>transformWsdlLocations</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ajjws</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
ajjws-servlet.xml:(名称和web.xml的servlet-name相同)
<?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
"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
">
<!--对com.ajjws下的包里的类自动扫描,从而不用定义文件中bean,在类中使用@Service@component等-调用时候使用@Resource或者@AutoWired->
<context:annotation-config/>
<context:component-scan base-package="com.ajjws"/>
<!--指定xsd文件的地址-->
<bean id="schemaCollection" class="org.springframework.xml.xsd.commons.CommonsXsdSchemaCollection">
<property name="xsds">
<list>
<value>/WEB-INF/xsds/workerInfo.xsd</value>
</list>
</property>
<property name="inline" value="true"/>
</bean>
<bean class="org.springframework.ws.server.endpoint.adapter.GenericMarshallingMethodEndpointAdapter">
<constructor-arg ref="marshaller" />
</bean>
<!--利用Jaxb2实现xml到Java的转换-->
<bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="contextPath" value="com.ajjws.beans" />
</bean>
<!--申明我们用注解来实现请求和Endpoint的映射对应-->
<bean class="org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping"/>
<!--通过xsd文件定义wsdl-->
<bean id="ajjws" class="org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition">
<property name="schemaCollection" ref="schemaCollection" />
<property name="portTypeName" value="Ajj" />
<property name="locationUri" value="
http://localhost:8080/ajjws/services
" />
<property name="targetNamespace" value="
http://ajjws.com/definitions
" />
</bean>
</beans>
安装jaxb eclipse插件,在xsd文件上点右键,选择jaxb2.1->run xjc
运行后会在com.ajjws.bean包下通过xsd文件生成的java类
如下所示:
Endpoint:(AjjwsEndpoint.java 响应web service的请求的文件)
package com.ajjws.ws;
import javax.annotation.Resource;
import org.springframework.ws.server.endpoint.annotation.Endpoint;
import org.springframework.ws.server.endpoint.annotation.PayloadRoot;
import com.ajjws.beans.ObjectFactory;
import com.ajjws.beans.WorkerInfo;
import com.ajjws.beans.WorkerRequest;
import com.ajjws.beans.WorkerResponse;
import com.ajjws.service.AjjService;
/**
* @author wyf
*
*/
@Endpoint
public class AjjwsEndpoint {
@Resource
private AjjService ajjService;//需配置自动扫描bean
@Resource
private ObjectFactory objectFactory;
@PayloadRoot(localPart="WorkerRequest",namespace="
http://ajjws.com/schemas/workerinfo
")
public WorkerResponse getWorkInfo(WorkerRequest request) {
WorkerResponse response=objectFactory.createWorkerResponse();
WorkerInfo workerInfo=ajjService.getWorkInfo(request.getCardNo());
response.setWorkerResponse(workerInfo);
return response;
}
}
AjjService.java:
package com.ajjws.service;
import com.ajjws.beans.WorkerInfo;
public interface AjjService {
/**
* 获取证件信息
*/
public WorkerInfo getWorkInfo(String cardNo);
}
AjjServiceImpl.java
package com.ajjws.service;
import org.springframework.stereotype.Service;
import com.ajjws.beans.WorkerInfo;
/**
* @author wyf
*
*/
@Service("ajjService")
public class AjjServiceImpl implements AjjService {
public WorkerInfo getWorkInfo(String cardNo) {
//此处仅为演示,为加入数据库
System.out.println(cardNo);
WorkerInfo worker=new WorkerInfo();
worker.setCardNo("1234");
worker.setId(1);
worker.setWorkerName("wyf");
worker.setWorkerSex("男");
return worker;
}
}
客户端使用eclipse本身自带的生成web service client
点击finish,通过wsdl生成客户端所需要的Java类
结构如下
客户端调用代码:
package com.ajjSearch.web;
import java.rmi.RemoteException;
import org.springframework.ws.client.core.support.WebServiceGatewaySupport;
import com.ajjws.definitions.AjjProxy;
import com.ajjws.schemas.workerinfo.WorkerInfo;
import com.ajjws.schemas.workerinfo.WorkerRequest;
import com.ajjws.schemas.workerinfo.WorkerResponse;
public class WsClient extends WebServiceGatewaySupport{
public static void main(String[] args) throws RemoteException {
doSomething();
}
public static void doSomething() throws RemoteException{
WorkerRequest wreq=new WorkerRequest("1111");
WorkerResponse wres=new AjjProxy().getAjj().worker(wreq);
System.out.println(wres.getWorkerResponse());
WorkerInfo wi=wres.getWorkerResponse();
System.out.println(wi.getCardNo()+" "+wi.getId()+" "+wi.getWorkerName()+" "+wi.getWorkerSex());
}
}
发表评论
-
Spring DAO层的设计思想
2011-02-11 12:47 1942概述 【IT168 专 ... -
Spring 框架的设计理念与设计模式分析
2010-12-14 13:36 1747Spring 框架的设计理念 ... -
Spring WS Annotation
2010-11-25 19:44 979Package org.springframework.w ... -
Spring 3.0 基于 Annotation 的依赖注入实现
2010-11-25 19:38 689使用 @Repository、@Service、@Contro ... -
Spring
2010-09-20 14:25 899Spring Security 优劣 ...
相关推荐
Spring Integration + Spring WS 整合 在 Java 领域中,Spring Integration 和 Spring WS 是两个常用的框架,它们分别负责集成系统和 Web 服务。今天,我们将探讨如何将这两个框架整合在一起,实现一个完整的 Web ...
Spring WS 是一个基于Java的轻量级Web服务框架,专注于创建和消费SOAP消息。这个框架在1.5.8版本中提供了对WS-I基本Profile的支持,增强了与其他SOAP服务的互操作性。它允许开发者以声明式的方式定义Web服务,简化了...
**Spring WS 小示例** Spring Web Service (Spring WS) 是一个用于构建 SOAP Web 服务的框架,它基于 Spring 框架,提供了一种声明式的方法来处理 Web 服务的创建、部署以及消费。本示例将带你了解如何利用 Spring ...
这个压缩包“springWS.zip”显然包含了与Spring Web服务相关的开发资源。以下是对Spring WS及其在接口开发中的应用的详细解释: 1. **什么是Spring WS**: Spring WS是一种轻量级的、灵活的Web服务框架,它基于...
Spring WS 2.0是Spring框架为构建基于SOAP(Simple Object Access Protocol)的Web服务提供的一种解决方案,它允许开发人员创建强类型、基于合同的Web服务。下面将详细阐述Spring WS 2.0在用户同步中的应用及其相关...
在这个实例中,我们关注的是如何使用Spring WS 2.0来实现SSO。Spring WS是Spring框架的一个扩展,专注于提供基于SOAP协议的Web服务。版本2.0带来了许多改进,包括更强大的安全特性,这使得它成为构建SSO解决方案的...
**Spring WS:构建Web服务** Spring Web Services (Spring WS) 是一个用于创建SOAP Web服务的框架,它基于Spring框架,提供了强大的支持来构建和消费Web服务。本教程将引导你了解如何利用Spring WS来开发、部署和...
Spring-WS 是一个基于Spring框架的轻量级Web服务开发库,主要专注于SOAP协议,用于构建面向服务架构(SOA)中的提供者和服务消费者。它提供了强大的数据绑定、消息验证和契约优先的开发方法,使得开发者能够以XML ...
Spring WS 是一个强大的Java库,专门用于构建基于SOAP(简单对象访问协议)的Web服务。它为开发人员提供了一个简洁的API,使得在Spring框架内创建和消费Web服务变得更为容易。Spring WS的核心特性包括契约优先的方法...
Spring Web Services(Spring-WS)是Spring框架的一个模块,它为构建基于SOAP的消息服务提供了一种轻量级的编程和配置模型。本文主要介绍了Spring Web Services的基本概念、为什么选择契约先行(Contract First)的...
Spring-WS是一个基于Java的轻量级Web服务框架,它专注于提供SOAP协议的支持,用于创建和消费Web服务。本示例代码将展示如何利用Spring-WS进行Web服务的开发和调用,涉及到的关键技术包括XSD(XML Schema Definition...
具体功能 It is the source code for spring. it include spring xml config, spring secutity, spring core, spring oxm tiger.
spring-ws 最新版本Demo 是一个maven项目,导入时以maven导入就可以运行 已通过测试
这是spring-ws官方参考文档,我用谷歌翻译成中文,最后关于https和spring-security等相关内容没有翻译,适合没什么webservice基础Java开发人员参考使用
原来的jax-ws不知道为什么总是不成功,最后放弃,换成这个。具体过程可以参考官网:http://docs.spring.io/spring-ws/site/reference/html/tutorial.html
Spring-WS 是一个基于Java的轻量级Web服务框架,专为创建SOAP(Simple Object Access Protocol)服务而设计。这个框架允许开发人员以声明式的方式定义消息契约,并提供了基于XML Schema的强类型消息处理。本资源包含...
### Spring Web Services (Spring WS)概述与核心技术解析 #### 一、Spring Web Services 简介 ##### 1.1 引言 Spring Web Services(简称Spring WS)是Spring框架的一部分,专注于提供一种简单的方式来创建健壮且...
spring-ws-1.5.6-sources.jar,spring-ws-1.5.6-all-sources.jar
Spring-WS 是一个基于 Java 的轻量级 Web Service 框架,专注于 SOAP 协议。这个框架使得开发者能够创建符合 W3C 标准的、契约优先的 Web Service 应用程序。在本篇文章中,我们将深入探讨如何使用 Spring-WS 实现 ...