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

xfire插件自动生成客户端代码后,调用时报错(已解决)

阅读更多
使用eclipes的xfire插件,生成了Webservice的客户端代码
在调用时,报错,具体代码如下
调用client的TestClient代码
	HelloWordServiceClient service=new HelloWordServiceClient();
		HelloWordServicePortType type=service.getHelloWordServiceHttpPort();
		System.out.println(type.sayHello("123"));


HelloWordServiceClient 类中的create0方法中报错,代码如下,错误行已在代码中标出:
/**
 * 
 *以下为出错的方法
 */

private void create0() {
        TransportManager tm = (org.codehaus.xfire.XFireFactory.newInstance().getXFire().getTransportManager());
        HashMap props = new HashMap();
        props.put("annotations.allow.interface", true);
        AnnotationServiceFactory asf = new AnnotationServiceFactory(new Jsr181WebAnnotations(), tm, new AegisBindingProvider(new JaxbTypeRegistry()));
        asf.setBindingCreationEnabled(false);
        service0 = asf.create((com.tongtech.bjvsp.client.HelloWordServicePortType.class), props);//此处出错,提示HelloWordServicePortType不能为抽象类
        {
            AbstractSoapBinding soapBinding = asf.createSoap11Binding(service0, new QName("http://webservicedemo.rubyeye.net", "HelloWordServicePortTypeLocalBinding"), "urn:xfire:transport:local");
        }
        {
            AbstractSoapBinding soapBinding = asf.createSoap11Binding(service0, new QName("http://webservicedemo.rubyeye.net", "HelloWordServiceHttpBinding"), "http://schemas.xmlsoap.org/soap/http");
        }
    }


报错信息如下:
Exception in thread "main" org.codehaus.xfire.annotations.AnnotationException: Service class cannot be abstract: com.tongtech.bjvsp.client.HelloWordServicePortType
at org.codehaus.xfire.annotations.AnnotationServiceFactory.assertValidImplementationClass(AnnotationServiceFactory.java:268)
at org.codehaus.xfire.annotations.AnnotationServiceFactory.create(AnnotationServiceFactory.java:177)
at org.codehaus.xfire.service.binding.ObjectServiceFactory.create(ObjectServiceFactory.java:284)
at com.tongtech.bjvsp.client.HelloWordServiceClient.create0(HelloWordServiceClient.java:59)
at com.tongtech.bjvsp.client.HelloWordServiceClient.<init>(HelloWordServiceClient.java:26)
at com.tongtech.bjvsp.testclient.TestClient.main(TestClient.java:14)


