同一项目下两个webservice冲突的问题
首先看下javax.xml.ws.spi.Provider的API:
public static Provider provider()
创建一个新的提供者对象。
用于查找将要使用的提供者子类的算法由以下几个步骤组成:
• 如果存在名为 META-INF/services/javax.xml.ws.spi.Provider 的资源,则它的第一行(如果存在)被用作实现类的 UTF-8 编码名称。
• 如果存在 $java.home/lib/jaxws.properties 文件,可以通过 java.util.Properties.load(InputStream) 方法读取它,并且该文件包含键为 javax.xml.ws.spi.Provider 的条目,则该条目的值被用作实现类的名称。
• 如果定义了名为 javax.xml.ws.spi.Provider 的系统属性,则它的值被用作实现类的名称。
• 最后,使用默认的实现类名称。
从中可以看出,比如一项目下有JBoss webservice和CXF,就会出现冲突,如何让这两个共存呢?比如我的项目是个老项目,里面是JBoss webservice,我不肯能删除它的jar包,但又要用CXF,怎么办?
下面列出我的实践步骤(可能会有更好的方法):
1. 创建一个XXXProvider extends Provider
2. 将CXF的lib/endorsed目录打开,反编译geronimo-jaxws_2.2_spec-1.1.jar(有源码更好),将CXF重写的Provider类内容copy到XXXProvider
3. 注掉public abstract ServiceDelegate createServiceDelegate(URL paramURL, QName paramQName, Class<? extends Service> paramClass);
4. Copy java的FactoryFinder类到XXXProvider下,修改find方法下的serviceId,
String serviceId = "META-INF/services/" + factoryId;,可以改成区别于这个目录的,不改仍会冲突,我的就直接改成String serviceId = factoryId;
5. 打开 cxf-2.5.2.jar copy META-INF/services/目录下的javax.xml.ws.spi.Provider文件放到src下
6. 将通过CXF生成的客户端文件Service 文件,比如我的ContentService.java,修改其构造方法,如下:
public ContentService(URL wsdlLocation, QName serviceName) throws Exception {
super(wsdlLocation, serviceName);
//下面是修改的,通过反射
ServiceDelegate delegate = FTVPProvider.provider().createServiceDelegate(wsdlLocation,
serviceName, this.getClass());
Field field = this.getClass().getSuperclass().getDeclaredField("delegate");
field.setAccessible(true);
field.set(this, delegate);
}
7. 项目下需要的jar包:cxf-2.5.2.jar,geronimo-jaxws_2.2_spec-1.1.jar,neethi-3.0.1.jar,wsdl4j-1.6.2.jar,xmlschema-core-2.0.1.jar
贴上这个blog其实就是把自己经历的记录下来,以后碰到的话可做个参考,大家有什么好的方法,可以贴上来,一起学习下,或者我的方法有什么问题,大家也请指教。
分享到:
相关推荐
【标题】"Web服务(WebService)实现:两个数相加" 在IT领域,Web服务是一种通过互联网进行应用程序间通信的技术。这里的"Web服务实现:两个数相加"是指利用Web服务技术来创建一个简单的功能,即接收两个数字并返回...
本项目以"webservice 第一个小项目"为主题,将带你入门Java实现的WebService技术。 首先,我们需要了解WebService的基本概念。WebService是一种基于开放标准(如XML、SOAP、WSDL和UDDI)的互联网协议,它能够使应用...
在websphere8.5 下部署含有CXFwebservice的war包无法正常启动,...归根结底原因不是找不到类,而是发布后war下的jar与websphere自身平台下的jar冲突了,要解决此问题就要通过在websphere下建立共享库来根除,可参考附件
命名空间是解决命名冲突的重要机制,特别是在多个服务共享同一XML Schema的情况下。在本案例中,涉及到的命名空间包括`xxx.xxx.bean`和`xxx.xxx.service`。在生成客户端代理类时,正确处理命名空间对于避免类名冲突...
【WebService实例项目】是一个以Apache CXF框架为基础的示例工程,它展示了如何创建和使用Web服务。Apache CXF是一个开源的、强大的Web服务框架,它支持SOAP、RESTful等多种Web服务标准,并提供了丰富的功能来简化...
本文将深入探讨如何利用这两个技术来发布多个WebService,并着重讲解项目管理和整合过程。 首先,让我们了解两个核心组件。Axis2是Apache软件基金会开发的一个Web服务引擎,它提供了一个灵活且高性能的架构,用于...
本项目“可用的WebService项目”提供了一个已经测试过的实例,其中包含了详细的解释文档,用户下载后可直接运行,这极大地简化了开发流程。该项目特别使用了Apache CXF框架,它是一个开源的Java框架,专门用于构建和...
这是一个包含简单登录和查询的Web项目,内附有一个表sql文件和两个java项目。 WS_WebService是服务端,是一个Web项目,先启动它,进入的登录页面的链接为:http://localhost:8080/WS_WebService/ wsdl的进入链接为:...
下面将详细讲解如何使用MyEclipse创建一个WebService项目服务端,以及涉及的关键知识点。 首先,创建一个新项目是第一步。在MyEclipse中,选择"File" -> "New" -> "Dynamic Web Project",输入项目名称并设置相关...
PowerBuilder12.5做的webservice发布到iis上面遇到的问题以及解决办法
在"压缩包子文件的文件名称列表"中提到的"WebserviceDemo"可能是这个问题的示例代码或演示项目。通过分析这个项目,我们可以更具体地定位问题所在。例如,查看客户端如何创建服务代理,调用方法以及传递参数;检查...
要实现Flash调用WebService,首先我们需要在Flash中创建一个ActionScript 3.0(AS3)项目。AS3是Flash中的编程语言,它支持与服务器进行HTTP通信,包括SOAP(Simple Object Access Protocol)协议,这是大多数...
java开发过程中,很多地方都会遇到数据传递,远程获取数据问题,我这个简单的webservice接口发布可以在java开发过程中,很多地方都会遇到数据传递,远程获取数据问题,我这个简单的webservice接口发布可以在
webservice常见问题及解决: 一、 VS中创建Web服务项目。 二、 WebService生成发布 三、 网站发布 四、 故障及解决方法 五、 如何访问WebService 六、 Win 7下的WebService
以下是一个详细的过程,指导你在Web项目中新增或添加Web服务。 **一、Web服务基础** 1. **Web服务的概念**:Web服务是一种基于互联网的软件应用程序,通过标准协议(如HTTP)提供数据和服务。它可以被其他应用程序...
同样地,我们需要调整这个测试项目所使用的 Tomcat 服务器的端口,以避免与已发布的 WebService 端口冲突。然后,在项目中创建一个 WebService 客户端,输入之前发布的 WebService 的 WSDL 地址,并选择要测试的方法...
本教程将详细介绍如何在Idea中实现一个简单的WebService实例。 【描述】:通过Idea实现webservice涉及到的主要步骤包括设置项目、创建服务接口、编写服务实现、部署和测试。下面我们将逐一解析这些步骤: 1. **...
这个基于XFire的WebService项目,可能是为了演示如何利用XFire框架来构建和部署Web服务,以及如何与其他系统进行交互。 【描述】:虽然描述为空,但我们可以推断,这个项目可能包括了以下几个关键步骤和概念: 1. ...
3. **部署WebService**:在MyEclipse中,可以通过右键点击项目,选择"New -> Other -> Web Service -> Dynamic Web Project"来创建一个动态Web项目。然后,将WebService接口和实现添加到该项目,并配置服务发布。 4...
- 这一步完成后,系统会自动生成两个文件:`SOAP_Department.h` 和 `SOAP_Department.cpp`,用于后续的调用操作。 ##### 2. 配置HTTP连接 在生成的`SOAP_Department.cpp`文件中,需要对HTTP连接进行配置: ```cpp...