【发布时间】:2010-08-23 13:55:06
【问题描述】:
我有两个 webapp:一个 web 服务客户端和一个服务器(都基于 CXF,使用 Simple Front-End 方法)。
这是服务器定义:
<simple:server id="server" bindingId="http://schemas.xmlsoap.org/soap/"
address="/thingy" transportId="http://schemas.xmlsoap.org/soap/"
serviceName="cs:thingyService"
serviceClass="com.mycompany.thingy.api.service.ThingyService"
endpointName="cs:thingyServicePort">
<simple:serviceBean>
<bean class="com.mycompany.thingy.server.service.ThingyServiceDelegate">
<property name="thingyService" ref="thingyService"></property>
</bean>
</simple:serviceBean>
<simple:dataBinding>
<bean class="org.apache.cxf.aegis.databinding.AegisDatabinding" />
</simple:dataBinding>
<simple:binding>
<soap:soapBinding version="1.1" mtomEnabled="true" />
</simple:binding>
</simple:server>
这里是客户:
<http-conf:conduit name="*.http-conduit">
<http-conf:client AllowChunking="false" />
</http-conf:conduit>
<simple:client id="thingyService" wsdlLocation="${wsdl.url}?wsdl"
serviceName="cs:thingyService"
endpointName="cs:thingyServicePort"
transportId="http://schemas.xmlsoap.org/soap/"
address="${wsdl.url}"
bindingId="http://schemas.xmlsoap.org/soap/"
serviceClass="com.mycompany.thingy.api.service.ThingyService">
<simple:dataBinding>
<bean class="org.apache.cxf.aegis.databinding.AegisDatabinding" />
</simple:dataBinding>
<simple:binding>
<soap:soapBinding mtomEnabled="true" version="1.1" />
</simple:binding>
</simple:client>
我有一个名为 ThingyService 的接口(名称已更改...),客户端和服务器都知道,上面的客户端定义创建了一个可以使用此接口注入的代理客户端。
当两个 web 应用程序都运行时,一切都运行良好,特别是当我先部署服务器然后部署客户端时。但是当服务器 webapps 没有正确启动时,客户端 webapp 会陷入无限循环,试图从不存在的 WSDL 创建代理。
基本上我想要的是一个围绕服务代理的代理,它让调用在服务可用时通过,并在服务关闭时引发足够的异常,我可以捕获并显示“抱歉,我们”重新脱机”页面,并在 Web 服务再次可用时恢复服务。我可以通过构建过程以静态形式访问 WSDL(通过 cxf maven 插件自动生成),因此我可以将其用于初始配置,因此从这个角度来看,我独立于服务器。
是否有人对如何实现此功能有任何指示?服务器是tomcat。在生产过程中,Web 应用程序可能会或可能不会部署到同一台服务器上。后端使用spring/jpa/cxf,前端使用spring/wicket。
【问题讨论】:
标签: java web-services spring soap cxf