`

Spring WS

阅读更多

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 Integration + Spring WS 整合

    Spring Integration + Spring WS 整合 在 Java 领域中,Spring Integration 和 Spring WS 是两个常用的框架,它们分别负责集成系统和 Web 服务。今天,我们将探讨如何将这两个框架整合在一起,实现一个完整的 Web ...

    spring ws1.5.8所有最新开发包及文档及实例

    Spring WS 是一个基于Java的轻量级Web服务框架,专注于创建和消费SOAP消息。这个框架在1.5.8版本中提供了对WS-I基本Profile的支持,增强了与其他SOAP服务的互操作性。它允许开发者以声明式的方式定义Web服务,简化了...

    Spring ws 小示例

    **Spring WS 小示例** Spring Web Service (Spring WS) 是一个用于构建 SOAP Web 服务的框架,它基于 Spring 框架,提供了一种声明式的方法来处理 Web 服务的创建、部署以及消费。本示例将带你了解如何利用 Spring ...

    springWS.zip

    这个压缩包“springWS.zip”显然包含了与Spring Web服务相关的开发资源。以下是对Spring WS及其在接口开发中的应用的详细解释: 1. **什么是Spring WS**: Spring WS是一种轻量级的、灵活的Web服务框架,它基于...

    webservice用户同步代码spring ws 2.0

    Spring WS 2.0是Spring框架为构建基于SOAP(Simple Object Access Protocol)的Web服务提供的一种解决方案,它允许开发人员创建强类型、基于合同的Web服务。下面将详细阐述Spring WS 2.0在用户同步中的应用及其相关...

    单点登录实例spring ws 2.0

    在这个实例中,我们关注的是如何使用Spring WS 2.0来实现SSO。Spring WS是Spring框架的一个扩展,专注于提供基于SOAP协议的Web服务。版本2.0带来了许多改进,包括更强大的安全特性,这使得它成为构建SSO解决方案的...

    spring-ws:Spring WS教程

    **Spring WS:构建Web服务** Spring Web Services (Spring WS) 是一个用于创建SOAP Web服务的框架,它基于Spring框架,提供了强大的支持来构建和消费Web服务。本教程将引导你了解如何利用Spring WS来开发、部署和...

    spring-ws demo

    Spring-WS 是一个基于Spring框架的轻量级Web服务开发库,主要专注于SOAP协议,用于构建面向服务架构(SOA)中的提供者和服务消费者。它提供了强大的数据绑定、消息验证和契约优先的开发方法,使得开发者能够以XML ...

    spring.ws webservice

    Spring WS 是一个强大的Java库,专门用于构建基于SOAP(简单对象访问协议)的Web服务。它为开发人员提供了一个简洁的API,使得在Spring框架内创建和消费Web服务变得更为容易。Spring WS的核心特性包括契约优先的方法...

    spring-ws-reference.pdf

    Spring Web Services(Spring-WS)是Spring框架的一个模块,它为构建基于SOAP的消息服务提供了一种轻量级的编程和配置模型。本文主要介绍了Spring Web Services的基本概念、为什么选择契约先行(Contract First)的...

    spring-ws开发/调用webservice示例代码

    Spring-WS是一个基于Java的轻量级Web服务框架,它专注于提供SOAP协议的支持,用于创建和消费Web服务。本示例代码将展示如何利用Spring-WS进行Web服务的开发和调用,涉及到的关键技术包括XSD(XML Schema Definition...

    spring-ws-1.0-m2-minimal.zip_The Tiger_spring_spring ws

    具体功能 It is the source code for spring. it include spring xml config, spring secutity, spring core, spring oxm tiger.

    spring-ws-demo-master

    spring-ws 最新版本Demo 是一个maven项目,导入时以maven导入就可以运行 已通过测试

    spring-ws 中文文档

    这是spring-ws官方参考文档,我用谷歌翻译成中文,最后关于https和spring-security等相关内容没有翻译,适合没什么webservice基础Java开发人员参考使用

    spring web service 官网示例 基于spring-ws

    原来的jax-ws不知道为什么总是不成功,最后放弃,换成这个。具体过程可以参考官网:http://docs.spring.io/spring-ws/site/reference/html/tutorial.html

    spring-ws源码,例子,及reference

    Spring-WS 是一个基于Java的轻量级Web服务框架,专为创建SOAP(Simple Object Access Protocol)服务而设计。这个框架允许开发人员以声明式的方式定义消息契约,并提供了基于XML Schema的强类型消息处理。本资源包含...

    spring webservices reference

    ### 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-sources.jar,spring-ws-1.5.6-all-sources.jar

    使用 Spring-WS 完成的 Web Service (SOAP)

    Spring-WS 是一个基于 Java 的轻量级 Web Service 框架,专注于 SOAP 协议。这个框架使得开发者能够创建符合 W3C 标准的、契约优先的 Web Service 应用程序。在本篇文章中,我们将深入探讨如何使用 Spring-WS 实现 ...

Global site tag (gtag.js) - Google Analytics