我尝试将 WSS4J 与 Axis Web 服务一起使用,但没有任何反应。似乎根本没有使用 WSS4J。所有必要的库都在 WEB-INF/lib 目录中。该服务正在使用 org.apache.axis.client.AdminClient 实用程序进行部署。
这是我的 deploy.wsdd:
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<!-- Services from AccountsServiceImplService WSDL service -->
<service name="AccountsServiceImpl" provider="java:RPC" style="wrapped"
use="literal">
<requestFlow>
<handler type="java:org.apache.ws.axis.security.WSDoAllReceiver">
<parameter name="passwordCallbackClass" value="haha" />
<parameter name="action" value="UsernameToken" />
</handler>
</requestFlow>
<parameter name="wsdlTargetNamespace" value="http://accoutsservice.abc.ru" />
<parameter name="wsdlServiceElement" value="AccountsServiceImplService" />
<parameter name="schemaQualified" value="http://accoutsservice.abc.ru" />
<parameter name="wsdlServicePort" value="AccountsServiceImpl" />
<parameter name="className"
value="ru.abc.accoutsservice.AccountsServiceImpl" />
<parameter name="wsdlPortType" value="AccountsServiceImpl" />
<parameter name="typeMappingVersion" value="1.2" />
<operation xmlns:operNS="http://accoutsservice.abc.ru"
xmlns:retNS="http://accoutsservice.abc.ru" xmlns:rtns="http://www.w3.org/2001/XMLSchema"
name="sendAccountNumber" qname="operNS:sendAccountNumber"
returnQName="retNS:sendAccountNumberReturn" returnType="rtns:string"
soapAction="">
</operation>
<parameter name="allowedMethods" value="sendAccountNumber" />
</service>
尽管我什至没有haha
类,但没有发生错误(请参阅passwordCallbackClass
deploy.wsdd 中的参数)。我可以自由地将没有 WSS 标头的 SOAP 请求发送到我的服务。
更新
我已经解决了一些类路径问题。当我尝试打开http://localhost:8080/axis/servlet/AxisServlet
页面时,我看到一个错误:org.apache.axis.ConfigurationException: java.lang.ClassNotFoundException: org.apache.ws.axis.security.WSDoAllSender
. WSS4J jar 位于 {tomcat}\webapps\axis\WEB-INF\lib 目录中。我做错了什么?
更新#2
似乎wsdl4j
jar 既不包含org.apache.ws.axis.security.WSDoAllSender
类也不包含wss4j
jar。但是,对于 1.5.x 版本,此类在wss4j
jar 中。现在它不见了。WSS4J 的文档已过时。