java - Axis2实现和 stub 生成问题

标签 java apache wsdl apache-axis wsdl2java

我正在使用 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 文件,它实际上包含已实现的方法。在 axis-1 中只有一个包含方法描述和实现的文件,在 axis-2 中我有 2 个文件。

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

最佳答案

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 之类的文件,它定义了服务类应实现的接口(interface)。您的自定义服务类应该实现此接口(interface)。

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

关于java - Axis2实现和 stub 生成问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12565000/

相关文章:

java - Java的BST ZoneId代表什么?

java - 添加所有依赖项,但 NoClassDefFoundError com/intellij/uiDesigner/core/GridLayoutManager

apache - 本地主机无法在离线模式下连接?

java 服务器无法处理请求值不能为空

c# - 如何为 "Auth-Token"的 Web 服务添加 token 认证?

c# - WCF - 自定义 WDSL 生成

java.lang.ClassNotFoundException : org. springframework.expression.ParserContext Spring HelloWorld?

python - 我惊呆了 : weird problem with python and sockets + threads

php - SOAP 错误 : Parsing WSDL: Unknown required WSDL extension 'http://schemas.xmlsoap.org/ws/2004/09/policy' in PHP SoapClient while calling SAP PI

java - 元音变音/变元音在 Postgresql 中显示不正确(文本类型和字符类型不同)