XFire

CLONE -Fault with Ws-Security : message not signed, when an exception is thrown by the service

Details

  • Type: Bug Bug
  • Status: Open Open
  • Priority: Major Major
  • Resolution: Unresolved
  • Affects Version/s: 1.2.4
  • Fix Version/s: 1.2.5
  • Component/s: Core
  • Labels:
    None
  • Environment:
    Windows 2000, Tomcat 5.5, Java 1.5
  • Number of attachments :
    0

Description

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.

Activity

Hide
Franck HUGOT added a comment -

There is still a problem with XFIRE 1.2.6. Here's the stack trace :
18:12:22 ERROR - [DefaultFaultHandler.sendFault] Could not send fault.
java.lang.NullPointerException
at org.apache.ws.security.util.WSSecurityUtil.findElement(WSSecurityUtil.java:198)
at org.apache.ws.security.message.WSSecSignature.addReferencesToSign(WSSecSignature.java:534)
at org.apache.ws.security.message.WSSecSignature.build(WSSecSignature.java:716)
at org.apache.ws.security.action.SignatureAction.execute(SignatureAction.java:54)
at org.apache.ws.security.handler.WSHandler.doSenderAction(WSHandler.java:192)
at org.codehaus.xfire.security.wss4j.WSS4JOutHandler.invoke(WSS4JOutHandler.java:158)
at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
at org.codehaus.xfire.handler.DefaultFaultHandler.sendFault(DefaultFaultHandler.java:88)
at org.codehaus.xfire.handler.DefaultFaultHandler.invoke(DefaultFaultHandler.java:51)
at org.codehaus.xfire.service.binding.ServiceInvocationHandler$1.run(ServiceInvocationHandler.java:99)
at org.codehaus.xfire.service.binding.ServiceInvocationHandler.execute(ServiceInvocationHandler.java:134)
at org.codehaus.xfire.service.binding.ServiceInvocationHandler.invoke(ServiceInvocationHandler.java:109)
at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)

I use XFIRE-1.2.6 (through maven2) that use WSS4J 1.5.1.
My configuration is :

<property name="faultHandlers">
<list>
<bean class="org.codehaus.xfire.util.dom.DOMOutHandler"/>
<bean class="org.codehaus.xfire.security.wss4j.WSS4JOutHandler">
<property name="properties">
<props>
<prop key="action">UsernameToken Timestamp Signature</prop>
<prop key="user">serveralias</prop>
<prop key="passwordCallbackClass">com.sofinco.soffwk.security.PasswordHandler</prop>
<prop key="signaturePropFile">/outsecurity_sign.properties</prop>
<prop key="signatureKeyIdentifier">IssuerSerial</prop>
</props>
</property>
</bean>
</list>
</property>

Show
Franck HUGOT added a comment - There is still a problem with XFIRE 1.2.6. Here's the stack trace : 18:12:22 ERROR - [DefaultFaultHandler.sendFault] Could not send fault. java.lang.NullPointerException at org.apache.ws.security.util.WSSecurityUtil.findElement(WSSecurityUtil.java:198) at org.apache.ws.security.message.WSSecSignature.addReferencesToSign(WSSecSignature.java:534) at org.apache.ws.security.message.WSSecSignature.build(WSSecSignature.java:716) at org.apache.ws.security.action.SignatureAction.execute(SignatureAction.java:54) at org.apache.ws.security.handler.WSHandler.doSenderAction(WSHandler.java:192) at org.codehaus.xfire.security.wss4j.WSS4JOutHandler.invoke(WSS4JOutHandler.java:158) at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131) at org.codehaus.xfire.handler.DefaultFaultHandler.sendFault(DefaultFaultHandler.java:88) at org.codehaus.xfire.handler.DefaultFaultHandler.invoke(DefaultFaultHandler.java:51) at org.codehaus.xfire.service.binding.ServiceInvocationHandler$1.run(ServiceInvocationHandler.java:99) at org.codehaus.xfire.service.binding.ServiceInvocationHandler.execute(ServiceInvocationHandler.java:134) at org.codehaus.xfire.service.binding.ServiceInvocationHandler.invoke(ServiceInvocationHandler.java:109) at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131) I use XFIRE-1.2.6 (through maven2) that use WSS4J 1.5.1. My configuration is : <property name="faultHandlers"> <list> <bean class="org.codehaus.xfire.util.dom.DOMOutHandler"/> <bean class="org.codehaus.xfire.security.wss4j.WSS4JOutHandler"> <property name="properties"> <props> <prop key="action">UsernameToken Timestamp Signature</prop> <prop key="user">serveralias</prop> <prop key="passwordCallbackClass">com.sofinco.soffwk.security.PasswordHandler</prop> <prop key="signaturePropFile">/outsecurity_sign.properties</prop> <prop key="signatureKeyIdentifier">IssuerSerial</prop> </props> </property> </bean> </list> </property>
Hide
Martin Andres Marquez added a comment -

