0

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

-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 文件,其行如下

<parameter name="ServiceClass">com.dummy.tst.service.TestSoapBindingImpl</parameter>

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

throw new  java.lang.UnsupportedOperationException("Please implement " + this.getClass().getName() + "#myMethod");

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

我应该如何处理这些文件?Impl 文件,即指定为默认服务方法容器(在 services.xml 中)仅包含假人,因此我不能使用已部署的服务,并且在 services.xml 中将 TestSoapBindingImpl 替换为 TestSoapBindingStub 也不会导致预期的结果。

4

1 回答 1

2

TestSoapBindingStub.java是给客户的。它包含在远程系统上调用 Web 服务的代码。

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

使用 wsdl2java 生成的代码,对服务的每次调用都会创建一个类型为 的对象om.dummy.tst.service.TestSoapBindingImpl,正如您所指出的,每次调用都会引发异常。有两种方法可以提供工作服务。

  1. 您可以使用TestSoapBindingImpl.java您拥有的文件作为起点。从每个函数中删除该throws行,并在每个函数体中填写您在请求进入时实际要执行的代码。

  2. 或者,您可以将services.xml其用作起点。定义一个您自己的类作为服务类。将引用替换为com.dummy.tst.service.TestSoapBindingImpl对您自己的服务类名称的引用。wsdl2java 可能生成了一个名为类似的文件TestSoapBindingSkeleton.java,它定义了服务类应该实现的接口。您的自定义服务类应实现此接口。

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

于 2012-09-25T01:30:51.800 回答