You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2012/01/12 19:31:50 UTC
svn commit: r1230685 [1/2] - in /cxf/trunk:
api/src/main/java/org/apache/cxf/ws/addressing/
rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/
rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/
rt/ws/addr/src/main/java/org/apache/cxf/ws/ad...
Author: dkulp
Date: Thu Jan 12 18:31:47 2012
New Revision: 1230685
URL: http://svn.apache.org/viewvc?rev=1230685&view=rev
Log:
Fix the split package issue for org.apache.cxf.ws.addressing
Move impls into impl subpackage, put some stubs in addressing
Make sure more classes don't use the impls (still some in RM)
Added:
cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java (with props)
cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java (with props)
cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/MessageIdCache.java
- copied, changed from r1230569, cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MessageIdCache.java
cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/Messages.properties
- copied, changed from r1230569, cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/Messages.properties
cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/Names.java (contents, props changed)
- copied, changed from r1230569, cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/Names.java
cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/VersionTransformer.java (contents, props changed)
- copied, changed from r1230569, cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/VersionTransformer.java
cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/WSAddressingFeature.java (contents, props changed)
- copied, changed from r1230569, cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/WSAddressingFeature.java
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingBuilderImpl.java (contents, props changed)
- copied, changed from r1230569, cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/AddressingBuilderImpl.java
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingConstantsImpl.java (contents, props changed)
- copied, changed from r1230569, cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/AddressingConstantsImpl.java
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingFeatureApplier.java (with props)
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingPropertiesImpl.java (contents, props changed)
- copied, changed from r1230569, cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/AddressingPropertiesImpl.java
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingWSDLExtensionLoader.java (contents, props changed)
- copied, changed from r1230569, cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/AddressingWSDLExtensionLoader.java
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/DefaultMessageIdCache.java (contents, props changed)
- copied, changed from r1230569, cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/DefaultMessageIdCache.java
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/InternalContextUtils.java (with props)
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/MAPAggregatorImpl.java (contents, props changed)
- copied, changed from r1230569, cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/MAPAggregatorImplLoader.java (contents, props changed)
- copied, changed from r1230569, cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MessageIdCache.java
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/Messages.properties (contents, props changed)
- copied, changed from r1230569, cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/Messages.properties
cxf/trunk/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/impl/
cxf/trunk/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/impl/ContextUtilsTest.java (contents, props changed)
- copied, changed from r1230569, cxf/trunk/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/ContextUtilsTest.java
cxf/trunk/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/impl/MAPAggregatorTest.java (contents, props changed)
- copied, changed from r1230569, cxf/trunk/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/MAPAggregatorTest.java
Removed:
cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/APIMessages.properties
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/AddressingBuilderImpl.java
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/AddressingConstantsImpl.java
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/AddressingPropertiesImpl.java
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/AddressingWSDLExtensionLoader.java
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/DefaultMessageIdCache.java
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MessageIdCache.java
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/Messages.properties
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/Names.java
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/VersionTransformer.java
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/WSAddressingFeature.java
cxf/trunk/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/ContextUtilsTest.java
cxf/trunk/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/MAPAggregatorTest.java
Modified:
cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/AddressingBuilder.java
cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/AddressingConstants.java
cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/AddressingProperties.java
cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/JAXWSAConstants.java
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/policy/AddressingPolicyInterceptorProvider.java
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/MAPCodec.java
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/OneWayDecoupledFaultHandler.java
cxf/trunk/rt/ws/addr/src/main/resources/META-INF/cxf/bus-extensions.txt
cxf/trunk/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/AddressingBuilderImplTest.java
cxf/trunk/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/AddressingConstantsImplTest.java
cxf/trunk/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/soap/MAPCodecTest.java
cxf/trunk/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/soap/OneWayDecoupledFaultHandlerTest.java
cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Destination.java
cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMContextUtils.java
cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMInInterceptor.java
cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMManager.java
cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMOutInterceptor.java
cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMUtils.java
cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMContextUtilsTest.java
cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMInInterceptorTest.java
cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMManagerTest.java
cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMOutInterceptorTest.java
cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/ServantTest.java
cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/soap/RMSoapInterceptorTest.java
cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/soap/SoapFaultFactoryTest.java
cxf/trunk/rt/ws/security/src/main/java/org/apache/cxf/ws/security/policy/interceptors/STSInvoker.java
cxf/trunk/services/sts/sts-core/src/main/java/org/apache/cxf/sts/interceptor/SCTOutInterceptor.java
cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addr_fromwsdl/WSAFromWSDLTest.java
cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addressing/MAPTestBase.java
cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addressing/MAPVerifier.java
cxf/trunk/systests/ws-specs/src/test/java/org/apache/cxf/systest/ws/addressing/spring/WSAFeatureXmlTest.java
Modified: cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/AddressingBuilder.java
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/AddressingBuilder.java?rev=1230685&r1=1230684&r2=1230685&view=diff
==============================================================================
--- cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/AddressingBuilder.java (original)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/AddressingBuilder.java Thu Jan 12 18:31:47 2012
@@ -24,6 +24,7 @@ import java.util.logging.Level;
import java.util.logging.Logger;
+import org.apache.cxf.common.classloader.ClassLoaderUtils;
import org.apache.cxf.common.logging.LogUtils;
import static org.apache.cxf.ws.addressing.JAXWSAConstants.DEFAULT_ADDRESSING_BUILDER;
@@ -39,7 +40,7 @@ import static org.apache.cxf.ws.addressi
public abstract class AddressingBuilder implements AddressingType {
private static final Logger LOG =
- LogUtils.getL7dLogger(AddressingBuilder.class, "APIMessages");
+ LogUtils.getL7dLogger(AddressingBuilder.class);
private static AddressingBuilder builder;
/**
@@ -58,7 +59,7 @@ public abstract class AddressingBuilder
if (builder == null) {
String className = DEFAULT_ADDRESSING_BUILDER;
try {
- Class<?> cls = Class.forName(className);
+ Class<?> cls = ClassLoaderUtils.loadClass(className, AddressingBuilder.class);
builder = (AddressingBuilder)cls.newInstance();
} catch (ClassNotFoundException cnfe) {
cnfe.printStackTrace();
Modified: cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/AddressingConstants.java
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/AddressingConstants.java?rev=1230685&r1=1230684&r2=1230685&view=diff
==============================================================================
--- cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/AddressingConstants.java (original)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/AddressingConstants.java Thu Jan 12 18:31:47 2012
@@ -115,11 +115,6 @@ public interface AddressingConstants {
QName getAddressQName();
/**
- * @return package name of the implementation
- */
- String getPackageName();
-
- /**
* @return QName of the reference parameter marker
*/
QName getIsReferenceParameterQName();
Modified: cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/AddressingProperties.java
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/AddressingProperties.java?rev=1230685&r1=1230684&r2=1230685&view=diff
==============================================================================
--- cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/AddressingProperties.java (original)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/AddressingProperties.java Thu Jan 12 18:31:47 2012
@@ -19,6 +19,10 @@
package org.apache.cxf.ws.addressing;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
/**
* Abstraction of Message Addressing Properties.
@@ -120,4 +124,21 @@ public interface AddressingProperties ex
* @param iri new value for Action property
*/
void setAction(AttributedURIType iri);
+
+ /**
+ * Used to specify a different WS-Addressing namespace URI,
+ * so as to cause MAPs to be exposed (i.e. encoded in externalized
+ * message with a different WS-Addressing version).
+ *
+ * @return WS-Addressing namespace URI
+ */
+ void exposeAs(String uri);
+
+
+ AddressingProperties createCompatibleResponseProperties();
+
+ QName getDuplicate();
+ void setDuplicate(QName qn);
+ List<QName> getMustUnderstand();
+
}
Added: cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java?rev=1230685&view=auto
==============================================================================
--- cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java (added)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java Thu Jan 12 18:31:47 2012
@@ -0,0 +1,643 @@
+/**
+ * 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.io.IOException;
+import java.io.InputStream;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.UUID;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.endpoint.Endpoint;
+import org.apache.cxf.jaxb.JAXBContextCache;
+import org.apache.cxf.jaxb.JAXBContextCache.CachedContextAndSchemas;
+import org.apache.cxf.message.Exchange;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.message.MessageImpl;
+import org.apache.cxf.service.model.EndpointInfo;
+import org.apache.cxf.transport.Conduit;
+import org.apache.cxf.transport.ConduitInitiator;
+import org.apache.cxf.transport.ConduitInitiatorManager;
+import org.apache.cxf.transport.Destination;
+import org.apache.cxf.transport.MessageObserver;
+import org.apache.cxf.wsdl.EndpointReferenceUtils;
+
+import static org.apache.cxf.message.Message.ASYNC_POST_RESPONSE_DISPATCH;
+import static org.apache.cxf.message.Message.REQUESTOR_ROLE;
+
+import static org.apache.cxf.ws.addressing.JAXWSAConstants.CLIENT_ADDRESSING_PROPERTIES;
+import static org.apache.cxf.ws.addressing.JAXWSAConstants.CLIENT_ADDRESSING_PROPERTIES_INBOUND;
+import static org.apache.cxf.ws.addressing.JAXWSAConstants.CLIENT_ADDRESSING_PROPERTIES_OUTBOUND;
+import static org.apache.cxf.ws.addressing.JAXWSAConstants.SERVER_ADDRESSING_PROPERTIES_INBOUND;
+import static org.apache.cxf.ws.addressing.JAXWSAConstants.SERVER_ADDRESSING_PROPERTIES_OUTBOUND;
+
+
+/**
+ * Holder for utility methods relating to contexts.
+ */
+public final class ContextUtils {
+
+ public static final ObjectFactory WSA_OBJECT_FACTORY = new ObjectFactory();
+ public static final String ACTION = ContextUtils.class.getName() + ".ACTION";
+
+ private static final EndpointReferenceType NONE_ENDPOINT_REFERENCE =
+ EndpointReferenceUtils.getEndpointReference(Names.WSA_NONE_ADDRESS);
+
+ private static final Logger LOG = LogUtils.getL7dLogger(ContextUtils.class);
+
+ /**
+ * Used to fabricate a Uniform Resource Name from a UUID string
+ */
+ private static final String URN_UUID = "urn:uuid:";
+
+ private static JAXBContext jaxbContext;
+ private static Set<Class<?>> jaxbContextClasses;
+
+ /**
+ * Used by MAPAggregator to cache bad MAP fault name
+ */
+ private static final String MAP_FAULT_NAME_PROPERTY =
+ "org.apache.cxf.ws.addressing.map.fault.name";
+
+ /**
+ * Used by MAPAggregator to cache bad MAP fault reason
+ */
+ private static final String MAP_FAULT_REASON_PROPERTY =
+ "org.apache.cxf.ws.addressing.map.fault.reason";
+
+ /**
+ * Indicates a partial response has already been sent
+ */
+ private static final String PARTIAL_REPONSE_SENT_PROPERTY =
+ "org.apache.cxf.ws.addressing.partial.response.sent";
+
+ /**
+ * Prevents instantiation.
+ */
+ private ContextUtils() {
+ }
+
+ /**
+ * Determine if message is outbound.
+ *
+ * @param message the current Message
+ * @return true iff the message direction is outbound
+ */
+ public static boolean isOutbound(Message message) {
+ Exchange exchange = message.getExchange();
+ return message != null
+ && exchange != null
+ && (message == exchange.getOutMessage()
+ || message == exchange.getOutFaultMessage());
+ }
+
+ /**
+ * Determine if message is fault.
+ *
+ * @param message the current Message
+ * @return true iff the message is a fault
+ */
+ public static boolean isFault(Message message) {
+ return message != null
+ && message.getExchange() != null
+ && (message == message.getExchange().getInFaultMessage()
+ || message == message.getExchange().getOutFaultMessage());
+ }
+
+ /**
+ * Determine if current messaging role is that of requestor.
+ *
+ * @param message the current Message
+ * @return true if the current messaging role is that of requestor
+ */
+ public static boolean isRequestor(Message message) {
+ Boolean requestor = (Boolean)message.get(REQUESTOR_ROLE);
+ return requestor != null && requestor.booleanValue();
+ }
+
+ /**
+ * Get appropriate property name for message addressing properties.
+ *
+ * @param isProviderContext true if the binding provider request context
+ * available to the client application as opposed to the message context
+ * visible to handlers
+ * @param isRequestor true if the current messaging role is that of
+ * requestor
+ * @param isOutbound true if the message is outbound
+ * @return the property name to use when caching the MAPs in the context
+ */
+ public static String getMAPProperty(boolean isRequestor,
+ boolean isProviderContext,
+ boolean isOutbound) {
+ return isRequestor
+ ? isProviderContext
+ ? CLIENT_ADDRESSING_PROPERTIES
+ : isOutbound
+ ? CLIENT_ADDRESSING_PROPERTIES_OUTBOUND
+ : CLIENT_ADDRESSING_PROPERTIES_INBOUND
+ : isOutbound
+ ? SERVER_ADDRESSING_PROPERTIES_OUTBOUND
+ : SERVER_ADDRESSING_PROPERTIES_INBOUND;
+ }
+
+ /**
+ * Store MAPs in the message.
+ *
+ * @param message the current message
+ * @param isOutbound true if the message is outbound
+ */
+ public static void storeMAPs(AddressingProperties maps,
+ Message message,
+ boolean isOutbound) {
+ storeMAPs(maps, message, isOutbound, isRequestor(message), false);
+ }
+
+ /**
+ * Store MAPs in the message.
+ *
+ * @param maps the MAPs to store
+ * @param message the current message
+ * @param isOutbound true if the message is outbound
+ * @param isRequestor true if the current messaging role is that of
+ * requestor
+ * @param handler true if HANDLER scope, APPLICATION scope otherwise
+ */
+ public static void storeMAPs(AddressingProperties maps,
+ Message message,
+ boolean isOutbound,
+ boolean isRequestor) {
+ storeMAPs(maps, message, isOutbound, isRequestor, false);
+ }
+
+ /**
+ * Store MAPs in the message.
+ *
+ * @param maps the MAPs to store
+ * @param message the current message
+ * @param isOutbound true if the message is outbound
+ * @param isRequestor true if the current messaging role is that of
+ * requestor
+ * @param handler true if HANDLER scope, APPLICATION scope otherwise
+ * @param isProviderContext true if the binding provider request context
+ */
+ public static void storeMAPs(AddressingProperties maps,
+ Message message,
+ boolean isOutbound,
+ boolean isRequestor,
+ boolean isProviderContext) {
+ if (maps != null) {
+ String mapProperty = getMAPProperty(isRequestor, isProviderContext, isOutbound);
+ LOG.log(Level.FINE,
+ "associating MAPs with context property {0}",
+ mapProperty);
+ message.put(mapProperty, maps);
+ }
+ }
+
+ /**
+ * @param message the current message
+ * @param isProviderContext true if the binding provider request context
+ * available to the client application as opposed to the message context
+ * visible to handlers
+ * @param isOutbound true if the message is outbound
+ * @return the current addressing properties
+ */
+ public static AddressingProperties retrieveMAPs(
+ Message message,
+ boolean isProviderContext,
+ boolean isOutbound) {
+ return retrieveMAPs(message, isProviderContext, isOutbound, true);
+ }
+
+ /**
+ * @param message the current message
+ * @param isProviderContext true if the binding provider request context
+ * available to the client application as opposed to the message context
+ * visible to handlers
+ * @param isOutbound true if the message is outbound
+ * @param warnIfMissing log a warning message if properties cannot be retrieved
+ * @return the current addressing properties
+ */
+ public static AddressingProperties retrieveMAPs(
+ Message message,
+ boolean isProviderContext,
+ boolean isOutbound,
+ boolean warnIfMissing) {
+ boolean isRequestor = ContextUtils.isRequestor(message);
+ String mapProperty =
+ ContextUtils.getMAPProperty(isProviderContext,
+ isRequestor,
+ isOutbound);
+ LOG.log(Level.FINE,
+ "retrieving MAPs from context property {0}",
+ mapProperty);
+
+ AddressingProperties maps =
+ (AddressingProperties)message.get(mapProperty);
+ if (maps == null && isOutbound && !isRequestor
+ && message.getExchange() != null && message.getExchange().getInMessage() != null) {
+ maps = (AddressingProperties)message.getExchange().getInMessage().get(mapProperty);
+ }
+
+ if (maps != null) {
+ LOG.log(Level.FINE, "current MAPs {0}", maps);
+ } else if (!isProviderContext) {
+ LogUtils.log(LOG, warnIfMissing ? Level.WARNING : Level.FINE,
+ "MAPS_RETRIEVAL_FAILURE_MSG");
+ }
+ return maps;
+ }
+
+ /**
+ * Helper method to get an attributed URI.
+ *
+ * @param uri the URI
+ * @return an AttributedURIType encapsulating the URI
+ */
+ public static AttributedURIType getAttributedURI(String uri) {
+ AttributedURIType attributedURI =
+ WSA_OBJECT_FACTORY.createAttributedURIType();
+ attributedURI.setValue(uri);
+ return attributedURI;
+ }
+
+ /**
+ * Helper method to get a RealtesTo instance.
+ *
+ * @param uri the related URI
+ * @return a RelatesToType encapsulating the URI
+ */
+ public static RelatesToType getRelatesTo(String uri) {
+ RelatesToType relatesTo =
+ WSA_OBJECT_FACTORY.createRelatesToType();
+ relatesTo.setValue(uri);
+ return relatesTo;
+ }
+
+ /**
+ * Helper method to determine if an EPR address is generic (either null,
+ * none or anonymous).
+ *
+ * @param ref the EPR under test
+ * @return true if the address is generic
+ */
+ public static boolean isGenericAddress(EndpointReferenceType ref) {
+ return ref == null
+ || ref.getAddress() == null
+ || Names.WSA_ANONYMOUS_ADDRESS.equals(ref.getAddress().getValue())
+ || Names.WSA_NONE_ADDRESS.equals(ref.getAddress().getValue());
+ }
+
+ /**
+ * Helper method to determine if an EPR address is none.
+ *
+ * @param ref the EPR under test
+ * @return true if the address is generic
+ */
+ public static boolean isNoneAddress(EndpointReferenceType ref) {
+ return ref != null
+ && ref.getAddress() != null
+ && Names.WSA_NONE_ADDRESS.equals(ref.getAddress().getValue());
+ }
+
+ /**
+ * Helper method to determine if an MAPs Action is empty (a null action
+ * is considered empty, whereas a zero length action suppresses
+ * the propagation of the Action property).
+ *
+ * @param ref the MAPs Action under test
+ * @return true if the Action is empty
+ */
+ public static boolean hasEmptyAction(AddressingProperties maps) {
+ boolean empty = maps.getAction() == null;
+ if (maps.getAction() != null
+ && maps.getAction().getValue().length() == 0) {
+ maps.setAction(null);
+ empty = false;
+ }
+ return empty;
+ }
+
+
+ /**
+ * Propagate inbound MAPs onto full reponse & fault messages.
+ *
+ * @param inMAPs the inbound MAPs
+ * @param exchange the current Exchange
+ */
+ public static void propogateReceivedMAPs(AddressingProperties inMAPs,
+ Exchange exchange) {
+ if (exchange.getOutMessage() == null) {
+ exchange.setOutMessage(createMessage(exchange));
+ }
+ propogateReceivedMAPs(inMAPs, exchange.getOutMessage());
+ if (exchange.getOutFaultMessage() == null) {
+ exchange.setOutFaultMessage(createMessage(exchange));
+ }
+ propogateReceivedMAPs(inMAPs, exchange.getOutFaultMessage());
+ }
+
+ /**
+ * Propogate inbound MAPs onto reponse message if applicable
+ * (not applicable for oneways).
+ *
+ * @param inMAPs the inbound MAPs
+ * @param responseMessage
+ */
+ public static void propogateReceivedMAPs(AddressingProperties inMAPs,
+ Message responseMessage) {
+ if (responseMessage != null) {
+ storeMAPs(inMAPs, responseMessage, false, false, false);
+ }
+ }
+
+
+ /**
+ * Store bad MAP fault name in the message.
+ *
+ * @param faultName the fault name to store
+ * @param message the current message
+ */
+ public static void storeMAPFaultName(String faultName,
+ Message message) {
+ message.put(MAP_FAULT_NAME_PROPERTY, faultName);
+ }
+
+ /**
+ * Retrieve MAP fault name from the message.
+ *
+ * @param message the current message
+ * @returned the retrieved fault name
+ */
+ public static String retrieveMAPFaultName(Message message) {
+ return (String)message.get(MAP_FAULT_NAME_PROPERTY);
+ }
+
+ /**
+ * Store MAP fault reason in the message.
+ *
+ * @param reason the fault reason to store
+ * @param message the current message
+ */
+ public static void storeMAPFaultReason(String reason,
+ Message message) {
+ message.put(MAP_FAULT_REASON_PROPERTY, reason);
+ }
+
+ /**
+ * Retrieve MAP fault reason from the message.
+ *
+ * @param message the current message
+ * @returned the retrieved fault reason
+ */
+ public static String retrieveMAPFaultReason(Message message) {
+ return (String)message.get(MAP_FAULT_REASON_PROPERTY);
+ }
+
+ /**
+ * Store an indication that a partial response has been sent.
+ * Relavant if *both* the replyTo & faultTo are decoupled,
+ * and a fault occurs, then we would already have sent the
+ * partial response (pre-dispatch) for the replyTo, so
+ * no need to send again.
+ *
+ * @param message the current message
+ */
+ public static void storePartialResponseSent(Message message) {
+ message.put(PARTIAL_REPONSE_SENT_PROPERTY, Boolean.TRUE);
+ }
+
+ /**
+ * Retrieve indication that a partial response has been sent.
+ *
+ * @param message the current message
+ * @returned the retrieved indication that a partial response
+ * has been sent
+ */
+ public static boolean retrievePartialResponseSent(Message message) {
+ Boolean ret = (Boolean)message.get(PARTIAL_REPONSE_SENT_PROPERTY);
+ return ret != null && ret.booleanValue();
+ }
+
+ /**
+ * Store indication that a deferred uncorrelated message abort is
+ * supported
+ *
+ * @param message the current message
+ */
+ public static void storeDeferUncorrelatedMessageAbort(Message message) {
+ if (message.getExchange() != null) {
+ message.getExchange().put("defer.uncorrelated.message.abort", Boolean.TRUE);
+ }
+ }
+
+ /**
+ * Retrieve indication that a deferred uncorrelated message abort is
+ * supported
+ *
+ * @param message the current message
+ * @returned the retrieved indication
+ */
+ public static boolean retrieveDeferUncorrelatedMessageAbort(Message message) {
+ Boolean ret = message.getExchange() != null
+ ? (Boolean)message.getExchange().get("defer.uncorrelated.message.abort")
+ : null;
+ return ret != null && ret.booleanValue();
+ }
+
+ /**
+ * Store indication that a deferred uncorrelated message abort should
+ * occur
+ *
+ * @param message the current message
+ */
+ public static void storeDeferredUncorrelatedMessageAbort(Message message) {
+ if (message.getExchange() != null) {
+ message.getExchange().put("deferred.uncorrelated.message.abort", Boolean.TRUE);
+ }
+ }
+
+ /**
+ * Retrieve indication that a deferred uncorrelated message abort should
+ * occur.
+ *
+ * @param message the current message
+ * @returned the retrieved indication
+ */
+ public static boolean retrieveDeferredUncorrelatedMessageAbort(Message message) {
+ Boolean ret = message.getExchange() != null
+ ? (Boolean)message.getExchange().get("deferred.uncorrelated.message.abort")
+ : null;
+ return ret != null && ret.booleanValue();
+ }
+
+ /**
+ * Retrieve indication that an async post-response service invocation
+ * is required.
+ *
+ * @param message the current message
+ * @returned the retrieved indication that an async post-response service
+ * invocation is required.
+ */
+ public static boolean retrieveAsyncPostResponseDispatch(Message message) {
+ Boolean ret = (Boolean)message.get(ASYNC_POST_RESPONSE_DISPATCH);
+ return ret != null && ret.booleanValue();
+ }
+
+ /**
+ * Retrieve a JAXBContext for marshalling and unmarshalling JAXB generated
+ * types.
+ *
+ * @return a JAXBContext
+ */
+ public static JAXBContext getJAXBContext() throws JAXBException {
+ synchronized (ContextUtils.class) {
+ if (jaxbContext == null || jaxbContextClasses == null) {
+ Set<Class<?>> tmp = new HashSet<Class<?>>();
+ JAXBContextCache.addPackage(tmp, WSA_OBJECT_FACTORY.getClass().getPackage().getName(),
+ WSA_OBJECT_FACTORY.getClass().getClassLoader());
+ JAXBContextCache.scanPackages(tmp);
+ CachedContextAndSchemas ccs
+ = JAXBContextCache.getCachedContextAndSchemas(tmp, null, null, null, false);
+ jaxbContextClasses = ccs.getClasses();
+ jaxbContext = ccs.getContext();
+ }
+ }
+ return jaxbContext;
+ }
+
+ /**
+ * Set the encapsulated JAXBContext (used by unit tests).
+ *
+ * @param ctx JAXBContext
+ */
+ public static void setJAXBContext(JAXBContext ctx) throws JAXBException {
+ synchronized (ContextUtils.class) {
+ jaxbContext = ctx;
+ jaxbContextClasses = new HashSet<Class<?>>();
+ }
+ }
+
+
+ /**
+ * @return a generated UUID
+ */
+ public static String generateUUID() {
+ return URN_UUID + UUID.randomUUID();
+ }
+
+ /**
+ * Retreive Conduit from Exchange if not already available
+ *
+ * @param conduit the current value for the Conduit
+ * @param message the current message
+ * @return the Conduit if available
+ */
+ public static Conduit getConduit(Conduit conduit, Message message) {
+ if (conduit == null) {
+ Exchange exchange = message.getExchange();
+ conduit = exchange != null ? exchange.getConduit(message) : null;
+ }
+ return conduit;
+ }
+
+ public static EndpointReferenceType getNoneEndpointReference() {
+ return NONE_ENDPOINT_REFERENCE;
+ }
+
+ public static void applyReferenceParam(EndpointReferenceType toEpr, Object el) {
+ if (null == toEpr.getReferenceParameters()) {
+ toEpr.setReferenceParameters(WSA_OBJECT_FACTORY.createReferenceParametersType());
+ }
+ toEpr.getReferenceParameters().getAny().add(el);
+ }
+
+ /**
+ * Create a Binding specific Message.
+ *
+ * @param message the current message
+ * @return the Method from the BindingOperationInfo
+ */
+ public static Message createMessage(Exchange exchange) {
+ Endpoint ep = exchange.get(Endpoint.class);
+ Message msg = null;
+ if (ep != null) {
+ msg = new MessageImpl();
+ msg.setExchange(exchange);
+ if (ep.getBinding() != null) {
+ msg = ep.getBinding().createMessage(msg);
+ }
+ }
+ return msg;
+ }
+
+ public static Destination createDecoupledDestination(Exchange exchange,
+ final EndpointReferenceType reference) {
+ final EndpointInfo ei = exchange.get(Endpoint.class).getEndpointInfo();
+ return new Destination() {
+ public EndpointReferenceType getAddress() {
+ return reference;
+ }
+ public Conduit getBackChannel(Message inMessage, Message partialResponse,
+ EndpointReferenceType address) throws IOException {
+ Bus bus = inMessage.getExchange().get(Bus.class);
+ //this is a response targeting a decoupled endpoint. Treat it as a oneway so
+ //we don't wait for a response.
+ inMessage.getExchange().setOneWay(true);
+ ConduitInitiator conduitInitiator
+ = bus.getExtension(ConduitInitiatorManager.class)
+ .getConduitInitiatorForUri(reference.getAddress().getValue());
+ if (conduitInitiator != null) {
+ Conduit c = conduitInitiator.getConduit(ei, reference);
+ //ensure decoupled back channel input stream is closed
+ c.setMessageObserver(new MessageObserver() {
+ public void onMessage(Message m) {
+ InputStream is = m.getContent(InputStream.class);
+ if (is != null) {
+ try {
+ is.close();
+ } catch (Exception e) {
+ //ignore
+ }
+ }
+ }
+ });
+ return c;
+ }
+ return null;
+ }
+ public MessageObserver getMessageObserver() {
+ return null;
+ }
+ public void shutdown() {
+ }
+ public void setMessageObserver(MessageObserver observer) {
+ }
+ };
+ }
+}
Propchange: cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/JAXWSAConstants.java
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/JAXWSAConstants.java?rev=1230685&r1=1230684&r2=1230685&view=diff
==============================================================================
--- cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/JAXWSAConstants.java (original)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/JAXWSAConstants.java Thu Jan 12 18:31:47 2012
@@ -79,7 +79,7 @@ public final class JAXWSAConstants {
* Used by AddressingBuilder factory method.
*/
public static final String DEFAULT_ADDRESSING_BUILDER =
- "org.apache.cxf.ws.addressing.AddressingBuilderImpl";
+ "org.apache.cxf.ws.addressing.impl.AddressingBuilderImpl";
/**
* Prevents instantiation.
Added: cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java?rev=1230685&view=auto
==============================================================================
--- cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java (added)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java Thu Jan 12 18:31:47 2012
@@ -0,0 +1,221 @@
+/**
+ * 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.Collection;
+
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.AbstractPhaseInterceptor;
+import org.apache.cxf.phase.Phase;
+import org.apache.cxf.phase.PhaseInterceptor;
+
+/**
+ * Logical Handler responsible for aggregating the Message Addressing
+ * Properties for outgoing messages.
+ */
+public class MAPAggregator extends AbstractPhaseInterceptor<Message> {
+ public static final String USING_ADDRESSING = MAPAggregator.class.getName() + ".usingAddressing";
+ public static final String ADDRESSING_DISABLED = MAPAggregator.class.getName() + ".addressingDisabled";
+ public static final String DECOUPLED_DESTINATION = MAPAggregator.class.getName()
+ + ".decoupledDestination";
+ public static final String ACTION_VERIFIED = MAPAggregator.class.getName() + ".actionVerified";
+
+ public interface MAPAggregatorLoader {
+ MAPAggregator createImplementation(MAPAggregator mag);
+ }
+
+ protected MessageIdCache messageIdCache;
+ protected boolean usingAddressingAdvisory = true;
+ protected boolean addressingRequired;
+ protected boolean allowDuplicates = true;
+ protected WSAddressingFeature.AddressingResponses addressingResponses
+ = WSAddressingFeature.AddressingResponses.ALL;
+
+ /**
+ * The real implementation of the MAPAggregator interceptor
+ */
+ private MAPAggregator impl;
+
+ /**
+ * Constructor.
+ */
+ public MAPAggregator() {
+ super(MAPAggregator.class.getName(), Phase.PRE_LOGICAL);
+ addBefore("org.apache.cxf.interceptor.OneWayProcessorInterceptor");
+ }
+
+ /**
+ * Indicates if duplicate messageIDs are allowed.
+ * @return true if duplicate messageIDs are allowed
+ */
+ public boolean allowDuplicates() {
+ if (impl != null) {
+ return impl.allowDuplicates();
+ }
+ return allowDuplicates;
+ }
+
+ /**
+ * Allows/disallows duplicate messageIdDs.
+ * @param ad whether duplicate messageIDs are allowed
+ */
+ public void setAllowDuplicates(boolean ad) {
+ if (impl != null) {
+ impl.setAllowDuplicates(ad);
+ }
+ allowDuplicates = ad;
+ }
+
+ /**
+ * Whether the presence of the <wsaw:UsingAddressing> element
+ * in the WSDL is purely advisory, i.e. its absence doesn't prevent
+ * the encoding of WS-A headers.
+ *
+ * @return true if the presence of the <wsaw:UsingAddressing> element is
+ * advisory
+ */
+ public boolean isUsingAddressingAdvisory() {
+ if (impl != null) {
+ return impl.isUsingAddressingAdvisory();
+ }
+ return usingAddressingAdvisory;
+ }
+
+ /**
+ * Controls whether the presence of the <wsaw:UsingAddressing> element
+ * in the WSDL is purely advisory, i.e. its absence doesn't prevent
+ * the encoding of WS-A headers.
+ *
+ * @param advisory true if the presence of the <wsaw:UsingAddressing>
+ * element is to be advisory
+ */
+ public void setUsingAddressingAdvisory(boolean advisory) {
+ if (impl != null) {
+ impl.setUsingAddressingAdvisory(advisory);
+ }
+ usingAddressingAdvisory = advisory;
+ }
+
+ /**
+ * Whether the use of addressing is completely required for this endpoint
+ *
+ * @return true if addressing is required
+ */
+ public boolean isAddressingRequired() {
+ if (impl != null) {
+ return impl.addressingRequired;
+ }
+ return addressingRequired;
+ }
+ /**
+ * Sets whether the use of addressing is completely required for this endpoint
+ *
+ */
+ public void setAddressingRequired(boolean required) {
+ if (impl != null) {
+ impl.setAddressingRequired(required);
+ }
+ addressingRequired = required;
+ }
+
+ /**
+ * Sets Addresing Response
+ *
+ */
+ public void setAddressingResponses(WSAddressingFeature.AddressingResponses responses) {
+ if (impl != null) {
+ impl.setAddressingResponses(responses);
+ }
+ addressingResponses = responses;
+ }
+
+ /**
+ * 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() {
+ if (impl != null) {
+ return impl.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.");
+ }
+ if (impl != null) {
+ impl.setMessageIdCache(messageIdCache);
+ }
+ this.messageIdCache = messageIdCache;
+ }
+
+ /**
+ * Sets Addressing Response
+ *
+ */
+ public WSAddressingFeature.AddressingResponses getAddressingResponses() {
+ if (impl != null) {
+ return impl.getAddressingResponses();
+ }
+ return addressingResponses;
+ }
+
+ /**
+ * Invoked for normal processing of inbound and outbound messages.
+ *
+ * @param message the current message
+ */
+ public void handleMessage(Message message) {
+ if (impl == null) {
+ //load impl
+ MAPAggregatorLoader loader = message.getExchange().getBus()
+ .getExtension(MAPAggregatorLoader.class);
+ impl = loader.createImplementation(this);
+ }
+ impl.handleMessage(message);
+ }
+
+ public void handleFault(Message message) {
+ if (impl != null) {
+ impl.handleFault(message);
+ }
+ }
+
+
+ public Collection<PhaseInterceptor<? extends Message>> getAdditionalInterceptors() {
+ if (impl != null) {
+ return impl.getAdditionalInterceptors();
+ }
+ return super.getAdditionalInterceptors();
+ }
+
+
+}
Propchange: cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Copied: cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/MessageIdCache.java (from r1230569, cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MessageIdCache.java)
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/MessageIdCache.java?p2=cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/MessageIdCache.java&p1=cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MessageIdCache.java&r1=1230569&r2=1230685&rev=1230685&view=diff
==============================================================================
(empty)
Copied: cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/Messages.properties (from r1230569, cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/Messages.properties)
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/Messages.properties?p2=cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/Messages.properties&p1=cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/Messages.properties&r1=1230569&r2=1230685&rev=1230685&view=diff
==============================================================================
--- cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/Messages.properties (original)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/Messages.properties Thu Jan 12 18:31:47 2012
@@ -18,6 +18,8 @@
# under the License.
#
#
+BUILDER_CLASS_NOT_FOUND_MSG = WS-Addressing builder class {0} not found
+BUILDER_INSTANTIATION_FAILED_MSG = WS-Addressing builder {0} could not be instantiated:
MAPS_RETRIEVAL_FAILURE_MSG = WS-Addressing - failed to retrieve Message Addressing Properties from context
ACTION_NOT_SUPPORTED_MSG = Action {0} not supported
DESTINATION_UNREACHABLE_MSG = Destination {0} unreachable
Copied: cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/Names.java (from r1230569, cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/Names.java)
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/Names.java?p2=cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/Names.java&p1=cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/Names.java&r1=1230569&r2=1230685&rev=1230685&view=diff
==============================================================================
--- cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/Names.java (original)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/Names.java Thu Jan 12 18:31:47 2012
@@ -25,8 +25,6 @@ import java.util.HashSet;
import java.util.Set;
import javax.xml.namespace.QName;
-import org.apache.cxf.binding.soap.SoapBindingConstants;
-
/**
* Holder for WS-Addressing names (of headers, namespaces etc.).
@@ -180,7 +178,7 @@ public final class Names {
public static final String SOAP12HTTP_ADDRESSING_BINDING =
"http://www.w3.org/2003/05/soap-envelope?addressing=ms";
- public static final String SOAP_ACTION_HEADER = SoapBindingConstants.SOAP_ACTION;
+ public static final String SOAP_ACTION_HEADER = "SOAPAction";
/**
* The set of headers understood by the protocol binding.
Propchange: cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/Names.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/Names.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Copied: cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/VersionTransformer.java (from r1230569, cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/VersionTransformer.java)
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/VersionTransformer.java?p2=cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/VersionTransformer.java&p1=cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/VersionTransformer.java&r1=1230569&r2=1230685&rev=1230685&view=diff
==============================================================================
(empty)
Propchange: cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/VersionTransformer.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/VersionTransformer.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Copied: cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/WSAddressingFeature.java (from r1230569, cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/WSAddressingFeature.java)
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/WSAddressingFeature.java?p2=cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/WSAddressingFeature.java&p1=cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/WSAddressingFeature.java&r1=1230569&r2=1230685&rev=1230685&view=diff
==============================================================================
--- cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/WSAddressingFeature.java (original)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/WSAddressingFeature.java Thu Jan 12 18:31:47 2012
@@ -22,50 +22,52 @@ import org.apache.cxf.Bus;
import org.apache.cxf.common.injection.NoJSR250Annotations;
import org.apache.cxf.feature.AbstractFeature;
import org.apache.cxf.interceptor.InterceptorProvider;
-import org.apache.cxf.ws.addressing.soap.MAPCodec;
@NoJSR250Annotations
public class WSAddressingFeature extends AbstractFeature {
- private MAPAggregator mapAggregator = new MAPAggregator();
- private MAPCodec mapCodec = new MAPCodec();
+ public static enum AddressingResponses {
+ ALL,
+ NON_ANONYMOUS,
+ ANONYMOUS,
+ }
+
+ public interface WSAddressingFeatureApplier {
+ void initializeProvider(WSAddressingFeature feature, InterceptorProvider provider, Bus bus);
+ }
+
+ boolean allowDuplicates = true;
+ boolean usingAddressingAdvisory = true;
+ boolean required;
+ MessageIdCache cache;
+ AddressingResponses responses = AddressingResponses.ALL;
@Override
protected void initializeProvider(InterceptorProvider provider, Bus bus) {
- provider.getInInterceptors().add(mapAggregator);
- provider.getInInterceptors().add(mapCodec);
-
- provider.getOutInterceptors().add(mapAggregator);
- provider.getOutInterceptors().add(mapCodec);
-
- provider.getInFaultInterceptors().add(mapAggregator);
- provider.getInFaultInterceptors().add(mapCodec);
-
- provider.getOutFaultInterceptors().add(mapAggregator);
- provider.getOutFaultInterceptors().add(mapCodec);
+ bus.getExtension(WSAddressingFeatureApplier.class).initializeProvider(this, provider, bus);
}
public void setAllowDuplicates(boolean allow) {
- mapAggregator.setAllowDuplicates(allow);
+ allowDuplicates = allow;
}
public boolean isAllowDuplicates() {
- return mapAggregator.allowDuplicates();
+ return allowDuplicates;
}
public void setUsingAddressingAdvisory(boolean advisory) {
- mapAggregator.setUsingAddressingAdvisory(advisory);
+ usingAddressingAdvisory = advisory;
}
public boolean isUsingAddressingAdvisory() {
- return mapAggregator.isUsingAddressingAdvisory();
+ return usingAddressingAdvisory;
}
public boolean isAddressingRequired() {
- return mapAggregator.isAddressingRequired();
+ return required;
}
- public void setAddressingRequired(boolean required) {
- mapAggregator.setAddressingRequired(required);
+ public void setAddressingRequired(boolean r) {
+ required = r;
}
/**
@@ -75,7 +77,7 @@ public class WSAddressingFeature extends
* @return the cache used to enforce duplicate message IDs
*/
public MessageIdCache getMessageIdCache() {
- return mapAggregator.getMessageIdCache();
+ return cache;
}
/**
@@ -87,10 +89,17 @@ public class WSAddressingFeature extends
* @throws NullPointerException if {@code messageIdCache} is {@code null}
*/
public void setMessageIdCache(MessageIdCache messageIdCache) {
- mapAggregator.setMessageIdCache(messageIdCache);
+ cache = messageIdCache;
}
-
- public void setResponses(String responses) {
- mapAggregator.setAddressingResponses(responses);
+
+ public void setResponses(AddressingResponses r) {
+ responses = r;
+ }
+ public void setResponses(String r) {
+ responses = AddressingResponses.valueOf(r);
}
+ public AddressingResponses getResponses() {
+ return responses;
+ }
+
}
Propchange: cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/WSAddressingFeature.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/WSAddressingFeature.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Copied: cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingBuilderImpl.java (from r1230569, cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/AddressingBuilderImpl.java)
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingBuilderImpl.java?p2=cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingBuilderImpl.java&p1=cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/AddressingBuilderImpl.java&r1=1230569&r2=1230685&rev=1230685&view=diff
==============================================================================
--- cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/AddressingBuilderImpl.java (original)
+++ cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingBuilderImpl.java Thu Jan 12 18:31:47 2012
@@ -17,7 +17,12 @@
* under the License.
*/
-package org.apache.cxf.ws.addressing;
+package org.apache.cxf.ws.addressing.impl;
+
+import org.apache.cxf.ws.addressing.AddressingBuilder;
+import org.apache.cxf.ws.addressing.AddressingConstants;
+import org.apache.cxf.ws.addressing.AddressingProperties;
+import org.apache.cxf.ws.addressing.Names;
/**
Propchange: cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingBuilderImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingBuilderImpl.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Copied: cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingConstantsImpl.java (from r1230569, cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/AddressingConstantsImpl.java)
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingConstantsImpl.java?p2=cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingConstantsImpl.java&p1=cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/AddressingConstantsImpl.java&r1=1230569&r2=1230685&rev=1230685&view=diff
==============================================================================
--- cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/AddressingConstantsImpl.java (original)
+++ cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingConstantsImpl.java Thu Jan 12 18:31:47 2012
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.cxf.ws.addressing;
+package org.apache.cxf.ws.addressing.impl;
import java.util.ResourceBundle;
@@ -26,6 +26,8 @@ import javax.xml.namespace.QName;
import org.apache.cxf.common.i18n.BundleUtils;
import org.apache.cxf.common.util.PackageUtils;
+import org.apache.cxf.ws.addressing.AddressingConstants;
+import org.apache.cxf.ws.addressing.Names;
/**
* Encapsulation of version-specific WS-Addressing constants.
Propchange: cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingConstantsImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingConstantsImpl.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingFeatureApplier.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingFeatureApplier.java?rev=1230685&view=auto
==============================================================================
--- cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingFeatureApplier.java (added)
+++ cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingFeatureApplier.java Thu Jan 12 18:31:47 2012
@@ -0,0 +1,61 @@
+/**
+ * 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.impl;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.common.injection.NoJSR250Annotations;
+import org.apache.cxf.interceptor.InterceptorProvider;
+import org.apache.cxf.ws.addressing.WSAddressingFeature;
+import org.apache.cxf.ws.addressing.soap.MAPCodec;
+
+
+/**
+ *
+ */
+@NoJSR250Annotations
+public class AddressingFeatureApplier implements WSAddressingFeature.WSAddressingFeatureApplier {
+
+ @Override
+ public void initializeProvider(WSAddressingFeature feature, InterceptorProvider provider, Bus bus) {
+ MAPCodec mapCodec = new MAPCodec();
+ MAPAggregatorImpl mapAggregator = new MAPAggregatorImpl();
+
+ mapAggregator.setAllowDuplicates(feature.isAllowDuplicates());
+ mapAggregator.setUsingAddressingAdvisory(feature.isUsingAddressingAdvisory());
+ mapAggregator.setAddressingRequired(feature.isAddressingRequired());
+ if (feature.getMessageIdCache() != null) {
+ mapAggregator.setMessageIdCache(feature.getMessageIdCache());
+ }
+ mapAggregator.setAddressingResponses(feature.getResponses());
+
+ provider.getInInterceptors().add(mapAggregator);
+ provider.getInInterceptors().add(mapCodec);
+
+ provider.getOutInterceptors().add(mapAggregator);
+ provider.getOutInterceptors().add(mapCodec);
+
+ provider.getInFaultInterceptors().add(mapAggregator);
+ provider.getInFaultInterceptors().add(mapCodec);
+
+ provider.getOutFaultInterceptors().add(mapAggregator);
+ provider.getOutFaultInterceptors().add(mapCodec);
+ }
+
+}
Propchange: cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingFeatureApplier.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingFeatureApplier.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Copied: cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingPropertiesImpl.java (from r1230569, cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/AddressingPropertiesImpl.java)
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingPropertiesImpl.java?p2=cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingPropertiesImpl.java&p1=cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/AddressingPropertiesImpl.java&r1=1230569&r2=1230685&rev=1230685&view=diff
==============================================================================
--- cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/AddressingPropertiesImpl.java (original)
+++ cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingPropertiesImpl.java Thu Jan 12 18:31:47 2012
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.cxf.ws.addressing;
+package org.apache.cxf.ws.addressing.impl;
import java.util.ArrayList;
import java.util.List;
@@ -25,6 +25,12 @@ import java.util.List;
import javax.xml.namespace.QName;
+import org.apache.cxf.ws.addressing.AddressingProperties;
+import org.apache.cxf.ws.addressing.AttributedURIType;
+import org.apache.cxf.ws.addressing.EndpointReferenceType;
+import org.apache.cxf.ws.addressing.Names;
+import org.apache.cxf.ws.addressing.RelatesToType;
+
/**
* Abstraction of Message Addressing Properties.
*/
@@ -271,5 +277,10 @@ public class AddressingPropertiesImpl im
buf.append("]");
return buf.toString();
+ }
+
+ public AddressingProperties createCompatibleResponseProperties() {
+ return new AddressingPropertiesImpl(getNamespaceURI());
}
+
}
Propchange: cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingPropertiesImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingPropertiesImpl.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Copied: cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingWSDLExtensionLoader.java (from r1230569, cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/AddressingWSDLExtensionLoader.java)
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingWSDLExtensionLoader.java?p2=cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingWSDLExtensionLoader.java&p1=cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/AddressingWSDLExtensionLoader.java&r1=1230569&r2=1230685&rev=1230685&view=diff
==============================================================================
--- cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/AddressingWSDLExtensionLoader.java (original)
+++ cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingWSDLExtensionLoader.java Thu Jan 12 18:31:47 2012
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.cxf.ws.addressing;
+package org.apache.cxf.ws.addressing.impl;
import javax.wsdl.extensions.ExtensibilityElement;
import javax.xml.bind.JAXBException;
Propchange: cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingWSDLExtensionLoader.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/AddressingWSDLExtensionLoader.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Copied: cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/DefaultMessageIdCache.java (from r1230569, cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/DefaultMessageIdCache.java)
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/DefaultMessageIdCache.java?p2=cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/DefaultMessageIdCache.java&p1=cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/DefaultMessageIdCache.java&r1=1230569&r2=1230685&rev=1230685&view=diff
==============================================================================
--- cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/DefaultMessageIdCache.java (original)
+++ cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/DefaultMessageIdCache.java Thu Jan 12 18:31:47 2012
@@ -16,12 +16,14 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.cxf.ws.addressing;
+package org.apache.cxf.ws.addressing.impl;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
+import org.apache.cxf.ws.addressing.MessageIdCache;
+
/**
* An implementation that uses a simple set to store received message IDs.
* Note that this implementation does not make any attempt to flush older
Propchange: cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/DefaultMessageIdCache.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/DefaultMessageIdCache.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added: cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/InternalContextUtils.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/InternalContextUtils.java?rev=1230685&view=auto
==============================================================================
--- cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/InternalContextUtils.java (added)
+++ cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/InternalContextUtils.java Thu Jan 12 18:31:47 2012
@@ -0,0 +1,423 @@
+/**
+ * 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.impl;
+
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.concurrent.Executor;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.xml.namespace.QName;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.binding.soap.SoapBindingConstants;
+import org.apache.cxf.binding.soap.model.SoapOperationInfo;
+import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.common.util.StringUtils;
+import org.apache.cxf.endpoint.ConduitSelector;
+import org.apache.cxf.endpoint.Endpoint;
+import org.apache.cxf.endpoint.NullConduitSelector;
+import org.apache.cxf.endpoint.PreexistingConduitSelector;
+import org.apache.cxf.interceptor.Fault;
+import org.apache.cxf.interceptor.InterceptorChain;
+import org.apache.cxf.interceptor.OutgoingChainInterceptor;
+import org.apache.cxf.io.DelegatingInputStream;
+import org.apache.cxf.message.Exchange;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.service.model.BindingFaultInfo;
+import org.apache.cxf.service.model.BindingOperationInfo;
+import org.apache.cxf.service.model.EndpointInfo;
+import org.apache.cxf.service.model.Extensible;
+import org.apache.cxf.service.model.FaultInfo;
+import org.apache.cxf.service.model.MessageInfo;
+import org.apache.cxf.transport.Conduit;
+import org.apache.cxf.transport.ConduitInitiator;
+import org.apache.cxf.transport.ConduitInitiatorManager;
+import org.apache.cxf.transport.Destination;
+import org.apache.cxf.transport.MessageObserver;
+import org.apache.cxf.workqueue.OneShotAsyncExecutor;
+import org.apache.cxf.workqueue.SynchronousExecutor;
+import org.apache.cxf.workqueue.WorkQueueManager;
+import org.apache.cxf.ws.addressing.AddressingProperties;
+import org.apache.cxf.ws.addressing.AttributedURIType;
+import org.apache.cxf.ws.addressing.ContextUtils;
+import org.apache.cxf.ws.addressing.EndpointReferenceType;
+import org.apache.cxf.ws.addressing.JAXWSAConstants;
+import org.apache.cxf.ws.addressing.Names;
+import org.apache.cxf.wsdl.EndpointReferenceUtils;
+
+
+
+/**
+ * Holder for utility methods relating to contexts.
+ */
+final class InternalContextUtils {
+ private static final Logger LOG = LogUtils.getL7dLogger(InternalContextUtils.class);
+
+ /**
+ * Prevents instantiation.
+ */
+ private InternalContextUtils() {
+ }
+
+
+ /**
+ * Rebase response on replyTo
+ *
+ * @param reference the replyTo reference
+ * @param inMAPs the inbound MAPs
+ * @param inMessage the current message
+ */
+ public static void rebaseResponse(EndpointReferenceType reference,
+ AddressingProperties inMAPs,
+ final Message inMessage) {
+
+ String namespaceURI = inMAPs.getNamespaceURI();
+ if (!ContextUtils.retrievePartialResponseSent(inMessage)) {
+ ContextUtils.storePartialResponseSent(inMessage);
+ Exchange exchange = inMessage.getExchange();
+ Message fullResponse = exchange.getOutMessage();
+ Message partialResponse = ContextUtils.createMessage(exchange);
+ ensurePartialResponseMAPs(partialResponse, namespaceURI);
+
+ // ensure the inbound MAPs are available in the partial response
+ // message (used to determine relatesTo etc.)
+ ContextUtils.propogateReceivedMAPs(inMAPs, partialResponse);
+ partialResponse.put(Message.PARTIAL_RESPONSE_MESSAGE, Boolean.TRUE);
+ partialResponse.put(Message.EMPTY_PARTIAL_RESPONSE_MESSAGE, Boolean.TRUE);
+ Destination target = inMessage.getDestination();
+ if (target == null) {
+ return;
+ }
+
+ try {
+ if (reference == null) {
+ reference = ContextUtils.getNoneEndpointReference();
+ }
+ exchange.setOutMessage(partialResponse);
+ Conduit backChannel = target.getBackChannel(inMessage,
+ partialResponse,
+ reference);
+
+ if (backChannel != null) {
+ // set up interceptor chains and send message
+ InterceptorChain chain =
+ fullResponse != null
+ ? fullResponse.getInterceptorChain()
+ : OutgoingChainInterceptor.getOutInterceptorChain(exchange);
+ partialResponse.setInterceptorChain(chain);
+ exchange.put(ConduitSelector.class,
+ new PreexistingConduitSelector(backChannel,
+ exchange.get(Endpoint.class)));
+
+ if (chain != null && !chain.doIntercept(partialResponse)
+ && partialResponse.getContent(Exception.class) != null) {
+ if (partialResponse.getContent(Exception.class) instanceof Fault) {
+ throw (Fault)partialResponse.getContent(Exception.class);
+ } else {
+ throw new Fault(partialResponse.getContent(Exception.class));
+ }
+ }
+ if (chain != null) {
+ chain.reset();
+ }
+ exchange.put(ConduitSelector.class, new NullConduitSelector());
+
+ if (fullResponse == null) {
+ fullResponse = ContextUtils.createMessage(exchange);
+ }
+ exchange.setOutMessage(fullResponse);
+
+ Destination destination = createDecoupledDestination(
+ exchange,
+ reference);
+ exchange.setDestination(destination);
+
+
+ if (ContextUtils.retrieveAsyncPostResponseDispatch(inMessage)) {
+ //need to suck in all the data from the input stream as
+ //the transport might discard any data on the stream when this
+ //thread unwinds or when the empty response is sent back
+ DelegatingInputStream in = inMessage.getContent(DelegatingInputStream.class);
+ if (in != null) {
+ in.cacheInput();
+ }
+
+ // async service invocation required *after* a response
+ // has been sent (i.e. to a oneway, or a partial response
+ // to a decoupled twoway)
+
+
+ // pause dispatch on current thread ...
+ inMessage.getInterceptorChain().pause();
+
+ // ... and resume on executor thread
+ getExecutor(inMessage).execute(new Runnable() {
+ public void run() {
+ inMessage.getInterceptorChain().resume();
+ }
+ });
+ }
+ }
+ } catch (Exception e) {
+ LOG.log(Level.WARNING, "SERVER_TRANSPORT_REBASE_FAILURE_MSG", e);
+ }
+ }
+ }
+
+ public static Destination createDecoupledDestination(
+ Exchange exchange, final EndpointReferenceType reference) {
+
+ final EndpointInfo ei = exchange.get(Endpoint.class).getEndpointInfo();
+ return new Destination() {
+ public EndpointReferenceType getAddress() {
+ return reference;
+ }
+ public Conduit getBackChannel(Message inMessage, Message partialResponse,
+ EndpointReferenceType address) throws IOException {
+ Bus bus = inMessage.getExchange().get(Bus.class);
+ //this is a response targeting a decoupled endpoint. Treat it as a oneway so
+ //we don't wait for a response.
+ inMessage.getExchange().setOneWay(true);
+ ConduitInitiator conduitInitiator
+ = bus.getExtension(ConduitInitiatorManager.class)
+ .getConduitInitiatorForUri(reference.getAddress().getValue());
+ if (conduitInitiator != null) {
+ Conduit c = conduitInitiator.getConduit(ei, reference);
+ // ensure decoupled back channel input stream is closed
+ c.setMessageObserver(new MessageObserver() {
+ public void onMessage(Message m) {
+ InputStream is = m.getContent(InputStream.class);
+ if (is != null) {
+ try {
+ is.close();
+ } catch (Exception e) {
+ // ignore
+ }
+ }
+ }
+ });
+ return c;
+ }
+ return null;
+ }
+ public MessageObserver getMessageObserver() {
+ return null;
+ }
+ public void shutdown() {
+ }
+ public void setMessageObserver(MessageObserver observer) {
+ }
+ };
+ }
+
+ /**
+ * Construct and store MAPs for partial response.
+ *
+ * @param partialResponse the partial response message
+ * @param namespaceURI the current namespace URI
+ */
+ private static void ensurePartialResponseMAPs(Message partialResponse,
+ String namespaceURI) {
+ // ensure there is a MAPs instance available for the outbound
+ // partial response that contains appropriate To and ReplyTo
+ // properties (i.e. anonymous & none respectively)
+ AddressingPropertiesImpl maps = new AddressingPropertiesImpl();
+ maps.setTo(EndpointReferenceUtils.getAnonymousEndpointReference());
+ maps.setReplyTo(ContextUtils.WSA_OBJECT_FACTORY.createEndpointReferenceType());
+ maps.getReplyTo().setAddress(ContextUtils.getAttributedURI(Names.WSA_NONE_ADDRESS));
+ maps.setAction(ContextUtils.getAttributedURI(""));
+ maps.exposeAs(namespaceURI);
+ ContextUtils.storeMAPs(maps, partialResponse, true, true, false);
+ }
+
+
+
+
+ /**
+ * Construct the Action URI.
+ *
+ * @param message the current message
+ * @return the Action URI
+ */
+ public static AttributedURIType getAction(Message message) {
+ String action = null;
+ LOG.fine("Determining action");
+ Exception fault = message.getContent(Exception.class);
+
+ // REVISIT: add support for @{Fault}Action annotation (generated
+ // from the wsaw:Action WSDL element). For the moment we just
+ // pick up the wsaw:Action attribute by walking the WSDL model
+ // directly
+ action = getActionFromServiceModel(message, fault);
+ LOG.fine("action: " + action);
+ return action != null ? ContextUtils.getAttributedURI(action) : null;
+ }
+
+ /**
+ * Get action from service model.
+ *
+ * @param message the current message
+ * @param fault the fault if one is set
+ */
+ private static String getActionFromServiceModel(Message message,
+ Exception fault) {
+ String action = null;
+ BindingOperationInfo bindingOpInfo =
+ message.getExchange().get(BindingOperationInfo.class);
+ if (bindingOpInfo != null) {
+ if (bindingOpInfo.isUnwrappedCapable()) {
+ bindingOpInfo = bindingOpInfo.getUnwrappedOperation();
+ }
+ if (fault == null) {
+ action = (String)message.get(ContextUtils.ACTION);
+ if (StringUtils.isEmpty(action)) {
+ action = (String) message.get(SoapBindingConstants.SOAP_ACTION);
+ }
+ if (action == null || "".equals(action)) {
+ MessageInfo msgInfo =
+ ContextUtils.isRequestor(message)
+ ? bindingOpInfo.getOperationInfo().getInput()
+ : bindingOpInfo.getOperationInfo().getOutput();
+ String cachedAction = (String)msgInfo.getProperty(ContextUtils.ACTION);
+ if (cachedAction == null) {
+ action = getActionFromMessageAttributes(msgInfo);
+ } else {
+ action = cachedAction;
+ }
+ if (action == null && ContextUtils.isRequestor(message)) {
+ SoapOperationInfo soi = getSoapOperationInfo(bindingOpInfo);
+ action = soi == null ? null : soi.getAction();
+ action = StringUtils.isEmpty(action) ? null : action;
+ }
+ }
+ } else {
+ Throwable t = fault.getCause();
+
+ // FaultAction attribute is not defined in
+ // http://www.w3.org/2005/02/addressing/wsdl schema
+ for (BindingFaultInfo bfi : bindingOpInfo.getFaults()) {
+ FaultInfo fi = bfi.getFaultInfo();
+ Class<?> fiTypeClass = fi.getMessagePart(0).getTypeClass();
+ if (t != null
+ && fiTypeClass != null
+ && t.getClass().isAssignableFrom(fiTypeClass)) {
+ if (fi.getExtensionAttributes() == null) {
+ continue;
+ }
+ String attr = (String)
+ fi.getExtensionAttributes().get(Names.WSAW_ACTION_QNAME);
+ if (attr == null) {
+ attr = (String)
+ fi.getExtensionAttributes()
+ .get(new QName(Names.WSA_NAMESPACE_WSDL_NAME_OLD,
+ Names.WSAW_ACTION_NAME));
+ }
+ if (attr != null) {
+ action = attr;
+ break;
+ }
+ }
+ }
+ }
+ }
+ LOG.fine("action determined from service model: " + action);
+ return action;
+ }
+
+ public static SoapOperationInfo getSoapOperationInfo(BindingOperationInfo bindingOpInfo) {
+ SoapOperationInfo soi = bindingOpInfo.getExtensor(SoapOperationInfo.class);
+ if (soi == null && bindingOpInfo.isUnwrapped()) {
+ soi = bindingOpInfo.getWrappedOperation()
+ .getExtensor(SoapOperationInfo.class);
+ }
+ return soi;
+ }
+
+ /**
+ * Get action from attributes on MessageInfo
+ *
+ * @param bindingOpInfo the current BindingOperationInfo
+ * @param msgInfo the current MessageInfo
+ * @return the action if set
+ */
+ private static String getActionFromMessageAttributes(MessageInfo msgInfo) {
+ String action = null;
+ if (msgInfo != null
+ && msgInfo.getExtensionAttributes() != null) {
+ String attr = getAction(msgInfo);
+ if (!StringUtils.isEmpty(attr)) {
+ action = attr;
+ msgInfo.setProperty(ContextUtils.ACTION, action);
+ }
+ }
+ return action;
+ }
+
+ public static String getAction(Extensible ext) {
+ Object o = ext.getExtensionAttribute(JAXWSAConstants.WSAW_ACTION_QNAME);
+ if (o == null) {
+ o = ext.getExtensionAttributes().get(new QName(Names.WSA_NAMESPACE_WSDL_METADATA,
+ Names.WSAW_ACTION_NAME));
+ }
+ if (o == null) {
+ o = ext.getExtensionAttributes().get(new QName(JAXWSAConstants.NS_WSA, Names.WSAW_ACTION_NAME));
+ }
+ if (o == null) {
+ o = ext.getExtensionAttributes().get(new QName(Names.WSA_NAMESPACE_WSDL_NAME_OLD,
+ Names.WSAW_ACTION_NAME));
+ }
+ if (o instanceof QName) {
+ return ((QName)o).getLocalPart();
+ }
+ return o == null ? null : o.toString();
+ }
+
+ /**
+ * Get the Executor for this invocation.
+ * @param endpoint
+ * @return
+ */
+ private static Executor getExecutor(final Message message) {
+ Endpoint endpoint = message.getExchange().get(Endpoint.class);
+ Executor executor = endpoint.getService().getExecutor();
+
+ if (executor == null || SynchronousExecutor.isA(executor)) {
+ // need true asynchrony
+ Bus bus = message.getExchange().get(Bus.class);
+ if (bus != null) {
+ WorkQueueManager workQueueManager =
+ bus.getExtension(WorkQueueManager.class);
+ Executor autoWorkQueue =
+ workQueueManager.getNamedWorkQueue("ws-addressing");
+ executor = autoWorkQueue != null
+ ? autoWorkQueue
+ : workQueueManager.getAutomaticWorkQueue();
+ } else {
+ executor = OneShotAsyncExecutor.getInstance();
+ }
+ }
+ message.getExchange().put(Executor.class, executor);
+ return executor;
+ }
+
+}
Propchange: cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/InternalContextUtils.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/InternalContextUtils.java
------------------------------------------------------------------------------
svn:keywords = Rev Date