Ok, I solved this one. I'm not even sure why I ever thought it worked the way I 
had it. This is probably obvious to mostly everyone, but for anyone who is 
interested, this is what I found: the schema for the wsa:addressing feature 
lists messageIdCache as being an attribute on the addressing element of type 
xs:string, and doesn't list any sub-elements. So what I had clearly wouldn't 
work. Further, if I try to set the messageIdCache attribute to the id of my 
cache's bean, Spring will choke, because a string is not a MessageIdCache. So I 
had to ditch the wsa:addressing feature notation and use regular bean notation:

<jaxws:features>
        <bean class="org.apache.cxf.ws.addressing.WSAddressingFeature">
                <property name="allowDuplicates" value="false"/>
                        <property name="messageIdCache" 
ref="iamMessageIdCache"/>
        </bean>
</jaxws:features>

Once everything was wired up correctly, then everything worked as expected.

Thanx,

Stephen W. Chappell

-----Original Message-----
From: Chappell, Stephen CTR (FAA) 
Sent: Monday, May 11, 2015 1:42 PM
To: users@cxf.apache.org
Subject: Implementing a Custom Message Id Cache

Hi -

I have a requirement to prevent duplicate message id's for a period of at least 
5 minutes, but not forever. It looks like the DefaultMessageIdCache will cache 
them forever. So, some time ago, I implemented a custom cache that derives from 
org.apache.cxf.ws.addressing.MessageIdCache, and uses ehcache under the hood. I 
thought that that was working ok. But apparently the cached data is not 
expiring, and as far as I can tell, my custom MessageIdCache is never even 
being called. This is how I wired it up:

    <jaxws:endpoint id="CXFSTS-BST" implementor="#bstSTSProviderBean"
        address="/STS-BST" wsdlLocation="/WEB-INF/wsdl/FAA-IAM-STS.wsdl"
        xmlns:ns1="http://docs.oasis-open.org/ws-sx/ws-trust/200512/";
        serviceName="ns1:BSTSecurityTokenService" endpointName="ns1:STS_Port">
        <jaxws:features>
            <wsa:addressing allowDuplicates="false">
                <property name="messageIdCache" ref="iamMessageIdCache"/>
            </wsa:addressing>
        </jaxws:features>
                ...

I grabbed that property from somewhere, but I can't find it now; is there some 
other way that I can specify my own message id cache? I'm using CXF 2.7.13.

Thanx,
Stephen W. Chappell

Reply via email to