`
Frederick
  • 浏览: 117813 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

如何实现Spring管理下的不依赖于服务器端启动与否的WebService客户端

阅读更多

        最近在项目中遇到一种情况,就是两个程序需要使用WebService互通数据,有时系统A需要调用系统B提供的WebService服务,有时系统B需要调用系统A提供的WebService服务。

        我使用Spring 管理下的 Apache CXF 来实现WebService服务。现在遇到的问题是,Spring管理的WebService客户端使用org.apache.cxf.frontend.ClientProxyFactoryBean 的一个bean来实现,这个东西需要在配置文件中写死WebService服务器端的地址,当系统启动的时候,Spring就会尝试去访问这个地址,来初始化这个bean。这也就意味着客户端必须依赖与服务器端启动与否。

        在我遇到的场景下,也就是系统A要使用系统B提供的WebService服务,系统A必须等待系统B启动以后才能启动;系统B需要使用系统A提供的WebService服务,系统B必须等待系统A启动以后才能启动。这是一个死循环。

        那么,有没有什么办法,可以让WebService的客户端启动的时候,不必等待WebService的服务器端启动起来。而是在客户端真正去调用服务器端提供的服务的时候,才去尝试连接服务器?

        如果使用代码来实现客户端,似乎是有办法的。但是我想利用Spring提供的WebService支持以简化开发,在Spring管理下的客户端实现有没有什么办法解决这个问题?

        我相信很多朋友都遇到过类似的问题。我也真正研究中。等有结果了再写上来。

分享到:
评论
8 楼 LeeYee 2016-11-14  
对该webservice 在spring容器进行初始化时使用延迟加载 @Lazy
7 楼 ununreal 2008-01-30  
如果是使用CFX的前身XFire时,使用的FactoryBean是org.codehaus.xfire.spring.remoting.XFireClientFactoryBean,用以下配置:
<property name="lookupServiceOnStartup">
    <value>false</value>
</property>
达到启动Client端时不去访问对应的web service的服务端,我想这个属性在CFX中还有,具体lz可以看一下org.apache.cxf.frontend.ClientProxyFactoryBean的源代码。
6 楼 Frederick 2008-01-30  
引用

服务端中途断掉又连上呢?应该没有影响的吧,http无状态


我的经验是如果初始化的时候失败了,就必须重启服务器了。如果是初始化成功后,中间掉线,倒是没有问题。

问题是无法保证初始化的时候,服务器端是一定存在的。如果第一次需要访问WebService的时候,恰巧服务器端还没有启动起来,那么就挂了。幸好的是这种情况并不多见。
5 楼 daquan198163 2008-01-23  
服务端中途断掉又连上呢?应该没有影响的吧,http无状态

有人试过么?
4 楼 Frederick 2008-01-23  
引用

不过我觉得这样做太麻烦了,不如直接设定ClientProxyFactoryBean以及所有引用ClientProxyFactoryBean 的客户端bean都设定lazy-init="true",然后在getBean的时候注意捕获异常。感觉这样做比较符合常理,客户端只有在使用到的时候才初始化,因为不能保证服务端总是可用的。


这个正是我现在使用的方式,似乎也是目前最好的方式了。
3 楼 fenixshadow 2008-01-01  
不过我觉得这样做太麻烦了,不如直接设定ClientProxyFactoryBean以及所有引用ClientProxyFactoryBean 的客户端bean都设定lazy-init="true",然后在getBean的时候注意捕获异常。感觉这样做比较符合常理,客户端只有在使用到的时候才初始化,因为不能保证服务端总是可用的。
2 楼 fenixshadow 2008-01-01  
很好,很强大。
1 楼 jnn 2007-10-10  
CXF客户端在创建的时候需要获取WSDL来构建Service Model,而不是真正的要访问服务。所以要把你A,B两个服务的依赖循环解除,可以通过指定一个外部WSDL的方法来实现。<br/>
<br/>
<div class='code_title'>xml 代码</div>
<div class='dp-highlighter'>
<div class='bar'> </div>
<ol class='dp-xml' start='1'>
    <li class='alt'><span><span class='tag'>&lt;</span><span class='tag-name'>simple:client</span><span> </span><span class='attribute'>id</span><span>=</span><span class='attribute-value'>"client2"</span><span>   </span></span></li>
    <li class=''><span>    <span class='attribute'>serviceClass</span><span>=</span><span class='attribute-value'>"org.apache.cxf.service.factory.HelloService"</span><span>  </span></span></li>
    <li class='alt'><span>    <span class='attribute'>wsdlLocation</span><span> = </span><span class='attribute-value'>"file://somewhere"</span><span>  </span></span></li>
    <li class=''><span>    <span class='attribute'>serviceName</span><span>=</span><span class='attribute-value'>"s:XMLService"</span><span>  </span></span></li>
    <li class='alt'><span>    <span class='attribute'>xmlns:s</span><span>=</span><span class='attribute-value'>"http://apache.org/hello_world_soap_http"</span><span>  </span></span></li>
    <li class=''><span>    <span class='attribute'>endpointName</span><span>=</span><span class='attribute-value'>"s:XMLPort"</span><span>      </span></span></li>
    <li class='alt'><span>    <span class='attribute'>bindingId</span><span>=</span><span class='attribute-value'>"http://cxf.apache.org/bindings/xformat"</span><span class='tag'>&gt;</span><span>      </span></span></li>
    <li class=''><span>   <span class='tag'>&lt;/</span><span class='tag-name'>simple:client</span><span class='tag'>&gt;</span><span>  </span></span></li>
</ol>
</div>

相关推荐

    cxf开发webservice客户端和服务器端文档

    cxf开发webservice客户端和服务器端 cxf(Apache CXF)是一款开源的WebService框架,用于开发webservice客户端和服务器端。它提供了许多有用的功能,如自动生成服务桩、客户调用桩和WSDL文档等,使得开发webservice...

    C# WebService 客户端 服务器 Json

    本主题聚焦于C#中的WebService客户端和服务器的交互,以及如何利用Json进行数据交换。Json(JavaScript Object Notation)是一种轻量级的数据交换格式,因其易读性和易于编写而被广泛应用。 一、C# WebService简介 ...

    C++通过gSOAP开发WebService客户端.docx

    * soapClient.c:主要实现客户端远程接口。 * soapC.c:主要实现soap协议的底层封装,消息通信等。 * soapH.h:soap的序列和反序列代码,它已经包含了soapStub.h,服务器端与客户端都要包含它。 * XXXX.nsmap:名称...

    webservice客户端,整合spring

    只需在项目中引入CXF的依赖,并在启动类上添加@EnableCxfClient注解,Spring Boot会自动识别并配置CXF客户端。 6. **测试和调试**: 使用Spring的`@Test`注解配合Mockito或WireMock等工具进行单元测试。对于复杂的...

    C#.NET WebService 客户端+服务器

    本文将深入探讨"C#.NET WebService 客户端+服务器"的主题,介绍如何创建和调用Web服务,以及Web服务的三种访问方式。 首先,Web服务是一种基于标准协议(如SOAP和HTTP)的平台无关的通信机制,允许不同系统的应用...

    WebService客户端如何整合Spring

    首先,要在项目中实现Spring和WebService客户端的整合,必须确保正确引入了所有必需的JAR包,包括但不限于Spring的核心库以及支持WebService的相关库。随后,需要在`web.xml`文件中配置`ContextLoaderListener`监听...

    Linux 下 webservice c++ 服务器和客户端的实现demo

    Linux 下 webservice c++ 服务器和客户端的实现demo。先要部署webservice这是另外一回事,在我的博客里面有,这个demo,执行make就好了。如果不成功就把你安装soap(部署webservice要安装)时编译生成的soapcpp2拷贝...

    soapui生成webservice客户端代码

    soapui生成webservice客户端代码,比较详细的讲解了配置,以及生成客户端代码的步骤

    使用webservice实现客户端与服务器通信,

    在本示例中,“使用webservice实现客户端与服务器通信”是一个典型的跨平台通信场景,它涉及到两个关键部分:服务器工程和客户端工程。我们将深入探讨这两个部分以及它们如何通过SOAP(简单对象访问协议)进行通信。...

    webservice 客户端自动生成工具

    WebService客户端是调用这些服务的应用程序部分,而"WebService客户端自动生成工具"则是帮助开发者快速创建与WebService交互的代码的工具。在这种情况下,我们讨论的是一个使用Axis1.4批处理脚本来实现这个功能的...

    webservice客户端与服务器端的实现demo

    在XFire中,我们可以使用JAX-RPC(Java API for XML-based Remote Procedure Calls)或者JAX-WS(Java API for XML Web Services)来实现客户端和服务器端的交互。客户端通过调用服务器提供的WSDL描述文件生成对应的...

    webservice客户端简单实例

    启动服务器后,运行客户端应用程序,它将通过HTTP与远程WebService通信。 7. **错误处理和调试**:如果在调用过程中遇到问题,检查服务器日志,确认服务是否正确运行。同时,确保客户端的网络连接没有问题,并检查...

    Spring Webservice Demo(含客户端)

    这个"Spring Webservice Demo"包含了一个客户端,意味着它提供了一个完整的端到端示例,从服务端的创建到客户端的调用。让我们深入探讨一下这个示例项目可能包含的关键知识点。 首先,`Spring-WS`是Spring框架的一...

    webservice 客户端 服务端实例 代码

    WebService是一种基于XML的标准化方式,用于在不同的应用程序之间...总之,本实例涵盖了WebService的基本概念和Java环境下客户端、服务端的实现,通过阅读源代码和运行示例,可以深入理解WebService的工作原理和应用。

    C# WebService 客户端 服务器 Get Post

    在IT行业中,Web服务是一种通过网络提供功能的软件系统,其中C# WebService客户端和服务器是.NET框架下实现Web服务交互的重要组成部分。本篇将详细阐述C# WebService客户端和服务器如何利用GET和POST方法进行数据...

    Axis2生成webservice客户端通用依赖包

    Web服务客户端是能够调用Web服务的程序,通过SOAP(简单对象访问协议)或RESTful API与服务器端的Web服务进行交互。在Axis2框架下,生成Web服务客户端的过程相当直观,它可以帮助开发者自动创建所需的Java代码来调用...

    WebService客户端调用WebService服务示例代码——java

    WebService客户端调用WebService服务示例代码,java代码,纯手工,包括直接httpClient直接发送Saop报文调用和利用wsimport -keep 生成客户端代码后调用两种方式的示例。因涉及商务账户密码隐私,因此代码中的有些账号...

    WebService客户端

    在开发WebService客户端时,有几种常见的实现方式: 1. **SOAP(简单对象访问协议)客户端**:SOAP是WebService最原始的数据交换格式,它基于XML,提供了一种标准的请求-响应模型。开发者可以使用SOAP库,如Java的...

    xfire+webService 客户端和服务器端的例子

    xfire+webService 客户端和服务器端的例子 xfire-distribution-1.2.6.zip 是xfire的包,网上可以下载的,本人已经下载完毕。 另附两个xfire的配制文档,供大家参考。 XFire-WebService.pdf Xfire WebService...

    webservice客户端生成工具

    客户端生成工具是实现Web服务交互的关键组件,它能够帮助开发者自动创建与WebService接口进行通信的客户端代码,大大简化了开发流程。本文将详细介绍关于Web服务客户端生成工具的相关知识点。 1. **Web服务标准与...

Global site tag (gtag.js) - Google Analytics