由于客户端的代码是自动生成,所以不知哪里有问题,还是我在写服务器端代码时出了错?
因为是根据wsdl生成的客户端代码,因此我认为服务端应该不存在问题。
本人对于xfire不是十分熟悉,希望指点一二,谢谢
分享到:
评论
2 楼 lrh165 2007-11-22  
好文章啊,对刚入门的人帮助太大了
1 楼 ioriyagami808 2007-05-31  
自己已解决(问题为xfire版本冲突),具体是这样的
xfire通过eclipse的software的find and install自动从网上找到最新版本的eclipse的xfire插件(http://dist.codehaus.org/xfire/update/).安装完毕后,使用其Code generation from WSDL document生成stub。其客户端生成后,需要选择生成后的置放路径。由于我之前在本地使用xfire建立客户端,xfire建立时导入了xfire1.1的jar包,当我再建立客户端试图测试访问本地webservice服务器端时,也将客户端的生成代码以及运行客户端所需要的jar包一同导入到同一工程中了,即自己建立的服务器端的工程中。此时,客户端运行所导入的xfire1.2.6和服务器端的xfire1.2.5版本不一致,导致以上问题。只是xfire提示的不是很明确

解决办法:

1.先建立一个java project,建立src和lib文件夹
2.使用xfire客户端生成工具生成stub,选择将生成代码置放到新建的工程中src下
3.不知为什么,xfire客户端生成工具生成时不能即时运行,提示缺少jar包,因此,再将commons-codec-1.3.jar和commons-httpclient-3.0.jar只放到lib中并在工程中引用
4.建立clientTest类,调用,测试成功。。
TestStubClient.java源码如下

package com.tongtech.bjvsp.stubClient;

import com.tongtech.webservice.client.HelloWordServiceClient;
import com.tongtech.webservice.client.HelloWordServicePortType;

public class TestStubClient {

	public static void main(String []args)
	{
		HelloWordServiceClient service=new HelloWordServiceClient();
		HelloWordServicePortType portType=service.getHelloWordServiceHttpPort();
		System.out.println(portType.sayHello("111"));
	}
}


运行后,显示结果。至此,访问WebService服务成功!!

使用ANT脚本方式生成stub也是一种办法,具体操作见我的另一篇blog

相关推荐

    xfire根据WSDL生成客户端代码

    使用XFire根据WSDL生成客户端代码,可以大大简化开发过程,因为它自动生成了与服务接口对应的Java类和代理。以下是具体步骤: 1. **安装和配置XFire**:首先,确保已经下载并安装了XFire库。你可以通过Maven或...

    xfire客户端生成

    在生成Java客户端代码后,调用Web服务的流程通常如下: 1. **初始化客户端**:创建服务接口的代理类实例,通常需要提供Web服务的URL。 2. **设置认证和配置**:如果Web服务需要身份验证或其他特定的HTTP头信息,...

    xfire客户端eclipse插件

    1. **自动代码生成**:插件能够自动生成服务客户端和服务器端的代码,大大减少了开发者的手动工作量。只需提供WSDL(Web服务描述语言)文件,插件就能生成相应的Java代理类,使得调用Web服务如同调用本地方法一样...

    xfire 插件 wsdl生成

    XFire提供了生成WSDL文件的功能,允许开发者从Java类或者接口自动生成对应的WSDL定义,以便于服务的发布和消费。 在描述中提到"工作的地方不能上网更新",这意味着在离线环境下使用XFire插件生成WSDL文件。在这种...

    webservice xfire 客户端调用实现

    2. 生成客户端代码:使用XFire的wsdl2java工具生成客户端代理类。 3. 创建客户端实例:在Java代码中创建代理类的实例,通常需要指定服务的地址。 4. 调用服务方法:通过代理类的方法调用远程服务,传递必要的参数。 ...

    Xfire客户端调用webservice jar包

    4. 在Xfire客户端代码中实例化并调用生成的代理类,传递必要的参数以执行Web服务操作。 5. 处理返回的结果,将数据展示或用于客户端逻辑。 在实际开发中,可能还需要考虑错误处理、安全性和性能优化等问题。例如,...

    Xfire的client.zip_Xfire客户端代码_webservice

    在本案例中,"Xfire的client.zip"是一个包含了Xfire客户端代码的压缩包,主要用于调用Web服务。 Xfire客户端代码是实现与Xfire服务器通信的代码库,它可能包含了多种语言的实现,如Java、C#或Python等。这些代码...

    用xfire的Eclipse_Plugin生成web服务的客户端.

    一旦WSDL文件被成功导入,XFire插件将自动生成与Web服务相关的客户端代码。这些代码通常包括接口定义、存根类和服务代理类等,可以直接用于调用Web服务。 #### 步骤四:测试和调用Web服务 最后,可以在Java项目中...

    Xfire 开发webservice与客户端调用教程与实例

    然后,实现这个接口并部署到服务器,Xfire会自动生成相应的WSDL文件,供客户端调用。 **3. 部署Web服务** Xfire允许你将Web服务部署到任何Servlet容器,如Tomcat。只需要将Xfire的库添加到项目的类路径中,然后在...

    xfire客户端包含所需要的jar

    它提供了全面的工具集,包括自动代码生成、强大的数据绑定和灵活的配置选项,使开发者能够快速地创建符合SOAP标准的Web服务。 标题中的“xfire客户端包含所需要的jar”指的是,为了使用XFire客户端功能,你需要一...

    xfire实现的实例和远程调用的客户端代码

    在本实例中,我们将探讨如何利用XFire实现实时的远程调用,并查看提供的客户端代码(ClientFromInterface.java)和服务器端代码(WS_Server)。 首先,让我们深入了解XFire的基础知识。XFire是一个基于Java的Web...

    xfire web service调用代码

    可以使用XFire的wsdl2java工具自动生成这些代理类。 2. 初始化代理:在调用服务之前,需要初始化代理,通常包括设置服务地址和任何必要的认证信息。 3. 调用服务方法:通过代理类的对象调用Web服务的方法,传入...

    Java使用XFire调用WebService接口

    3. **XFire客户端API**:XFire提供了客户端API,可以自动生成客户端代码,这些代码包含了调用Web服务的必要方法。开发者只需要传入参数,就可以执行服务调用。 4. **服务代理的生成**:通过WSDL文件,XFire可以生成...

    eclipse开发webservice的xfire插件

    XFire插件会自动生成WSDL(Web服务描述语言)文件,这是Web服务的标准接口定义。此外,它还能自动为你的服务创建客户端代理类,使得测试和调用服务变得容易。 在编码阶段,XFire支持注解驱动的开发模式,这意味着你...

    xfire接口程序,包含xfire服务端和axis客户端

    它能自动生成客户端代理类,这些类可以直接调用远程服务的方法,就像调用本地方法一样,极大地降低了客户端开发的复杂性。 这个压缩包文件"xfireDemo"包含了实现xfire服务端和axis客户端所需的所有组件和jar包。...

    使用xfire开发webservice的客户端需要的完整jar包

    总结来说,使用Xfire开发Web服务客户端涉及导入必要的jar包、配置服务信息、生成代理类以及编写调用代码。虽然Xfire已不再更新,但其简单易用的特点使其在某些场景下依然具有价值。对于新项目,推荐使用更现代的框架...

    XFire Java Web Service 客户端

    开发者只需要定义一个与服务接口匹配的Java接口,XFire会自动生成代理类,使得开发者可以像调用本地方法一样调用远程Web服务。这种方式降低了Web服务调用的复杂性,提高了开发效率。 2. **绑定配置(Binding ...

    xfire框架构建webservice应用(myecllipse自动代码生成 )

    - 使用MyEclipse自动生成客户端代码(确保WSDL URL正确无误)。 - 自动生成的客户端代码会放在指定的包中(例如`client`包)。 - 在客户端代码中,可以通过`IHelloServiceClient`类调用WebService接口。 - 示例代码...

    xfire创建服务端客户端源码

    总的来说,Xfire提供了一个简单、高效的远程调用解决方案,尤其适合需要快速搭建服务端和客户端通信的应用场景。通过学习和实践Xfire的源码,开发者不仅可以掌握XML-RPC的基本原理,还能提升在分布式系统中的编程...

    Webservice使用xfire发布及客户端调用

    在实践中,你可能需要阅读和理解XFire的源代码,或者使用一些IDE插件(如Eclipse的CXF插件)来帮助你更好地集成和调试Web服务。 总之,XFire提供了一种简单的方法来构建和消费Web服务,特别适合初学者和小型项目。...

Global site tag (gtag.js) - Google Analytics