`
zzc1684
  • 浏览: 1231251 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

Spring Webservice实现过程

阅读更多

1、创建service接口

 

package com.liul.test.spring_ws_test.service;

 

public interface SayHello {
 public String sayHello(String name);
}

 

2、创建接口实现(一定要加上service注解)

 

package com.liul.test.spring_ws_test.service.impl;

 

import org.springframework.stereotype.Service;

 

import com.liul.test.spring_ws_test.service.SayHello;
@Service
public class SayHelloImpl implements SayHello {

 

 public String sayHello(String name) {
  // TODO Auto-generated method stub
  return name+":Hello!";
 }

 

}

 

3、创建endpoint

 

package com.liul.test.spring_ws_test.ws;

 

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

 

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ws.server.endpoint.annotation.Endpoint;
import org.springframework.ws.server.endpoint.annotation.PayloadRoot;
import org.springframework.ws.server.endpoint.annotation.RequestPayload;
import org.springframework.ws.server.endpoint.annotation.ResponsePayload;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;

 

import com.liul.test.spring_ws_test.service.SayHello;

 

@Endpoint
public class SayHelloEndPoint {
 public static final String NAMESPACE_URI="http://www.liul.com/sayHello";
 public static final String REQUEST_LOCAL_NAME="sayRequest";
 public static final String RESPONSE_LOCAL_NAME = "sayResponse";
 private final SayHello service;
 private final DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
 @Autowired
 public SayHelloEndPoint(SayHello service) {
  this.service = service;
 }
 @PayloadRoot(localPart=REQUEST_LOCAL_NAME,namespace=NAMESPACE_URI)
 @ResponsePayload

 public Element handleRequest(@RequestPayload Element requestElement) throws ParserConfigurationException{
     NodeList children = requestElement.getChildNodes();
         Text requestText = null;
         for (int i = 0; i < children.getLength(); i++) {
             if (children.item(i).getNodeType() == Node.TEXT_NODE) {
                 requestText = (Text) children.item(i);
                 break;
             }
         }
         if (requestText == null) {
             throw new IllegalArgumentException("Could not find request text node");
         }
         String echo = service.sayHello(requestText.getNodeValue());

 

         DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
         Document document = documentBuilder.newDocument();
         Element responseElement = document.createElementNS(NAMESPACE_URI, RESPONSE_LOCAL_NAME);
         Text responseText = document.createTextNode(echo);
         responseElement.appendChild(responseText);
         return responseElement;
 }
}
4、定义schema,say.xsd文件

 

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="qualified"
        targetNamespace="http://www.liul.com/sayHello"
        xmlns:tns="http://nouse.org">
    <element name="sayRequest" type="string"/>

 

    <element name="sayResponse" type="string"/>
</schema>

 

5、修改web.xml

 

    <servlet>
        <servlet-name>spring-ws</servlet-name>
        <servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class>
        <init-param>
            <!-- Transform the location attributes in WSDLs -->
            <param-name>transformWsdlLocations</param-name>
            <param-value>true</param-value>
        </init-param>
    </servlet>

 

    <!-- Map all requests to this servlet -->
    <servlet-mapping>
        <servlet-name>spring-ws</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

 

6、配置spring-ws-servlet.xml文件

 

<?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:sws="http://www.springframework.org/schema/web-services"
 xmlns:context="http://www.springframework.org/schema/context"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/web-services http://www.springframework.org/schema/web-services/web-services-2.0.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

 

 <description>
  This web application context contains Spring-WS beans. The beans defined
  in this context are automatically
  detected by Spring-WS, similar to the way Controllers are picked up in Spring
  Web MVC.
    </description>
 <context:component-scan base-package="com.liul.test.spring_ws_test" />
 <sws:annotation-driven />
 <sws:interceptors>
  <bean
   class="org.springframework.ws.soap.server.endpoint.interceptor.PayloadValidatingInterceptor">
   <description>
    This interceptor validates both incoming and outgoing message contents
    according to the 'echo.xsd' XML
    Schema file.
            </description>
   <property name="schema" value="/WEB-INF/say.xsd" />
   <property name="validateRequest" value="true" />
   <property name="validateResponse" value="true" />
  </bean>
  <bean
   class="org.springframework.ws.server.endpoint.interceptor.PayloadLoggingInterceptor">
   <description>
    This interceptor logs the message payload.
            </description>
  </bean>
 </sws:interceptors>
 <sws:dynamic-wsdl id="say" portTypeName="Echo"
  locationUri="http://localhost:8080/abcd">
  <sws:xsd location="/WEB-INF/say.xsd" />
 </sws:dynamic-wsdl>
</beans>

 

至此,服务器端配置完成

 

要点:

 

1、endpoint类的NAMESPACE_URI与客户端请求文件的xmlns值一致(sayRequest.xml)

 

     示例定义为:http://www.liul.com/sayHello

 

2、endpoint里的REQUEST_LOCAL_NAME要和客户端请求文件的根标记一致

 

     示例定义为:sayRequest

 

3、客户端的defaultUri必须是可访问的web工程路径

 

      示例定义为:http://localhost:8080/abcd

4、注:在spring-ws-servlet.xml配置的sws:dynamic-wsdl可不用配置,只是用来在浏览器中查看wsdl,不影响webservice访问

 

客户端的请求文件(sayRequest.xml)

 

<?xml version="1.0" encoding="UTF-8"?>
<sayRequest xmlns="http://www.liul.com/sayHello">dabao大宝</sayRequest>         

 

客户端代码

 

package org.springframework.ws.samples.echo.client.sws;

 

import java.io.IOException;
import javax.xml.transform.Source;

 

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.Resource;
import org.springframework.ws.client.core.support.WebServiceGatewaySupport;
import org.springframework.xml.transform.ResourceSource;
import org.springframework.xml.transform.StringResult;

 

public class EchoClient extends WebServiceGatewaySupport {

 

    private Resource request;

 

    public void setRequest(Resource request) {
        this.request = request;
    }

 

    public void echo() throws IOException {
        Source requestSource = new ResourceSource(request);
        StringResult result = new StringResult();
        getWebServiceTemplate().sendSourceAndReceiveToResult(requestSource, result);
        System.out.println();
        System.out.println("response1:"+result);
        System.out.println();
    }

 

    public static void main(String[] args) throws IOException {
        ApplicationContext applicationContext =
                new ClassPathXmlApplicationContext("applicationContext.xml", EchoClient.class);
        EchoClient echoClient = (EchoClient) applicationContext.getBean("sayClient");
        echoClient.echo();
    }

}

分享到:
评论

相关推荐

    axis2+spring webservice

    标题中的“axis2+spring webservice”指的是使用Apache Axis2框架与Spring框架集成来开发Web服务。Apache Axis2是Java环境中广泛使用的Web服务引擎,它提供了高性能、灵活且可扩展的架构。Spring框架则是一个全面的...

    Spring_WebService源码

    其契约优先的开发模式,使得服务的定义和实现更加清晰,同时与Spring框架的无缝集成,让整个开发过程更加高效。通过学习和掌握Spring WebService,开发者可以轻松地在分布式系统中构建可靠且可扩展的Web服务。

    spring webservice参考.pdf

    Spring WebService旨在简化Web服务的开发过程,它支持WSDL(Web Services Description Language)第一和第二版,提供了从Java接口到WSDL的自动生成,以及从WSDL到Java代码的逆向工程。它主要基于Apache CXF和JAX-WS...

    使用spring远程调用服务端接口实现WebService功能

    在Java EE平台上,Spring框架提供了一种强大的方式来实现远程服务调用,特别是通过其HttpInvokerServiceExporter组件来实现基于HTTP的WebService功能。这个技术允许客户端和服务端通过HTTP协议进行通信,实现远程...

    Apache CXF2+Spring2.5轻松实现WebService

    Apache CXF是一个开源的服务框架,它允许开发人员创建和消费各种Web服务。结合Spring框架,可以轻松地在Java应用程序中...在阅读提供的文档“CXF2+Spring25.doc”时,读者将更深入地了解这一集成过程的细节和最佳实践。

    spring webService1.51官方指南[pdf]

    这是因为服务接口是首先定义的,因此在实现过程中如果接口发生变化,也更容易进行调整而不影响其他部分。 **2.3.2 性能** 由于 Contract-First 方法强调了服务接口的重要性,因此在实现过程中可以更好地优化性能。...

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

    本教程将详细讲解如何将Web Service服务接口与Spring框架进行整合,以便在实际开发中实现高效、灵活的服务提供。 首先,让我们了解一下Web Service的基本概念。Web Service是一种软件系统,它通过使用开放标准(如...

    cxf+spring实现webservice

    在结合CXF和Spring实现Web Service的过程中,主要有以下几个关键知识点: 1. **配置Spring**:首先,我们需要在Spring的配置文件中定义CXF的Bean。这通常包括`JAXWSServerFactoryBean`或`JAXRSServerFactoryBean`,...

    cxf+spring webservice demo client

    【标题】:“cxf+spring webservice demo client” 在IT领域,Web服务是一种常见的系统间交互方式,它允许不同应用程序之间共享数据和服务。本示例是关于如何使用Apache CXF和Spring框架创建一个Web服务客户端的...

    XFire整合spring webservice

    **XFire整合Spring WebService详解** XFire是一个Java Web服务框架,它允许开发者轻松地创建和部署Web服务。Spring框架则是Java开发中的一个核心组件,主要用于处理依赖注入、AOP(面向切面编程)以及应用上下文...

    cxf+spring webservice server demo

    这意味着该项目不仅包括了服务端的实现,而且可能需要配合一个单独的客户端来完成完整的交互过程。在实际应用中,客户端通常用于调用由服务器提供的Web服务接口。 【标签】"cxf+spring webservice server"进一步...

    在Spring工程里利用CXF实现webservice的demo

    在Spring工程中,利用Apache CXF实现Web服务(WebService)是一项常见的任务,它允许应用程序通过网络交换数据和服务。本教程将深入探讨如何在Spring环境中集成并使用CXF来创建一个简单的WebService示例。 首先,...

    webservice xfire整合spring(webservice配置采用注解)例子

    3. **注解配置Web服务**:在Spring中,我们可以使用`@WebService`、`@WebServiceRef`等注解来声明Web服务接口和服务实现。例如,`@WebService`标记接口为Web服务,`@WebServiceClient`用于定义客户端代理,`@...

    Spring集成axis2实现webservice所用到的包

    2. **创建WebService**:在Spring中,可以通过定义一个实现了特定接口的类来创建Web服务。这个接口通常对应于服务的WSDL契约,而实现类则包含了实际的服务逻辑。 Axis2提供了`ServiceStub`类,可以帮助我们与服务...

    spring webService hibernate结合xfire

    标题 "spring webService hibernate结合xfire" 描述了一个整合技术的应用,即Spring、Web服务(WebService)和Hibernate框架与Xfire的结合。在这个项目中,开发者可能想要创建一个基于Java的Web服务,该服务能够利用...

    xfire+spring webservice

    总的来说,XFire与Spring的结合为Java开发者提供了一种强大而灵活的方式来创建和管理Web服务,同时也简化了服务的测试和调试过程。这种集成方式尤其适合那些已经使用Spring作为基础架构的企业应用,因为它能够保持...

    CXF2.7+Spring3 Java WebService 集成用例

    在这个集成案例中,我们利用Spring 3的注解来声明服务的实现类和Bean定义,例如`@WebService`,`@Component`,`@Autowired`等,这些注解减少了XML配置的需求。 5. **创建Java WebService**: 使用CXF的`@...

    在自己的项目中利用axis2+spring发布webservice与客户端调用包括session

    标题中的“在自己的项目中利用axis2+spring发布webservice与客户端调用包括session”指出的是一个关于在实际项目开发中如何使用Axis2和Spring框架来发布Web服务,并且涉及了Web服务客户端调用以及会话(session)...

    WebService验证与Spring整合

    本文将深入探讨如何将WebService验证与Spring框架整合,以实现高效、安全的服务调用。 首先,让我们理解什么是WebService。WebService是一种基于开放标准(如SOAP、WSDL和UDDI)的,可以跨越不同操作系统、编程语言...

    CXF+Spring+Hibernate实现WebService

    **WebService实现**:在CXF的帮助下,我们可以通过以下步骤实现一个WebService: 1. **定义服务接口**:首先,我们需要定义一个Java接口,包含要暴露给客户端的方法。 2. **创建服务实现**:然后,实现该接口,具体...

Global site tag (gtag.js) - Google Analytics