调用webservice客户端方法 runtime modeler error: Wrapper class ××× is not found. Have you run APT to generate them?

用wsimport生成webservice的客户端以后,调用客户端生成方法时总是出现 runtime modeler error: Wrapper class stardand.nrcms.ncking.com.Login is not found. Have you run APT to generate them?这个错误;

这个公司的接口我原来是做过的,现在不同的是,换了个地址,和原来的环境是一样的,jdk1.6.20,然后加入了myeclipse里边的jax-ws 2.1 Runtime libraries 和jax-ws 2.1 api libraries,由于wsimport 生成客户端时,指定包名以后,总是报A class/interface with the same name "XXX**" is already in use的错误,导致不能够生成客户端代码,于是就没有指定包名,生成代码以后,再在myeclipse里边,重命名为我自己想要的包名。一样的步骤,为什么这个就会报错?

百度了一下,这个错误,发现有几种答案。

1.jdk版本要升到jdk1.6.22以上,这个我用了jdk1.6.23,还用了jdk1.6.43,都还是存在这个问题。

2.需要jaxws-api-2.1.jar及jaxb-api-2.1.jar,这个我试过把myeclipse里边的jax-ws 2.1 Runtime libraries和jax-ws 2.1 api libraries都去掉,然后把jaxws-ri-2.2.8里边所有的jar拷到工程下边的lib中去,调用的时候确出现找不到这个一个类的错误。后来想jdk1.6里边已经包含了jax-ws 2.1,所以应该不是这个问题。

3.表示.apt_generated源码包下没有自动生成jax-ws相应的类,我想这个应该是针对服务端的

全都试过,没了办法,今天又找了同事原来生成过的,能用的客户端的代码来调用,同样也出现这个问题。

前边的方法都不对,于是退到原点,把jdk的版本还是用回原来jdk1.6.20,myeclipse里边同样加上jax-ws 2.1 Runtime libraries和jax-ws 2.1 api libraries

既然说是找不到这个类,是不是命名空间的问题,就是说,我开始我重命名客户端的包名的时候,有引用没改过来,而导致找不到这个类?是不是有注释引用重命名的时候,不会同时改过来,于是回到为什么生成客户端的时候,会出现A class/interface with the same name "XXX**" is already in use的错误,百度以后,在http://chenlin10058.iteye.com/blog/1558591里边找到了答案

目前可选择的方案:

1.使用-autoNameResolution自动处理

wsdl2java -autoNameResolution http://localhost:8060/soa/services/otherTrackedVehicleSoapService?wsdl

2.wsimport -p com.test.client -keep http://localhost:8060/soa/services/otherTrackedVehicleSoapService?wsdl-B-XautoNameResolution

我用了第二种方法

wsimport -s D:\\temp -p com.**.** http://***.***.***  -B-XautoNameResolution

生成客户端以后,发现客户端所有的代码都生成在了一个包下边,而不像默认包名,代码分成了两个包,再把原来引用的相关客户端的包名改成目前的报名

再调用该方法的时候,发现已经没问题了

为什么会这样呢?不管类是不是在一个包里边,但是webserivce的命名空间应该是一样的,对这个没影响吧,没有理论基础,只能不断的尝试,摸着石头过河,这样的旅程真可怕。

时间: 2024-11-08 20:13:05

调用webservice客户端方法 runtime modeler error: Wrapper class ××× is not found. Have you run APT to generate them?的相关文章

JDK 1.6 写Webservice时,runtime modeler error: Wrapper class com.ws.jaxws.DoSomething is not found问题的解决办法

转自:http://blog.csdn.net/forandever/article/details/5276038 1.问题如下: Exception in thread "main" com.sun.xml.internal.ws.model.RuntimeModelerException: runtime modeler error: Wrapper class com.ws.jaxws.DoSomething is not found. Have you run APT to

websevice中runtime modeler error: Wrapper class com.ws.jaxws.Add is not found问题的解决办法

查询了网上的资料,有以下解决办法: 1> 先用apt命令将主程序进行编译,然后生成一些java文件2> 升级JDK到版本jdk1.6u17或以后 这两种办法我没有试过,但是试了以下这种方法: soapBinding 的style默认为soapbinding.style.document,在interface上面加上@webservice后再加上一个@SOAPBindling(style = SOAPBinding.style.RPC),这样错误就解决了,估计可能是jdk1.6的早期版本读这个类

Wrapper class webservice.jaxws.SayHi is not found. Have you run APT to generate them?

最近在研究webservice,利用jdk来实现简单的webservice发布,但是运行时却发生了这样的异常,如下: Exception in thread "main" com.sun.xml.internal.ws.model.RuntimeModelerException: runtime modeler error: Wrapper class webservice.jaxws.SayHi is not found. Have you run APT to generate t

C# 调用WebService的方法

原文:C# 调用WebService的方法 很少用C#动态的去调用Web Service,一般都是通过添加引用的方式,这样的话是自动成了代理,那么动态代理调用就是我们通过代码去调用这个WSDL,然后自己去生成客户端代理.更多的内容可以看下面的两个地址:http://blog.csdn.net/limlimlim/article/details/8651043 http://www.cnblogs.com/VisualStudio/archive/2008/10/29/1322228.html 1

Flex调用WebService的方法

flex是不能直接访问数据库的,所以可以采用服务的形式进行调用数据,HTTPService.WebServices是比较常用的两种方法,因为接触WebService比较多所以给出其调用方法. import mx.controls.Alert; import mx.events.FlexEvent; import mx.rpc.events.ResultEvent; import mx.rpc.events.FaultEvent; import mx.rpc.soap.LoadEvent; imp

java调用webservice接口方法

webservice的 发布一般都是运用WSDL(web service descriptive language)文件的款式来发布的,在WSDL文件里边,包含这个webservice暴露在外面可供运用的接口.今日查找到了非常好的 webservice provider列表 http://www.webservicex.net/WCF/default.aspx 这上面列出了70多个包含许多方面的free webservice provider,utilities->global weather就

动态调用webservice的方法

动态WebService方法 调用Webservice的方法一般是通过右击项目-->添加服务引用-->输入Webservice地址-->前往-->确定,这样可以顺利调用服,但是需要注意的一点是:如果上面的方法是在非启动项项目(比如某个类库)中添加的,在该项目下会自动生成一个app.config文件,而在主配置文件web.config中并没有自动添加上该webservice的标记,这样运行会出现错误,说找不到配置信息等等……所有还需要把app.config中的<system.s

【转】C# 调用WebService的方法

很少用C#动态的去调用Web Service,一般都是通过添加引用的方式,这样的话是自动成了代理,那么动态代理调用就是我们通过代码去调用这个WSDL,然后自己去生成客户端代理.更多的内容可以看下面的两个地址: http://blog.csdn.net/limlimlim/article/details/8651043 http://www.cnblogs.com/VisualStudio/archive/2008/10/29/1322228.html 1.动态调用的url后面注意一定要加上?WS

C#中Winform动态调用Webservice的方法(转)

一般情况下winform调用webservice时步骤 1添加服务引用---高级----添加web引用------填写url--添加web引用即可完成对webservice的引用 让VS.NET环境来为我们生成服务代理,然后调用对应的Web服务. 如果需要动态调用WebService,要实现这样的功能: publicstaticobjectInvokeWebService(stringurl,  stringmethodname,object[] args) 其中,url是Web服务的地址,me