I have exactly the same problem.

Show
Martin Andres Marquez added a comment - I have exactly the same problem.
Hide
Franck HUGOT added a comment -

I forget to give the exception on the server side !

15:06:22 ERROR - [DefaultFaultHandler.sendFault] Could not send fault.
java.lang.NullPointerException
at org.apache.ws.security.util.WSSecurityUtil.findElement(WSSecurityUtil.java:198)
at org.apache.ws.security.message.WSSecSignature.addReferencesToSign(WSSecSignature.java:534)
at org.apache.ws.security.message.WSSecSignature.build(WSSecSignature.java:716)
at org.apache.ws.security.action.SignatureAction.execute(SignatureAction.java:54)
at org.apache.ws.security.handler.WSHandler.doSenderAction(WSHandler.java:192)
at org.codehaus.xfire.security.wss4j.WSS4JOutHandler.invoke(WSS4JOutHandler.java:158)
at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
at org.codehaus.xfire.handler.DefaultFaultHandler.sendFault(DefaultFaultHandler.java:88)
at org.codehaus.xfire.handler.DefaultFaultHandler.invoke(DefaultFaultHandler.java:51)
at org.codehaus.xfire.service.binding.ServiceInvocationHandler$1.run(ServiceInvocationHandler.java:99)
at org.codehaus.xfire.service.binding.ServiceInvocationHandler.execute(ServiceInvocationHandler.java:134)
at org.codehaus.xfire.service.binding.ServiceInvocationHandler.invoke(ServiceInvocationHandler.java:109)
at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131)
at org.codehaus.xfire.transport.DefaultEndpoint.onReceive(DefaultEndpoint.java:64)
at org.codehaus.xfire.transport.AbstractChannel.receive(AbstractChannel.java:38)
at org.codehaus.xfire.transport.http.XFireServletController.invoke(XFireServletController.java:304)
at org.codehaus.xfire.transport.http.XFireServletController.doService(XFireServletController.java:129)
at org.codehaus.xfire.spring.remoting.XFireServletControllerAdapter.handleRequest(XFireServletControllerAdapter.java:67)
at org.codehaus.xfire.spring.remoting.XFireExporter.handleRequest(XFireExporter.java:48)
at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:857)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:792)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:461)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:426)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
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:595)

