Author: dvaleri
Date: Thu Jul 22 21:03:24 2010
New Revision: 966856
URL: http://svn.apache.org/viewvc?rev=966856&view=rev
Log:
Merged revisions 966845,966853 via svnmerge from
https://svn.apache.org/repos/asf/cxf/trunk
........
r966845 | dvaleri | 2010-07-22 16:20:36 -0400 (Thu, 22 Jul 2010) | 1 line
[CXF-2906] Added cache abstraction and configuration options for WS-A
MessageID caching and uniqueness enforcement.
........
r966853 | dvaleri | 2010-07-22 16:44:25 -0400 (Thu, 22 Jul 2010) | 1 line
[CXF-2906] Removed accidentally introduced Mina dependency.
........
Added:
cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/DefaultMessageIdCache.java
(with props)
cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MessageIdCache.java
(with props)
Modified:
cxf/branches/2.2.x-fixes/ (props changed)
cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java
cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/WSAddressingFeature.java
cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/spring/AddressingBeanDefinitionParser.java
cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/resources/schemas/ws-addr-conf.xsd
cxf/branches/2.2.x-fixes/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/MAPAggregatorTest.java
cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addressing/spring/WSAFeatureXmlTest.java
cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addressing/spring/spring.xml
Propchange: cxf/branches/2.2.x-fixes/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Thu Jul 22 21:03:24 2010
@@ -1 +1 @@
-/cxf/trunk:965966,966026,966762
+/cxf/trunk:965966,966026,966762,966845-966853
Propchange: cxf/branches/2.2.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Added:
cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/DefaultMessageIdCache.java
URL:
http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/DefaultMessageIdCache.java?rev=966856&view=auto
==============================================================================
---
cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/DefaultMessageIdCache.java
(added)
+++
cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/DefaultMessageIdCache.java
Thu Jul 22 21:03:24 2010
@@ -0,0 +1,45 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cxf.ws.addressing;
+
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * An implementation that uses a simple set to store received message IDs.
+ * Note that this implementation does not make any attempt to flush older
+ * message IDs or to persist the message IDs outside of this instance.
+ */
+public class DefaultMessageIdCache implements MessageIdCache {
+
+ /**
+ * The set of message IDs.
+ */
+ private final Map<String, Boolean> messageIdSet =
+ new ConcurrentHashMap<String, Boolean>();
+
+ public boolean checkUniquenessAndCacheId(String messageId) {
+ return this.messageIdSet.put(messageId, Boolean.TRUE) == null;
+ }
+
+ protected Set<String> getMessageIdSet() {
+ return this.messageIdSet.keySet();
+ }
+}
Propchange:
cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/DefaultMessageIdCache.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java
URL:
http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java?rev=966856&r1=966855&r2=966856&view=diff
==============================================================================
---
cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java
(original)
+++
cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java
Thu Jul 22 21:03:24 2010
@@ -25,7 +25,6 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;
-import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -81,11 +80,9 @@ public class MAPAggregator extends Abstr
/**
- * REVISIT: map usage implies that the *same* interceptor instance
- * is used in all chains.
+ * The cache to use for enforcing uniqueness. Defaults to {...@link
DefaultMessageIdCache}.
*/
- protected final Map<String, String> messageIDs =
- new ConcurrentHashMap<String, String>();
+ private MessageIdCache messageIdCache = new DefaultMessageIdCache();
private boolean usingAddressingAdvisory = true;
private boolean addressingRequired;
@@ -156,7 +153,31 @@ public class MAPAggregator extends Abstr
addressingRequired = required;
}
-
+ /**
+ * Returns the cache used to enforce duplicate message IDs when
+ * {...@link #allowDuplicates()} returns {...@code false}.
+ *
+ * @return the cache used to enforce duplicate message IDs
+ */
+ public MessageIdCache getMessageIdCache() {
+ return messageIdCache;
+ }
+
+ /**
+ * Sets the cache used to enforce duplicate message IDs when
+ * {...@link #allowDuplicates()} returns {...@code false}.
+ *
+ * @param messageIdCache the cache to use
+ *
+ * @throws NullPointerException if {...@code messageIdCache} is {...@code
null}
+ */
+ public void setMessageIdCache(MessageIdCache messageIdCache) {
+ if (messageIdCache == null) {
+ throw new NullPointerException("messageIdCache cannot be null.");
+ }
+ this.messageIdCache = messageIdCache;
+ }
+
/**
* Invoked for normal processing of inbound and outbound messages.
*
@@ -954,8 +975,7 @@ public class MAPAggregator extends Abstr
if (!allowDuplicates) {
AttributedURIType messageID = maps.getMessageID();
if (messageID != null
- && messageIDs.put(messageID.getValue(),
- messageID.getValue()) != null) {
+ &&
!messageIdCache.checkUniquenessAndCacheId(messageID.getValue())) {
LOG.log(Level.WARNING,
"DUPLICATE_MESSAGE_ID_MSG",
messageID.getValue());
Added:
cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MessageIdCache.java
URL:
http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MessageIdCache.java?rev=966856&view=auto
==============================================================================
---
cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MessageIdCache.java
(added)
+++
cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MessageIdCache.java
Thu Jul 22 21:03:24 2010
@@ -0,0 +1,38 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cxf.ws.addressing;
+
+/**
+ * Interface abstracting various ID caches for enforcement of ID uniqueness.
+ */
+public interface MessageIdCache {
+
+ /**
+ * Check {...@code messageId} for uniqueness against previously
+ * encountered values and cache the ID. Note that the retention
+ * policy for previously encountered values is implementation specific.
+ *
+ * @param messageId the message ID to check for uniqueness and cache for
+ * future comparison
+ *
+ * @return true if and only if {...@code messageId} is not already in the
+ * cache
+ */
+ boolean checkUniquenessAndCacheId(String messageId);
+}
Propchange:
cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MessageIdCache.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/WSAddressingFeature.java
URL:
http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/WSAddressingFeature.java?rev=966856&r1=966855&r2=966856&view=diff
==============================================================================
---
cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/WSAddressingFeature.java
(original)
+++
cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/WSAddressingFeature.java
Thu Jul 22 21:03:24 2010
@@ -67,5 +67,25 @@ public class WSAddressingFeature extends
mapAggregator.setAddressingRequired(required);
}
-
+ /**
+ * Returns the cache used to enforce duplicate message IDs when
+ * {...@link #isAllowDuplicates()} returns {...@code false}.
+ *
+ * @return the cache used to enforce duplicate message IDs
+ */
+ public MessageIdCache getMessageIdCache() {
+ return mapAggregator.getMessageIdCache();
+ }
+
+ /**
+ * Sets the cache used to enforce duplicate message IDs when
+ * {...@link #isAllowDuplicates()} returns {...@code false}.
+ *
+ * @param messageIdCache the cache to use
+ *
+ * @throws NullPointerException if {...@code messageIdCache} is {...@code
null}
+ */
+ public void setMessageIdCache(MessageIdCache messageIdCache) {
+ mapAggregator.setMessageIdCache(messageIdCache);
+ }
}
Modified:
cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/spring/AddressingBeanDefinitionParser.java
URL:
http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/spring/AddressingBeanDefinitionParser.java?rev=966856&r1=966855&r2=966856&view=diff
==============================================================================
---
cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/spring/AddressingBeanDefinitionParser.java
(original)
+++
cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/spring/AddressingBeanDefinitionParser.java
Thu Jul 22 21:03:24 2010
@@ -20,14 +20,13 @@ package org.apache.cxf.ws.addressing.spr
import org.w3c.dom.Element;
+import org.apache.cxf.configuration.spring.AbstractBeanDefinitionParser;
import org.apache.cxf.ws.addressing.WSAddressingFeature;
-import
org.springframework.beans.factory.xml.AbstractSimpleBeanDefinitionParser;
-public class AddressingBeanDefinitionParser extends
AbstractSimpleBeanDefinitionParser {
+public class AddressingBeanDefinitionParser extends
AbstractBeanDefinitionParser {
@Override
protected Class getBeanClass(Element arg0) {
return WSAddressingFeature.class;
}
-
}
Modified:
cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/resources/schemas/ws-addr-conf.xsd
URL:
http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/resources/schemas/ws-addr-conf.xsd?rev=966856&r1=966855&r2=966856&view=diff
==============================================================================
---
cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/resources/schemas/ws-addr-conf.xsd
(original)
+++
cxf/branches/2.2.x-fixes/rt/ws/addr/src/main/resources/schemas/ws-addr-conf.xsd
Thu Jul 22 21:03:24 2010
@@ -30,6 +30,7 @@
<xs:attribute name="allowDuplicates" type="xs:boolean"/>
<xs:attribute name="usingAddressingAdvisory" type="xs:boolean"/>
<xs:attribute name="addressingRequired" type="xs:boolean"/>
+ <xs:attribute name="messageIdCache" type="xs:string"/>
</xs:complexType>
</xs:element>
Modified:
cxf/branches/2.2.x-fixes/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/MAPAggregatorTest.java
URL:
http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/MAPAggregatorTest.java?rev=966856&r1=966855&r2=966856&view=diff
==============================================================================
---
cxf/branches/2.2.x-fixes/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/MAPAggregatorTest.java
(original)
+++
cxf/branches/2.2.x-fixes/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/MAPAggregatorTest.java
Thu Jul 22 21:03:24 2010
@@ -253,7 +253,7 @@ public class MAPAggregatorTest extends A
@Test(expected = SoapFault.class)
public void testResponderInboundInvalidMAPs() throws Exception {
- aggregator.messageIDs.put("urn:uuid:12345", "urn:uuid:12345");
+
aggregator.getMessageIdCache().checkUniquenessAndCacheId("urn:uuid:12345");
Message message = setUpMessage(false, false, false, false, false,
false, true);
aggregator.setAllowDuplicates(false);
aggregator.mediate(message, false);
@@ -263,7 +263,7 @@ public class MAPAggregatorTest extends A
@Test(expected = SoapFault.class)
public void testResponderInboundInvalidMAPsFault() throws Exception {
- aggregator.messageIDs.put("urn:uuid:12345", "urn:uuid:12345");
+
aggregator.getMessageIdCache().checkUniquenessAndCacheId("urn:uuid:12345");
Message message = setUpMessage(false, false, false, false, false,
false, true);
aggregator.setAllowDuplicates(false);
aggregator.mediate(message, true);
@@ -574,7 +574,8 @@ public class MAPAggregatorTest extends A
setUpRebase(message, exchange);
}
}
- if (outbound || aggregator.messageIDs.size() > 0) {
+ if (outbound || ((DefaultMessageIdCache)
aggregator.getMessageIdCache())
+ .getMessageIdSet().size() > 0) {
if (!zeroLengthAction) {
Method method = SEI.class.getMethod("op", new Class[0]);
setUpMethod(message, exchange, method);
Modified:
cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addressing/spring/WSAFeatureXmlTest.java
URL:
http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addressing/spring/WSAFeatureXmlTest.java?rev=966856&r1=966855&r2=966856&view=diff
==============================================================================
---
cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addressing/spring/WSAFeatureXmlTest.java
(original)
+++
cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addressing/spring/WSAFeatureXmlTest.java
Thu Jul 22 21:03:24 2010
@@ -33,6 +33,7 @@ import org.apache.cxf.jaxws.JaxWsProxyFa
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
import org.apache.cxf.test.AbstractCXFTest;
import org.apache.cxf.testutil.common.TestUtil;
+import org.apache.cxf.ws.addressing.DefaultMessageIdCache;
import org.apache.cxf.ws.addressing.MAPAggregator;
import org.apache.cxf.ws.addressing.soap.MAPCodec;
import org.apache.hello_world_soap_http.Greeter;
@@ -82,15 +83,22 @@ public class WSAFeatureXmlTest extends A
private void checkAddressInterceptors(List<Interceptor> interceptors) {
boolean hasAg = false;
boolean hasCodec = false;
+ Object cache = null;
for (Interceptor i : interceptors) {
if (i instanceof MAPAggregator) {
hasAg = true;
+ cache = ((MAPAggregator) i).getMessageIdCache();
} else if (i instanceof MAPCodec) {
hasCodec = true;
}
}
+
+ assertTrue(cache instanceof TestCache);
assertTrue(hasAg);
assertTrue(hasCodec);
}
+
+ public static class TestCache extends DefaultMessageIdCache {
+ }
}
Modified:
cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addressing/spring/spring.xml
URL:
http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addressing/spring/spring.xml?rev=966856&r1=966855&r2=966856&view=diff
==============================================================================
---
cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addressing/spring/spring.xml
(original)
+++
cxf/branches/2.2.x-fixes/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addressing/spring/spring.xml
Thu Jul 22 21:03:24 2010
@@ -30,14 +30,16 @@ http://www.springframework.org/schema/be
<jaxws:server id="server" abstract="true">
<jaxws:features>
- <wsa:addressing allowDuplicates="false"/>
+ <wsa:addressing allowDuplicates="false" messageIdCache="#cache"/>
</jaxws:features>
</jaxws:server>
<jaxws:client id="client" abstract="true">
<jaxws:features>
- <wsa:addressing allowDuplicates="false"/>
+ <wsa:addressing allowDuplicates="false" messageIdCache="#cache"/>
</jaxws:features>
</jaxws:client>
+ <bean id="cache"
+
class="org.apache.cxf.systest.ws.addressing.spring.WSAFeatureXmlTest$TestCache"/>
</beans>