首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Axis2实现和存根生成问题

Axis2实现和存根生成问题
EN

Stack Overflow用户
提问于 2012-09-24 20:25:11
回答 1查看 1.5K关注 0票数 0

我正在使用wsdl2java生成服务。生成的参数如下:

代码语言:javascript
复制
-p com.dummy.tst.service -u -f -sp -s -b -ssi -d xmlbeans -uri /some/path/service.wsdl -ss -g -sd -o /some/path/gen

在生成之后,我得到了一个services.xml文件,其中的代码行如下

代码语言:javascript
复制
<parameter name="ServiceClass">com.dummy.tst.service.TestSoapBindingImpl</parameter>

然后在gen目录中,我得到了带有方法列表的TestSoapBindingImpl.java,但每个方法的定义如下

代码语言:javascript
复制
throw new  java.lang.UnsupportedOperationException("Please implement " + this.getClass().getName() + "#myMethod");

还有一个TestSoapBindingStub.java文件,它实际上包含已实现的方法。在axis-1中,只有一个包含方法、描述和实现的文件,而在axis-2中,我有两个文件。

我应该如何处理这些文件?被指定为默认服务方法容器的Impl文件(在services.xml中)只包含虚拟对象,因此我不能使用已部署的服务,并且在services.xml中用TestSoapBindingStub替换TestSoapBindingImpl也不会产生预期的结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-25 09:30:52

TestSoapBindingStub.java是为客户端准备的。它包含调用远程系统上的web服务的代码。

在服务端,每次传入请求时,Axis2都会创建一个在services.xml中指定为ServiceClass的对象。然后,它将使用客户端提供的对象在ServiceClass对象中调用所请求的函数。

使用wsdl2java生成的代码,每个对服务的调用都将创建一个om.dummy.tst.service.TestSoapBindingImpl类型的对象,正如您已经注意到的,它将为每个调用抛出一个异常。有两种方法可以使服务正常工作。

  1. 您可以使用您已有的TestSoapBindingImpl.java文件作为起点。删除每个函数中的throws行,并在每个函数体中填充您实际想要在请求到来时执行的代码in.
  2. Alternately,您可以使用services.xml作为起点。定义一个您自己的类作为服务类。将对com.dummy.tst.service.TestSoapBindingImpl的引用替换为对您自己的服务类名称的引用。wsdl2java可能生成了一个类似于TestSoapBindingSkeleton.java的文件,它定义了服务类应该实现的接口。您的自定义服务类应实现此接口。

我一直在做的项目使用方法#2,我们编写自己的服务类来实现框架接口。在将服务打包到AAR文件中时,需要在AAR中包含services.xml文件。我们的打包规则在生成的services.xml上执行文本替换,以使用我们的服务类的名称更新ServiceClass。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12565000

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档