将Axis2 WSDL生成委托给JAX-WS RI?

时间:2012-09-26 15:59:14

标签: java soap wsdl jax-ws axis2

我有一个非常简单的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生成接管并生成完全垃圾,几乎所有工具都无法使用它。

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

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

1 个答案:

答案 0 :(得分:1)

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