AXIS错误:此位置没有SOAP服务

Jör*_*ann 6 axis web-services

注意:我找不到这个问题的直接答案,所以我将在下面记录我的解决方案作为答案.

我使用Axis 1.4和wsdl从wsdl生成了web服务的服务器端部分axistools-maven-plugin.Axis servlet映射到/services/*,服务配置WEB-INF/server-config.wsdd如下:

<deployment xmlns="http://xml.apache.org/axis/wsdd/"
    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
    <service name="TestService" style="document" use="literal">
        <namespace>http://example.com/testservier</namespace>
        <parameter name="className" value="com.example.TestServiceImpl"/>
        <parameter name="allowedMethods" value="*"/>
        <parameter name="scope" value="Session"/>
    </service>
</deployment>
Run Code Online (Sandbox Code Playgroud)

当我将此Web应用程序部署到Tomcat并http://localhost:8080/testservice/services返回访问 已部署服务的列表时.

现在......一些服务

  • TestService(wsdl)
    • TestService的

单击wsdl应该返回此服务的描述,但会导致以下错误页面:

AXIS错误

无法生成WSDL!

此位置没有SOAP服务

Jör*_*ann 9

server-config.wsdd缺少一个neccessary配置设置.

<transport name="http">
    <requestFlow>
        <handler type="java:org.apache.axis.handlers.http.URLMapper"/>
    </requestFlow>
</transport>
Run Code Online (Sandbox Code Playgroud)

似乎URLMapper负责从url中提取服务名称,而不知道轴不知道要调用哪个服务.这有点记录在轴faq中:

此机制有效,因为Axis中的HTTP传输在请求链上部署了URLMapper(org.apache.axis.handlers.http.URLMapper)处理程序.URLMapper获取传入的URL,提取其最后一部分作为服务名称,并尝试在当前EngineConfiguration中按该名称查找服务.

类似地,您可以部署HTTPActionHandler以通过SOAPAction HTTP标头进行分派.您也可以随意使用自定义方式设置服务 - 例如,如果您有通过单个服务汇集所有邮件的传输,则可以在传输调用AxisEngine之前在MessageContext中设置服务

这使得它听起来像URLMapper默认配置,似乎并非如此.