`
xiangxingchina
  • 浏览: 520501 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring-ws服务端和简单的eclipse生成的webservice 客户端 示例

阅读更多

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-ws搭建WebService服务端demo

    总结起来,本示例展示了如何使用Spring、Spring-WS和Maven构建一个简单的Web Service服务端。从定义XML Schema到创建服务接口、实现业务逻辑、配置Spring-WS Servlet,每一个步骤都是为了使Web Service能够正确地...

    Spring Webservice Demo(含客户端)

    1. **Spring-WS核心概念**:在Spring-WS中,服务端通常通过XML Schema定义其接口,然后Spring-WS会自动生成一个处理XML消息的Endpoint。这个Endpoint对应于WSDL中的操作。在本示例中,可能有一个或多个XML Schema...

    JAX-WS + Spring 实现webService示例

    通过Spring,我们可以轻松地集成Web Service客户端和服务端,并且管理其生命周期。 **创建Web Service** 1. **定义服务接口**:首先,我们需要定义一个Java接口,该接口将代表Web Service的契约。接口中的方法将...

    springboot+webservice搭建webservice服务端及使用java客户端两种方式进行调用webservice接口

    总结,本教程详细介绍了如何利用Spring Boot和Apache CXF搭建Web Service服务端,以及使用JAX-WS的`javax.xml.ws.Service`和Apache CXF的`JaxWsProxyFactoryBean`两种方式实现Java客户端调用。这些技能对于开发者来...

    使用cxf和spring开发基于https的webservice服务端以及客户端样例

    本示例将详细介绍如何使用Apache CXF和Spring框架来开发基于HTTPS的安全Web服务,包括服务端和客户端的实现。 Apache CXF是一个开源的Java框架,它支持创建和消费各种Web服务,包括SOAP和RESTful API。而Spring框架...

    webservice服务端和客户端实践

    1. `conf`目录可能包含了服务端和客户端的配置文件,如Spring配置文件,用于配置CXF的服务发布和客户端消费。 2. 在服务端,可能包含服务的bean定义,如服务实现类的bean,以及服务发布配置。 3. 客户端配置可能包括...

    Spring ws 小示例

    具体到这个压缩包文件 `SpringWebService`,可能包含了完整的 Spring WS 示例项目,包括服务端和客户端的源代码,你可以通过解压并导入到 IDE 中运行来进一步学习。 通过这个小示例,你可以掌握 Spring WS 的基本...

    springboot整合CXF发布webservice和客户端调用

    它允许开发者以Java注解或XML方式定义服务接口,并提供了丰富的客户端和服务端工具。 3. **整合过程** - 首先,我们需要在`pom.xml`中添加CXF和SpringBoot的相关依赖。 - 创建一个服务接口,使用JAX-WS注解如`@...

    webService简单示例及开发文档

    总结,"webService简单示例及开发文档"旨在引导开发者理解并实践Java中的Web服务开发,通过实例和文档,可以掌握从创建、部署到调用Web服务的全过程。"TheService.rar"可能是包含更复杂示例或工具的压缩包,进一步...

    spring-ws-cxf-server.rar

    本项目"spring-ws-cxf-server.rar"是一个综合性的示例,展示了如何利用Spring框架、Apache CXF、MyBatis以及MySQL数据库,构建一个能够处理XML和JSON格式数据的服务器端工程,并实现客户端的交互访问。接下来,我们...

    MyEclipse6_5上基于JAX-WS开发Webservice(中文示例)

    这是一个非常实用的指南,旨在帮助开发者快速掌握Webservice的创建、部署和测试过程,特别适合初学者及有一定经验的Java程序员。 1. **MyEclipse 6.5**: MyEclipse是一款强大的集成开发环境(IDE),它是Eclipse...

    webservice

    在本例中,它可能是通过Spring-WS创建的一个简单的WebService示例,用于展示如何在Spring框架中设置和调用WebService。 “zai myeclipse加上jar,可以直接运行的”这部分意味着,项目是在MyEclipse集成开发环境中...

    发布webService服务接口与spring整合教程

    在提供的压缩包文件“webService服务接口方案”中,可能包含了具体的代码示例、配置文件和其他参考资料,这些都可以帮助你更好地理解和实践上述步骤。记得根据自己的项目需求进行适当的修改和调整。同时,参考其他...

    android webservice 客户端、服务端实例

    本实例将深入探讨如何构建一个Android Web Service客户端和服务端,并提供可直接运行的代码示例。以下是对这两个重要组件的详细说明。 **一、Android Web Service客户端** 在Android客户端,通常使用HTTP库来调用...

    webservice cxf 服务端客户端传递参数的例子demo

    总结,这个例子是一个很好的学习资源,它覆盖了CXF框架下Web服务端和客户端的创建、参数传递、测试等核心知识点。对于初学者而言,通过实践这个demo,可以深入理解Web服务的工作原理,以及CXF框架的使用方式。在实际...

    spring-webservice-example

    "spring-webservice-example"项目恰好为我们提供了一个基于Spring框架构建Web服务的实例,这将帮助我们深入理解Spring如何处理Web服务的创建和交互。以下是对该项目的详细解析。 首先,我们要明确的是,Web服务是一...

    webservice+spring的一个小例子

    服务端可能包含一个`@WebService`注解的接口和对应的实现类,而客户端则会有一个`Service`类,通过`wsimport`工具生成,用于实例化并调用服务。 在实际应用中,Spring框架的其他特性也可以与Webservice集成,例如...

    cxf_spring 服务端和客户端demo

    【标题】"cxf_spring 服务端和客户端demo"主要涵盖了使用Apache CXF与Spring框架结合实现Web服务(Web Service)的示例。Apache CXF是一个开源的Java框架,它用于构建和开发服务端和客户端的Web服务,而Spring框架则...

    Spring 实现webService

    Spring框架提供了两种主要的方式来实现Web服务:Spring-WS和Spring-Integration的Web服务支持。在这个场景中,描述中提到的是基于Apache Axis的实现,这可能涉及到Spring与Apache Axis的集成,Axis是一个流行的SOAP...

    CXF webservice 示例工程(集成spring)

    CXF会自动处理这些复杂类型的序列化和反序列化,使得服务端和客户端之间能够顺利交换数据。 综上所述,这个CXF Webservice示例工程涵盖了Spring集成、Web服务安全、大文件传输优化以及不同类型数据的处理,是学习和...

Global site tag (gtag.js) - Google Analytics