注意:我找不到这个问题的直接答案,所以我将在下面记录我的解决方案作为答案.
我使用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服务
在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默认配置,似乎并非如此.