I have followed the instructions found in page
http://xfire.codehaus.org/WS-Security
to sign my messages from client to service and from service to client, and it works fine ! But when an exception is thrown by the service, the message is not signed, and the following stack trace is displayed by the client :
org.codehaus.xfire.XFireRuntimeException: Could not invoke service.. Nested exception is org.codehaus.xfire.fault.XFireFault: WSS4JInHandler: Request does not contain required Security header
org.codehaus.xfire.client.XFireProxy.handleRequest(XFireProxy.java:92)
org.codehaus.xfire.client.XFireProxy.invoke(XFireProxy.java:57)
$Proxy12.rechercherPatrimoine(Unknown Source)
net.gicm.astral.test.XfireTest.test(XfireTest.java:65)
org.apache.jsp.index_jsp._jspService(index_jsp.java:48)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:334)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
You can find client code + service.xml in attachment.
I have tried to add a <faultHandlers> in service.xml, but it doesn't work. Below what i have added in service.xml, but without success :
<faultHandlers>
<handler handlerClass="org.codehaus.xfire.util.dom.DOMOutHandler" />
<bean class="org.codehaus.xfire.security.wss4j.WSS4JOutHandler" xmlns="">
<property name="properties">
<props>
<prop key="action">Signature</prop>
<prop key="signaturePropFile">service.properties</prop>
<prop key="signatureKeyIdentifier">DirectReference</prop>
<prop key="passwordCallbackClass">net.gicm.astral.handler.PasswordHandler</prop>
<prop key="user">Service</prop>
</props>
</property>
</bean>
</faultHandlers>
It is the same problem that is described in http://www.nabble.com/ws-security--exception-fault-handling-tf2241051.html#a6215424
.
You have currently 2 way to solve this:
1. you can add DOMOutHandler and WSS4J handler to global fault handler chain ( <xfire> <faultHandlers> .. ) , if you can have security configured per all services
2. If you need security configuration per service, then you can DOMOutHandler to global fault handler and WSS4J handler to serivce fault handlers list.
3. Wait few days till 1.2.5 will be released, and then you can add DOMFaulthandler to service fault handlers.