2

我正在使用 Axis2 来运行 Web 服务。这是一个services.xml定义服务的文件:

<service name="XEWS" scope="transportsession" class="com.mc.xews.XEWS">
<messageReceivers>
    <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
    <messageReceiver  mep="http://www.w3.org/2004/08/wsdl/in-out"  class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</messageReceivers>
<parameter name="ServiceClass" locked="false">com.mc.xews.XEWS</parameter>

我的问题是整个 API 位于一个 Java 文件中XEWS.java,而这个类被发送到java2wsdl. 有没有办法让多个类作为输入java2wsdl?此文件用于WSDL生成 Web 服务。现在我只使用一个类作为 的输入java2wsdl,所以这个类变得很大,因为有许多 API 函数......如果我知道如何将多个文件发送到 java2wsdl,它们可以很好地分组到单独的类中。从此类生成的 JavaDocs 文档也很难阅读。

Web 服务是否可以包含来自多个 Java 类的 API?

也许extra classes选项参数java2wsdl应该用于此目的?

4

2 回答 2

2

在 WSDL 中,最大的命名空间是服务本身(它的方法是最小的)。WSDL 不支持嵌套命名空间。Java 和 WSDL 之间最合乎逻辑的映射是 Java 类到 WSDL 服务。这就是使您无法请求传递多个 Java 类来获得单个 WSDL 的原因。您始终可以托管多个 WSDL,但您仍然必须单独生成它们。

引用w3c

Related concrete endpoints are combined into abstract endpoints (services)

有一个 IMPORT 机制来组合 WSDL,但这被视为 WSDL2Java(或任何其他 SOAP 客户端)的单个服务,因此它仍然代表单个服务。

如果您担心实施的规模,只需查看PayPal 的网络服务

于 2012-12-04T18:23:46.007 回答
2

不,这是不可能的,因为 Axis2 生成工具以代码优先的方法将 Java 类:WSDL 映射为 1:1。假设,他们可以提供将多个 Java 类映射到单个 WSDL 的功能(这将需要生成工具中的其他参数)。

Axis2 对其他类型使用“额外类”——用作输入/输出的原始复杂类型的子类。

如果整洁紧凑的代码是唯一的问题,我建议将其重构为只有一个类定义所有必需的操作,但将执行委托给特定和适当的(多个)类。这可以被认为是一个外观模式的应用。

于 2012-12-04T20:43:17.217 回答