Hi.

I have this out/outFault interceptor:

public Sorp3Interceptor()
        throws JAXBException
    {
        super( Phase.POST_PROTOCOL, EDBHeaderType.class );
    }

    public void handleMessage( SoapMessage message )
        throws Fault
    {
        if ( isRequestor( message ) )
        {
            logger.warn( "Wrongly configured - this interceptor should only
be used serverside for outbound messages (e.g. replies) - ignoring" );
            return;
        }

        @SuppressWarnings( "unchecked" )
        Map<String, List<String>> headers = (Map<String, List<String>>)
message.get( Message.PROTOCOL_HEADERS );

        if ( headers == null )
        {
            headers = Maps.newTreeMap( String.CASE_INSENSITIVE_ORDER );
            message.put( Message.PROTOCOL_HEADERS, headers );
        }

        headers.put( "X-sorp", Arrays.asList( getSorp3HeaderValue( message
) ) );
    }


it works fine, but we see that when the response is so large that it's
streamed via file (e.g reaching the threshold for CachedOutputStream) it's
not actually received by the client:


E.g. this one will lack the header when received by client:
ID: 6
Encoding: UTF-8
Content-Type: text/xml
Headers: {X-sorp=[anonymized]}
Messages: Outbound Message (saved to tmp file):
Filename: /tmp/cxf-tmp-250758/cos4006683562610207802tmp
(message truncated to 102400 bytes)


this one works as designed:

ID: 7
Encoding: UTF-8
Content-Type: text/xml
Headers: {X-sorp=[anonymized]}
Payload: <soap:Envelope ...





--
David J. M. Karlsen - http://www.linkedin.com/in/davidkarlsen

Reply via email to