Show
Franck HUGOT added a comment - I forget to give the exception on the server side ! 15:06:22 ERROR - [DefaultFaultHandler.sendFault] Could not send fault. java.lang.NullPointerException at org.apache.ws.security.util.WSSecurityUtil.findElement(WSSecurityUtil.java:198) at org.apache.ws.security.message.WSSecSignature.addReferencesToSign(WSSecSignature.java:534) at org.apache.ws.security.message.WSSecSignature.build(WSSecSignature.java:716) at org.apache.ws.security.action.SignatureAction.execute(SignatureAction.java:54) at org.apache.ws.security.handler.WSHandler.doSenderAction(WSHandler.java:192) at org.codehaus.xfire.security.wss4j.WSS4JOutHandler.invoke(WSS4JOutHandler.java:158) at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131) at org.codehaus.xfire.handler.DefaultFaultHandler.sendFault(DefaultFaultHandler.java:88) at org.codehaus.xfire.handler.DefaultFaultHandler.invoke(DefaultFaultHandler.java:51) at org.codehaus.xfire.service.binding.ServiceInvocationHandler$1.run(ServiceInvocationHandler.java:99) at org.codehaus.xfire.service.binding.ServiceInvocationHandler.execute(ServiceInvocationHandler.java:134) at org.codehaus.xfire.service.binding.ServiceInvocationHandler.invoke(ServiceInvocationHandler.java:109) at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:131) at org.codehaus.xfire.transport.DefaultEndpoint.onReceive(DefaultEndpoint.java:64) at org.codehaus.xfire.transport.AbstractChannel.receive(AbstractChannel.java:38) at org.codehaus.xfire.transport.http.XFireServletController.invoke(XFireServletController.java:304) at org.codehaus.xfire.transport.http.XFireServletController.doService(XFireServletController.java:129) at org.codehaus.xfire.spring.remoting.XFireServletControllerAdapter.handleRequest(XFireServletControllerAdapter.java:67) at org.codehaus.xfire.spring.remoting.XFireExporter.handleRequest(XFireExporter.java:48) at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:857) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:792) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:461) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:426) at javax.servlet.http.HttpServlet.service(HttpServlet.java:709) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) 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:595)
Hide
Martin Andres Marquez added a comment -

Franck,

Look at XFIRE-1081 where I posted a patch.

Show
Martin Andres Marquez added a comment - Franck, Look at XFIRE-1081 where I posted a patch.
Hide
Jean-Louis Pinheiro added a comment -

Martin,

I have the same problem and the same configuration as Franck.
Your patch seems to solve this issue and my service returns the security headers when an exception occurs.
The problem is that the soap fault doesn't have a detail element, and I then always obtain a org.codehaus.xfire.XFireRuntimeException instead of my functional exception.

Here is the stacktrace I obtain :
org.codehaus.xfire.XFireRuntimeException: Exception while calling: http://localhost:8082/SOFFWK_METIER_WAR/remoting/SecureSimulationService arguments: java.util.GregorianCalendar : java.util.GregorianCalendar[time=1188305504562,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Europe/Paris",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=184,lastRule=java.util.SimpleTimeZone[id=Europe/Paris,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]],firstDayOfWeek=2,minimalDaysInFirstWeek=4,ERA=1,YEAR=2007,MONTH=7,WEEK_OF_YEAR=35,WEEK_OF_MONTH=5,DAY_OF_MONTH=28,DAY_OF_YEAR=240,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=2,HOUR_OF_DAY=14,MINUTE=51,SECOND=44,MILLISECOND=562,ZONE_OFFSET=3600000,DST_OFFSET=3600000] |. Nested exception is org.codehaus.xfire.fault.XFireFault: Erreur pour de faux

The XFireFault should be converted to the functional exception thrown ...

Do you have an idea ?

Show
Jean-Louis Pinheiro added a comment - Martin, I have the same problem and the same configuration as Franck. Your patch seems to solve this issue and my service returns the security headers when an exception occurs. The problem is that the soap fault doesn't have a detail element, and I then always obtain a org.codehaus.xfire.XFireRuntimeException instead of my functional exception. Here is the stacktrace I obtain : org.codehaus.xfire.XFireRuntimeException: Exception while calling: http://localhost:8082/SOFFWK_METIER_WAR/remoting/SecureSimulationService arguments: java.util.GregorianCalendar : java.util.GregorianCalendar[time=1188305504562,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Europe/Paris",offset=3600000,dstSavings=3600000,useDaylight=true,transitions=184,lastRule=java.util.SimpleTimeZone[id=Europe/Paris,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]],firstDayOfWeek=2,minimalDaysInFirstWeek=4,ERA=1,YEAR=2007,MONTH=7,WEEK_OF_YEAR=35,WEEK_OF_MONTH=5,DAY_OF_MONTH=28,DAY_OF_YEAR=240,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=2,HOUR_OF_DAY=14,MINUTE=51,SECOND=44,MILLISECOND=562,ZONE_OFFSET=3600000,DST_OFFSET=3600000] |. Nested exception is org.codehaus.xfire.fault.XFireFault: Erreur pour de faux The XFireFault should be converted to the functional exception thrown ... Do you have an idea ?

People

Vote (1)
Watch (2)

Dates

  • Created:
    Updated: