我們有一個使用Axis 1.4接收SOAP調用的遺留Web服務。目前,web.xml中的servlet映射使用url-pattern /services/*
,因此services
下的任何內容都將映射到AxisServlet。我們的WSDD文件看起來是這樣的:Axis自定義處理程序未運行wsdl
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="MyService" provider="java:RPC">
<parameter name="allowedMethods" value="*"/>
<parameter name="className" value="com.foo.MyService"/>
<wsdlFile>path/to/wsdl.wsdl</wsdlFile>
</service>
<transport name="http">
<requestFlow>
<handler type="java:org.apache.axis.handlers.http.URLMapper"/>
<handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
</requestFlow>
</transport>
<globalConfiguration>
<requestFlow>
<handler type="java:com.foo.AxisRequestHandler"/>
</requestFlow>
<responseFlow>
<handler type="java:com.foo.AxisResponseHandler"/>
</responseFlow>
</globalConfiguration>
</deployment>
我們現在不再想services
下的一切去軸,只有services/MyService
這樣我們就可以services
下使用其他技術的其他請求。
因此,我將wx AxisServlet的web.xml url-pattern更改爲services/MyService
。然後,我想從wsdd中刪除URLMapper,並讓我的AxisRequestHandler
將所有請求發送到MyService
。因此,WSDD現在看起來是這樣的:
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="MyService" provider="java:RPC">
<parameter name="allowedMethods" value="*"/>
<parameter name="className" value="com.foo.MyService"/>
<wsdlFile>path/to/wsdl.wsdl</wsdlFile>
</service>
<transport name="http">
<requestFlow>
<handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
</requestFlow>
</transport>
<globalConfiguration>
<requestFlow>
<handler type="java:com.foo.AxisRequestHandler"/>
</requestFlow>
<responseFlow>
<handler type="java:com.foo.AxisResponseHandler"/>
</responseFlow>
</globalConfiguration>
</deployment>
而在AxisRequestHandler
我有這樣的:
public void invoke(MessageContext context) throws AxisFault
{
context.setTargetService("MyService");
}
實際進行SOAP調用時,這一切的偉大工程。然而,當我去到/services/MyService?wsdl
服務器最多的WSDL文件,我得到以下錯誤:
我已經把調試日誌在AxisRequestHandler
,每當我打的WSDL,它永遠不會打我處理程序。有什麼我在這裏失蹤?