Hello,
I'm using Tomcat 4.1.34 - Axis 1.4 - WSS4J 1.5.
I code my own security Signature Handler extends WSS4JHandler on the client
side :
public boolean handleRequest(MessageContext context) {
Document doc = context.[...].getAsDocument();
WSSecHeader secHeader = new WSSecHeader();
secHeader.insertSecurityHeader(doc);
WSSecSignature signature = new WSSecSignature();
// set Signature configuration
signature.prepare(doc, crypto, secHeader);
...
signature.computeSignature();
context.[...].setContent(dom2Source(doc));
context.[...].saveChanges();
}
and i code my own security Verifying Signature extends WSS4JHandler on the
server side :
public boolean handleRequest(MessageContext context) {
Document doc = context.[...].getAsDocument();
WSSecurityEngine.getInstance().processSecurityHeader(doc, null, null,
crypto);
}
Here there is my client-config.wsdd (client side), it is on the source
directory (copied with the .class files)
<?xml version="1.0" encoding="UTF-8"?>
<deployment name="AcquittementService"
xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<globalConfiguration>
<parameter name="enableNamespacePrefixOptimization" value="false"/>
<parameter name="mustUnderstandWSSHeader" value="true"/>
</globalConfiguration>
<handler name="ClientSignatureHandler"
type="java:org.apache.axis.handlers.JAXRPCHandler">
<parameter name="scope" value="session"/>
<parameter name="className" value="ClientSignatureHandler"/>
</handler>
<transport name="http" pivot="java:
org.apache.axis.transport.http.HTTPSender">
<requestFlow>
<handler type="ClientSignatureHandler"/>
</requestFlow>
<responseFlow>
<handler type="ClientSignatureHandler"/>
</responseFlow>
</transport>
<transport name="local" pivot="java:
org.apache.axis.transport.local.LocalSender"/>
<transport name="java" pivot="java:
org.apache.axis.transport.java.JavaSender"/>
</deployment>
Here, there is my serer-config.wsdd (server side) : it is on the WEB-INF
directory
<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="
http://xml.apache.org/axis/wsdd/providers/java">
<globalConfiguration>
<parameter name="sendMultiRefs" value="true"/>
<parameter name="disablePrettyXML" value="true"/>
<parameter name="adminPassword" value="admin"/>
<parameter name="attachments.Directory" value="D:\DEV_JAVA\apache-
tomcat-4.1.34\webapps\axis\WEB-INF\attachments"/>
<parameter name="dotNetSoapEncFix" value="true"/>
<parameter name="enableNamespacePrefixOptimization" value="false"/>
<parameter name="sendXMLDeclaration" value="true"/>
<parameter name="sendXsiTypes" value="true"/>
<parameter name="attachments.implementation" value="
org.apache.axis.attachments.AttachmentsImpl"/>
<parameter name="mustUnderstandWSSHeader" value="true"/>
<parameter name="mustUnderstandMessageID" value="true"/>
</globalConfiguration>
<handler name="LocalResponder" type="java:
org.apache.axis.transport.local.LocalResponder"/>
<handler name="URLMapper" type="java:
org.apache.axis.handlers.http.URLMapper"/>
<handler name="Authenticate" type="java:
org.apache.axis.handlers.SimpleAuthenticationHandler"/>
<handler name="ServerHandler" type="java:
org.apache.axis.handlers.JAXRPCHandler">
<parameter name="scope" value="session"/>
<parameter name="className" value="ServerHandler"/>
<parameter name="mustUnderstandWSSHeader" value="true"/>
<parameter name="mustUnderstandMessageID" value="true"/>
</handler>
<service name="AcquittementService" provider="java:RPC">
<parameter name="allowedMethods" value="*"/>
<parameter name="className" value="
fr.laposte.rgp.acquitsi.controleur.AcquittementService"/>
</service>
<transport name="http">
<requestFlow>
<handler type="URLMapper"/>
<handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
<handler type="ServerHandler"/>
</requestFlow>
<parameter name="qs:list" value="
org.apache.axis.transport.http.QSListHandler"/>
<parameter name="qs:wsdl" value="
org.apache.axis.transport.http.QSWSDLHandler"/>
<parameter name="qs.list" value="
org.apache.axis.transport.http.QSListHandler"/>
<parameter name="qs.method" value="
org.apache.axis.transport.http.QSMethodHandler"/>
<parameter name="qs:method" value="
org.apache.axis.transport.http.QSMethodHandler"/>
<parameter name="qs.wsdl" value="
org.apache.axis.transport.http.QSWSDLHandler"/>
</transport>
<transport name="local">
<responseFlow>
<handler type="LocalResponder"/>
</responseFlow>
</transport>
</deployment>
the stacktrace of the exception is :
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}MustUnderstand
faultSubcode:
faultString: Did not understand "MustUnderstand" header(s):{
http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd}Security
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:
at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(
MustUnderstandChecker.java:96)
at org.apache.axis.strategies.InvocationStrategy.visit(
InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java
:454)
at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)
at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java
:699)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:716)
at org.apache.axis.transport.http.AxisServletBase.service(
AxisServletBase.java:327)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:809)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
ApplicationFilterChain.java:198)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(
ApplicationFilterChain.java:144)
at org.apache.catalina.core.StandardWrapperValve.invoke(
StandardWrapperValve.java:209)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext
(StandardPipeline.java:595)
at org.apache.catalina.core.StandardPipeline.invoke(
StandardPipeline.java:432)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:954)
at org.apache.catalina.core.StandardContextValve.invoke(
StandardContextValve.java:138)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext
(StandardPipeline.java:595)
at org.apache.catalina.core.StandardPipeline.invoke(
StandardPipeline.java:432)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:954)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java
:2459)
at org.apache.catalina.core.StandardHostValve.invoke(
StandardHostValve.java:132)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext
(StandardPipeline.java:595)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(
ErrorDispatcherValve.java:118)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext
(StandardPipeline.java:593)
at org.apache.catalina.valves.ErrorReportValve.invoke(
ErrorReportValve.java:116)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext
(StandardPipeline.java:593)
at org.apache.catalina.core.StandardPipeline.invoke(
StandardPipeline.java:432)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:954)
at org.apache.catalina.core.StandardEngineValve.invoke(
StandardEngineValve.java:126)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext
(StandardPipeline.java:595)
at org.apache.catalina.core.StandardPipeline.invoke(
StandardPipeline.java:432)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:954)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java
:152)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
:869)
at
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection
(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(
PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(
LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(
ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:534)
{http://xml.apache.org/axis/}hostname:XP0487
Did not understand "MustUnderstand" header(s):{
http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd}Security
at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(
MustUnderstandChecker.java:96)
at org.apache.axis.strategies.InvocationStrategy.visit(
InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java
:454)
at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)
at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java
:699)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:716)
at org.apache.axis.transport.http.AxisServletBase.service(
AxisServletBase.java:327)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:809)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
ApplicationFilterChain.java:198)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(
ApplicationFilterChain.java:144)
at org.apache.catalina.core.StandardWrapperValve.invoke(
StandardWrapperValve.java:209)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext
(StandardPipeline.java:595)
at org.apache.catalina.core.StandardPipeline.invoke(
StandardPipeline.java:432)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:954)
at org.apache.catalina.core.StandardContextValve.invoke(
StandardContextValve.java:138)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext
(StandardPipeline.java:595)
at org.apache.catalina.core.StandardPipeline.invoke(
StandardPipeline.java:432)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:954)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java
:2459)
at org.apache.catalina.core.StandardHostValve.invoke(
StandardHostValve.java:132)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext
(StandardPipeline.java:595)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(
ErrorDispatcherValve.java:118)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext
(StandardPipeline.java:593)
at org.apache.catalina.valves.ErrorReportValve.invoke(
ErrorReportValve.java:116)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext
(StandardPipeline.java:593)
at org.apache.catalina.core.StandardPipeline.invoke(
StandardPipeline.java:432)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:954)
at org.apache.catalina.core.StandardEngineValve.invoke(
StandardEngineValve.java:126)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext
(StandardPipeline.java:595)
at org.apache.catalina.core.StandardPipeline.invoke(
StandardPipeline.java:432)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:954)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java
:152)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
:869)
at
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection
(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(
PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(
LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(
ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:534)
This exception occurs after the Server's side handler, just before going
into my webservice.
Thanks for your help
Matthieu