Using Xfire 1.2.4, I've succeeded doing this with a services.xml. The problem
is that on service side, I throw a FaultInfoException with a detail, and on
client side I catch a XFireRuntimeException without this detail. No way to
get the detail exception !

The second problem is that using Xfire 1.2.5, there is a regression =>I have
the message : Unexpected EOF in prolog
 at [row,col {unknown-source}]: [1,0]
Differences between my tests in 1.2.4 and 1.2.5 : wss4j-1.5.0.jar =>
wss4j-1.5.1.jar, xbean-spring-2.7.jar => xbean-spring-2.8.jar,
xfire-all-1.2.4.jar =>xfire-all-1.2.5.jar

Conclusion : there are 2 problems (bugs ?)

My services.xml :
<beans xmlns="http://xfire.codehaus.org/config/1.0";>
        <xfire>
                <inHandlers>
                        <handler 
handlerClass="org.codehaus.xfire.util.dom.DOMInHandler" />
                        <bean 
class="org.codehaus.xfire.security.wss4j.WSS4JInHandler" xmlns="">
                                <property name="properties">
                                        <props>
                                                <prop 
key="action">Signature</prop>
                                                <prop 
key="signaturePropFile">service.properties</prop>
                                                <prop
key="passwordCallbackClass">net.xxx.astral.handler.PasswordHandler</prop>
                                        </props>
                                </property>
                        </bean>
                        <handler 
handlerClass="net.xxx.astral.handler.SecurityHandler" />
                </inHandlers>
                <outHandlers>
                        <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.xxx.astral.handler.PasswordHandler</prop>
                                    <prop key="user">wsopcvm</prop>
                                        </props>
                                </property>
                        </bean>
                </outHandlers>
                <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.xxx.astral.handler.PasswordHandler</prop>
                                    <prop key="user">wsopcvm</prop>
                                        </props>
                                </property>
                        </bean>
                </faultHandlers>
        </xfire>

        <service>
                <name>Patrimoine</name>
                <namespace>http://astral.xxx.net/Patrimoine</namespace>
                
<serviceClass>net.xxx.astral.service.PatrimoineImpl</serviceClass>
                <serviceFactory>jsr181</serviceFactory>
        </service>
</beans>


