2

我有一个非常简单的 JAX-WS + JAXB SOAP 服务,由于我的工作性质,我被迫通过 Axis2 进行部署。

如果我使用我的 JAXB 类和我的服务类,并通过烘焙到 JDK 中的 JAX-WS 参考实现来部署它们,例如

public static void main(final String... args) {
    Endpoint.publish("http://0.0.0.0:9090/MyService", new MyService());
}

RI(2.2.4,JDK7)生成漂亮的、符合标准的 WSDL,几乎可以被任何工具(soapUI 等)使用。


如果我采用相同的类并通过 Axis2 中的 services.xml 文件部署它们,例如

<service name="MyService" scope="soapsession" targetNamespace="http://com.service.my">
    <Description>My Service Endpoint</Description>
    <messageReceivers>
        <messageReceiver class="org.apache.axis2.jaxws.server.JAXWSMessageReceiver" mep="http://www.w3.org/2004/08/wsdl/in-out"/>
    </messageReceivers>
    <!-- <parameter name="useOriginalwsdl">true</parameter> -->
    <parameter locked="false" name="ServiceClass">com.service.my.MyService</parameter>
</service>

Axis2 的 WSDL 生成接管并生成几乎任何工具都无法使用的完全垃圾。

我知道我可以<parameter name="useOriginalwsdl">true</parameter>在 services.xml 中取消注释该行并提供静态 WSDL,但这样做会迫使我在将来手动更新 WSDL,而我希望避免这种情况。

有没有办法通过 Axis2 部署我的服务并生成 WSDL,但绕过 Axis2 糟糕的 WSDL 生成并将其委托给 JAX-WS RI?

4

1 回答 1

1

事实证明,如果不修改或挂钩到 Axis2 的实现,这是不可能的,这显然会在以后产生维护问题。因此,我想我只能忍受 Axis2 生成的蹩脚的 WSDL。

于 2012-10-09T14:46:43.363 回答