Ryan Kirkendall wrote:
> 
> This is resolved.  Registering the WSS and DOM handlers with XFire and 
> not on a service by service basis resolved the issue.  Details below:
> 
> In certain scenarios we were trying to programmatically register 
> services using the Spring API like so:
> 
> XFireExporter serviceExporter = new XFireExporter();
> XFire xfire = (XFire) SpringLoader.getInstance().getBean("xfire");
> serviceExporter.setXfire(xfire);
> serviceExporter.setServiceFactory((ServiceFactory) 
> SpringLoader.getInstance().getBean("xfire.serviceFactory"));
> serviceExporter.setName(entry.getQname().toString());
> serviceExporter.setServiceBean(serviceImpl);   
> serviceExporter.setServiceClass(this.getClass().forName(entry.getServiceInterfaces().get(0).getServiceInterface()));
> serviceExporter.afterPropertiesSet();
> //store service exporter for later use
> 
> We were registering in/out/fault security handlers with each service 
> programmatically.  This was giving the exception below, during faults. 
> It may have been a problem with the programmatic setup.
> 
> In order to get this working the security handlers had to be registered 
> on the XFire instance.
> 
> Like so:
> 
> XFire xfire = (XFire) SpringLoader.getInstance().getBean("xfire");
>                       
> List inHandlers = new ArrayList();
> inHandlers.add(new org.codehaus.xfire.util.dom.DOMInHandler());
> inHandlers.add(new WorkflowXFireWSS4JInHandler());
> inHandlers.add(new org.codehaus.xfire.util.LoggingHandler());
> 
> xfire.getInHandlers().addAll(inHandlers);
> List outHandlers = new ArrayList();
> outHandlers.add(new org.codehaus.xfire.util.dom.DOMOutHandler());
> outHandlers.add(new WorkflowXFireWSS4JOutHandler());
> outHandlers.add(new org.codehaus.xfire.util.LoggingHandler());
> xfire.getOutHandlers().addAll(outHandlers);
>                       
> List faultHandlers = new ArrayList();
> faultHandlers.add(new org.codehaus.xfire.util.dom.DOMOutHandler());
> faultHandlers.add(new WorkflowXFireWSS4JOutHandler());
> faultHandlers.add(new org.codehaus.xfire.util.LoggingHandler());
> xfire.getFaultHandlers().addAll(faultHandlers);
> 
> This could have been done via Spring.
> 
> Next, the client needs to NOT have any faults handlers registered. 
> Registering WSS handlers as fault handlers will cause problems.
> 
> Client client = Client.getInstance(userService);
> client.addOutHandler(new DOMOutHandler());
> Properties outProperties = new Properties();
> configureOutProperties(outProperties);
> client.addOutHandler(new WSS4JOutHandler(outProperties));
> client.addInHandler(new DOMInHandler());
> Properties inProperties = new Properties();
> configureOutProperties(inProperties);
> client.addInHandler(new WSS4JInHandler(inProperties));
> 
> At this point everything is working well.
> 
> Thanks,
> Ryan
> 
> 
> 
> Ryan Kirkendall wrote:
>> Did that, but I wasn't sure if this was the right way to go or not. Here 
>> are the handlers:
>> 
>> faultHandlers.add(new org.codehaus.xfire.util.dom.DOMOutHandler());
>> faultHandlers.add(new WorkflowXFireWSS4JOutHandler());
>> 
>> The exception I'm getting is below.
>> 
>> Xalan 2.7
>> Xerces 2.9 download
>> WSS4J 1.5.0 ->  1.5.1 gives NPE at different spot but fails all the same
>> 
>> These results are repeatable with
>> 
>> Xerces 2.7.1 (which is the default with the Xalan 2.7 download).
>> 
>> 
>> 
>> 2007-02-22 12:12:18,538 [http-8080-Processor24] DEBUG 
>> org.codehaus.xfire.handler.HandlerPipeline :: Invoking handler 
>> edu.iu.uis.eden.config.xfire.WorkflowXFireWSS4JOutHandler in phase user
>> 2007-02-22 12:12:18,538 [http-8080-Processor24] DEBUG 
>> org.codehaus.xfire.security.wss4j.WSS4JOutHandler :: WSDoAllSender: 
>> enter invoke()
>> 2007-02-22 12:12:18,538 [http-8080-Processor24] DEBUG 
>> org.codehaus.xfire.security.wss4j.WSS4JOutHandler :: Action: 2
>> 2007-02-22 12:12:18,538 [http-8080-Processor24] DEBUG 
>> org.codehaus.xfire.security.wss4j.WSS4JOutHandler :: Actor: null
>> 2007-02-22 12:12:18,626 [http-8080-Processor24] ERROR 
>> org.codehaus.xfire.handler.DefaultFaultHandler :: Could not send fault.
>> org.w3c.dom.DOMException: NAMESPACE_ERR: An attempt is made to create or 
>> change an object in a way which is incorrect with regard to namespaces.
>>     at org.apache.xerces.dom.CoreDocumentImpl.checkNamespaceWF(Unknown 
>> Source)
>>     at org.apache.xerces.dom.ElementNSImpl.setName(Unknown Source)
>>     at org.apache.xerces.dom.ElementNSImpl.<init>(Unknown Source)
>>     at org.apache.xerces.dom.CoreDocumentImpl.createElementNS(Unknown 
>> Source)
>>     at 
>> org.apache.ws.security.util.WSSecurityUtil.createElementInSameNamespace(WSSecurityUtil.java:519)
>>  
>> 
>>     at 
>> org.apache.ws.security.util.WSSecurityUtil.findWsseSecurityHeaderBlock(WSSecurityUtil.java:637)
>>  
>> 
>>     at 
>> org.apache.ws.security.message.WSSecHeader.insertSecurityHeader(WSSecHeader.java:134)
>>  
>> 
>>     at 
>> org.apache.ws.security.handler.WSHandler.doSenderAction(WSHandler.java:98)
>>     at 
>> org.codehaus.xfire.security.wss4j.WSS4JOutHandler.invoke(WSS4JOutHandler.java:154)
>>  
>> 
>>     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)
>>  
>> 
>> 
>> 
>> In case the last handler 'WorkflowXFireWSS4JOutHandler' looks strange. 
>> It is a subclass of WSS4JOutHandler that builds a Crypto from app config 
>> instead of a props file.  It works fine for everything but faults.
>> 
>> 
>> Ryan
>> 
>> 
>> 
>> 
>> Tomek Sztelak wrote:
>>> Try adding WSS4J and dom handlers to faultsHandlers chain.
>>>
>>> On 2/22/07, Ryan Kirkendall <[EMAIL PROTECTED]> wrote:
>>>> Hello,
>>>>
>>>> I'm using XFire with WSS4J to sign messages.  This works great, until
>>>> there is a fault.  In which case my client complains that the message
>>>> is
>>>> not signed.
>>>>
>>>> How do I sign a fault so the client does not complain the return
>>>> message
>>>> is unsigned?
>>>>
>>>> Thanks in advance,
>>>> Ryan Kirkendall
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe from this list please visit:
>>>>
>>>>     http://xircles.codehaus.org/manage_email
>>>>
>>>>
>>>
>>>
>> 
>> 
>> ---------------------------------------------------------------------
>> To unsubscribe from this list please visit:
>> 
>>    http://xircles.codehaus.org/manage_email
>> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe from this list please visit:
> 
>     http://xircles.codehaus.org/manage_email
> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Faults-not-signed-tf3273593.html#a9490664
Sent from the XFire - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe from this list please visit:

    http://xircles.codehaus.org/manage_email

Reply via email to