You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by eg...@apache.org on 2007/04/20 15:40:15 UTC
svn commit: r530804 [1/2] - in /incubator/cxf/trunk:
api/src/main/java/org/apache/cxf/message/
api/src/main/java/org/apache/cxf/service/model/
api/src/main/java/org/apache/cxf/transport/
api/src/main/java/org/apache/cxf/ws/addressing/ api/src/main/java...
Author: eglynn
Date: Fri Apr 20 06:40:11 2007
New Revision: 530804
URL: http://svn.apache.org/viewvc?view=rev&rev=530804
Log:
Applying patch for CXF-542 (Support the factory pattern using a single stateless service endpoint), on behalf of Gary Tully.
Added:
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/transport/MultiplexDestination.java (with props)
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/transport/AbstractMultiplexDestination.java (with props)
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/ServiceDelegateAccessor.java (with props)
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/factory_pattern/
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/factory_pattern/HttpNumberFactoryImpl.java (with props)
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/factory_pattern/HttpNumberImpl.java (with props)
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/factory_pattern/ManualHttpMulitplexClientServerTest.java (with props)
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/factory_pattern/ManualNumberFactoryImpl.java (with props)
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/factory_pattern/ManualNumberImpl.java (with props)
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/factory_pattern/MultiplexClientServerTest.java (with props)
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/factory_pattern/MultiplexHttpAddressClientServerTest.java (with props)
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/factory_pattern/NumberFactoryImpl.java (with props)
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/factory_pattern/NumberImpl.java (with props)
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/factory_pattern/cxf.xml (with props)
incubator/cxf/trunk/testutils/src/main/resources/wsdl/factory_pattern.wsdl (with props)
Modified:
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/message/MessageImpl.java
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/EndpointInfo.java
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/AddressingProperties.java
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/wsdl/EndpointReferenceUtils.java
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/transport/AbstractObservable.java
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java
incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/AbstractEndpointFactory.java
incubator/cxf/trunk/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestinationTest.java
incubator/cxf/trunk/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/spring/ApplicationContextTest.java
incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java
incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPTransportFactory.java
incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/Messages.properties
incubator/cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java
incubator/cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSTransportFactory.java
incubator/cxf/trunk/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/JMSDestinationTest.java
incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/AddressingPropertiesImpl.java
incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java
incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java
incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/MAPCodec.java
incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/Messages.properties
incubator/cxf/trunk/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/soap/MAPCodecTest.java
incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Proxy.java
incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/ProxyTest.java
incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMOutInterceptorTest.java
incubator/cxf/trunk/testutils/pom.xml
Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/message/MessageImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/message/MessageImpl.java?view=diff&rev=530804&r1=530803&r2=530804
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/message/MessageImpl.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/message/MessageImpl.java Fri Apr 20 06:40:11 2007
@@ -32,7 +32,6 @@
public class MessageImpl extends StringMapImpl implements Message {
private Collection<Attachment> attachments;
- private Destination destination;
private Exchange exchange;
private String id;
private InterceptorChain interceptorChain;
@@ -52,7 +51,7 @@
}
public Destination getDestination() {
- return destination;
+ return get(Destination.class);
}
public Exchange getExchange() {
@@ -80,7 +79,7 @@
}
public void setDestination(Destination d) {
- this.destination = d;
+ put(Destination.class, d);
}
public void setExchange(Exchange e) {
Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/EndpointInfo.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/EndpointInfo.java?view=diff&rev=530804&r1=530803&r2=530804
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/EndpointInfo.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/EndpointInfo.java Fri Apr 20 06:40:11 2007
@@ -21,12 +21,15 @@
import javax.xml.namespace.QName;
+import org.apache.cxf.ws.addressing.EndpointReferenceType;
+import org.apache.cxf.wsdl.EndpointReferenceUtils;
+
public class EndpointInfo extends AbstractDescriptionElement {
String transportId;
ServiceInfo service;
BindingInfo binding;
QName name;
- String address;
+ EndpointReferenceType address;
public EndpointInfo() {
}
@@ -60,11 +63,18 @@
}
public String getAddress() {
- return address;
+ return (null != address) ? address.getAddress().getValue() : null;
}
- public void setAddress(String a) {
- address = a;
+ public void setAddress(String addr) {
+ if (null == address) {
+ address = EndpointReferenceUtils.getEndpointReference(addr);
+ } else {
+ EndpointReferenceUtils.setAddress(address, addr);
+ }
+ }
+ public void setAddress(EndpointReferenceType endpointReference) {
+ address = endpointReference;
}
@Override
@@ -86,5 +96,9 @@
}
return value;
+ }
+
+ public EndpointReferenceType getTarget() {
+ return address;
}
}
Added: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/transport/MultiplexDestination.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/transport/MultiplexDestination.java?view=auto&rev=530804
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/transport/MultiplexDestination.java (added)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/transport/MultiplexDestination.java Fri Apr 20 06:40:11 2007
@@ -0,0 +1,51 @@
+/**
+ * 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.transport;
+
+import java.util.Map;
+
+import org.apache.cxf.ws.addressing.EndpointReferenceType;
+
+/**
+ * A MultiplexDestination is a transport-level endpoint capable of receiving
+ * unsolicited incoming messages from different peers for multiple targets
+ * identified by a unique id.
+ * The disambiguation of targets is handled by higher layers as the target
+ * address is made available as a context property or as a WS-A-To header
+ */
+
+public interface MultiplexDestination extends Destination {
+
+ /**
+ * @return the a reference containing the id that is
+ * associated with this Destination
+ */
+ EndpointReferenceType getAddressWithId(String id);
+
+ /**
+ * @param contextMap for this invocation. Obtained for example from
+ * JAX-WS WebServiceContext.getMessageContext(). The context will
+ * either contain the WS-A To content and/or some property that
+ * identifies the target address, eg MessageContext.PATH_INFO for
+ * the current invocation
+ * @return the id associated with the current invocation
+ */
+ String getId(Map contextMap);
+}
Propchange: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/transport/MultiplexDestination.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/AddressingProperties.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/AddressingProperties.java?view=diff&rev=530804&r1=530803&r2=530804
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/AddressingProperties.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/AddressingProperties.java Fri Apr 20 06:40:11 2007
@@ -28,13 +28,19 @@
* Accessor for the <b>To</b> property.
* @return current value of To property
*/
+ EndpointReferenceType getToEndpointReference();
+
+ /**
+ * Accessor for the <b>To</b> property.
+ * @return current value of To property
+ */
AttributedURIType getTo();
/**
* Mutator for the <b>To</b> property.
- * @param iri new value for To property
+ * @param epr new value for To property
*/
- void setTo(AttributedURIType iri);
+ void setTo(EndpointReferenceType epr);
/**
* Accessor for the <b>MessageID</b> property.
Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/wsdl/EndpointReferenceUtils.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/wsdl/EndpointReferenceUtils.java?view=diff&rev=530804&r1=530803&r2=530804
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/wsdl/EndpointReferenceUtils.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/wsdl/EndpointReferenceUtils.java Fri Apr 20 06:40:11 2007
@@ -22,6 +22,7 @@
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import java.util.WeakHashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -47,7 +48,6 @@
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
-
import org.xml.sax.SAXException;
import org.apache.cxf.Bus;
@@ -55,15 +55,19 @@
import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.common.util.StringUtils;
import org.apache.cxf.endpoint.EndpointResolverRegistry;
+import org.apache.cxf.endpoint.Server;
+import org.apache.cxf.endpoint.ServerRegistry;
import org.apache.cxf.service.model.SchemaInfo;
import org.apache.cxf.service.model.ServiceInfo;
+import org.apache.cxf.transport.Destination;
+import org.apache.cxf.transport.MultiplexDestination;
import org.apache.cxf.ws.addressing.AttributedURIType;
import org.apache.cxf.ws.addressing.EndpointReferenceType;
import org.apache.cxf.ws.addressing.MetadataType;
-import org.apache.cxf.ws.addressing.ObjectFactory;
import org.apache.cxf.ws.addressing.wsdl.AttributedQNameType;
import org.apache.cxf.ws.addressing.wsdl.ServiceNameType;
+
/**
* Provides utility methods for obtaining endpoint references, wsdl definitions, etc.
*/
@@ -77,6 +81,11 @@
private static final QName WSDL_LOCATION = new QName("http://www.w3.org/2006/01/wsdl-instance",
"wsdlLocation");
+
+ private static final org.apache.cxf.ws.addressing.wsdl.ObjectFactory WSA_WSDL_OBJECT_FACTORY =
+ new org.apache.cxf.ws.addressing.wsdl.ObjectFactory();
+ private static final org.apache.cxf.ws.addressing.ObjectFactory WSA_OBJECT_FACTORY =
+ new org.apache.cxf.ws.addressing.ObjectFactory();
private EndpointReferenceUtils() {
@@ -124,12 +133,11 @@
}
public static JAXBElement<ServiceNameType> getServiceNameType(QName serviceName, String portName) {
- ServiceNameType serviceNameType = new ServiceNameType();
+ ServiceNameType serviceNameType = WSA_WSDL_OBJECT_FACTORY.createServiceNameType();
serviceNameType.setValue(serviceName);
serviceNameType.setEndpointName(portName);
- org.apache.cxf.ws.addressing.wsdl.ObjectFactory objectFactory =
- new org.apache.cxf.ws.addressing.wsdl.ObjectFactory();
- return objectFactory.createServiceName(serviceNameType);
+
+ return WSA_WSDL_OBJECT_FACTORY.createServiceName(serviceNameType);
}
/**
@@ -201,18 +209,17 @@
public static void setInterfaceName(EndpointReferenceType ref, QName portTypeName) {
if (null != portTypeName) {
- AttributedQNameType interfaceNameType = new AttributedQNameType();
+ AttributedQNameType interfaceNameType =
+ WSA_WSDL_OBJECT_FACTORY.createAttributedQNameType();
interfaceNameType.setValue(portTypeName);
- org.apache.cxf.ws.addressing.wsdl.ObjectFactory objectFactory =
- new org.apache.cxf.ws.addressing.wsdl.ObjectFactory();
JAXBElement<AttributedQNameType> jaxbElement =
- objectFactory.createInterfaceName(interfaceNameType);
+ WSA_WSDL_OBJECT_FACTORY.createInterfaceName(interfaceNameType);
MetadataType mt = ref.getMetadata();
if (null == mt) {
- mt = new MetadataType();
+ mt = WSA_OBJECT_FACTORY.createMetadataType();
ref.setMetadata(mt);
}
mt.getAny().add(jaxbElement);
@@ -260,7 +267,7 @@
MetadataType metadata = ref.getMetadata();
if (null == metadata) {
- metadata = new MetadataType();
+ metadata = WSA_OBJECT_FACTORY.createMetadataType();
ref.setMetadata(metadata);
}
@@ -529,7 +536,7 @@
* @param address - the address
*/
public static void setAddress(EndpointReferenceType ref, String address) {
- AttributedURIType a = new ObjectFactory().createAttributedURIType();
+ AttributedURIType a = WSA_OBJECT_FACTORY.createAttributedURIType();
a.setValue(address);
ref.setAddress(a);
}
@@ -543,8 +550,8 @@
public static EndpointReferenceType getEndpointReference(URL wsdlUrl,
QName serviceName,
String portName) {
- EndpointReferenceType reference = new EndpointReferenceType();
- reference.setMetadata(new MetadataType());
+ EndpointReferenceType reference = WSA_OBJECT_FACTORY.createEndpointReferenceType();
+ reference.setMetadata(WSA_OBJECT_FACTORY.createMetadataType());
setServiceAndPortName(reference, serviceName, portName);
//TODO To Ensure it is a valid URI syntax.
setWSDLLocation(reference, wsdlUrl.toString());
@@ -552,6 +559,21 @@
return reference;
}
+
+ /**
+ * Create a duplicate endpoint reference sharing all atributes
+ * @param ret to duplicate
+ * @return EndpointReferenceType - the duplicate endpoint reference
+ */
+ public static EndpointReferenceType duplicate(EndpointReferenceType ref) {
+
+ EndpointReferenceType reference = WSA_OBJECT_FACTORY.createEndpointReferenceType();
+ reference.setMetadata(ref.getMetadata());
+ reference.getAny().addAll(ref.getAny());
+ reference.setAddress(ref.getAddress());
+ return reference;
+ }
+
/**
* Create an endpoint reference for the provided address.
* @param address - address URI
@@ -559,18 +581,25 @@
*/
public static EndpointReferenceType getEndpointReference(String address) {
- EndpointReferenceType reference = new EndpointReferenceType();
+ EndpointReferenceType reference = WSA_OBJECT_FACTORY.createEndpointReferenceType();
setAddress(reference, address);
return reference;
}
+ public static EndpointReferenceType getEndpointReference(AttributedURIType address) {
+
+ EndpointReferenceType reference = WSA_OBJECT_FACTORY.createEndpointReferenceType();
+ reference.setAddress(address);
+ return reference;
+ }
+
/**
* Create an anonymous endpoint reference.
* @return EndpointReferenceType - the endpoint reference
*/
public static EndpointReferenceType getAnonymousEndpointReference() {
- EndpointReferenceType reference = new EndpointReferenceType();
+ EndpointReferenceType reference = WSA_OBJECT_FACTORY.createEndpointReferenceType();
setAddress(reference, ANONYMOUS_ADDRESS);
return reference;
}
@@ -603,7 +632,72 @@
private static String getService(String content) {
return content.substring(content.indexOf(":") + 1, content.length());
- }
-
+ }
+
+ /**
+ * Obtain a multiplexed endpoint reference for the deployed service that contains the provided id
+ * @param serviceQName identified the target service
+ * @param portName identifies a particular port of the service, may be null
+ * @param id that must be embedded in the returned reference
+ * @param bus the current bus
+ * @return a new reference or null if the target destination does not support destination mutiplexing
+ */
+ public static EndpointReferenceType getEndpointReferenceWithId(QName serviceQName,
+ String portName,
+ String id,
+ Bus bus) {
+ EndpointReferenceType epr = null;
+ MultiplexDestination destination = getMatchingMultiplexDestination(serviceQName, portName, bus);
+ if (null != destination) {
+ epr = destination.getAddressWithId(id);
+ }
+ return epr;
+ }
+ /**
+ * Obtain the id String from the endpoint reference of the current dispatch.
+ * @param contextMap the current message context
+ * @return the id embedded in the current endpoint reference or null if not found
+ */
+ public static String getEndpointReferenceId(Map messageContext) {
+ String id = null;
+ Destination destination = (Destination) messageContext.get(Destination.class.getName());
+ if (destination instanceof MultiplexDestination) {
+ id = ((MultiplexDestination) destination).getId(messageContext);
+ }
+ return id;
+ }
+
+ private static MultiplexDestination getMatchingMultiplexDestination(QName serviceQName, String portName,
+ Bus bus) {
+ MultiplexDestination destination = null;
+ ServerRegistry serverRegistry = (ServerRegistry)bus.getExtension(ServerRegistry.class);
+ if (null != serverRegistry) {
+ List<Server> servers = serverRegistry.getServers();
+ for (Server s : servers) {
+ QName targetServiceQName = s.getEndpoint().getEndpointInfo().getService().getName();
+ if (serviceQName.equals(targetServiceQName) && portNameMatches(s, portName)) {
+ Destination dest = s.getDestination();
+ if (dest instanceof MultiplexDestination) {
+ destination = (MultiplexDestination)dest;
+ break;
+ }
+ }
+ }
+ } else {
+ LOG.log(Level.WARNING,
+ "Failed to locate service matching " + serviceQName
+ + ", because the bus ServerRegistry extension provider is null");
+ }
+ return destination;
+ }
+
+ private static boolean portNameMatches(Server s, String portName) {
+ boolean ret = false;
+ if (null == portName
+ || portName.equals(s.getEndpoint().getEndpointInfo().getName().getLocalPart())) {
+ return true;
+ }
+ return ret;
+ }
}
Added: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/transport/AbstractMultiplexDestination.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/transport/AbstractMultiplexDestination.java?view=auto&rev=530804
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/transport/AbstractMultiplexDestination.java (added)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/transport/AbstractMultiplexDestination.java Fri Apr 20 06:40:11 2007
@@ -0,0 +1,103 @@
+/**
+ * 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.transport;
+
+import java.util.Map;
+
+import javax.xml.bind.JAXBElement;
+import javax.xml.namespace.QName;
+
+import org.apache.cxf.service.model.EndpointInfo;
+import org.apache.cxf.ws.addressing.AddressingProperties;
+import org.apache.cxf.ws.addressing.EndpointReferenceType;
+import org.apache.cxf.ws.addressing.ReferenceParametersType;
+import org.apache.cxf.wsdl.EndpointReferenceUtils;
+import static org.apache.cxf.ws.addressing.JAXWSAConstants.SERVER_ADDRESSING_PROPERTIES_INBOUND;
+
+public abstract class AbstractMultiplexDestination extends AbstractDestination implements
+ MultiplexDestination {
+
+ private static final QName MULTIPLEX_ID_QNAME = new QName("http://multiplex.transport.cxf.apache.org",
+ "id");
+
+ public AbstractMultiplexDestination(EndpointReferenceType ref, EndpointInfo ei) {
+ super(ref, ei);
+ }
+
+ /**
+ * Builds an new endpoint reference using the current target reference as a template.
+ * The supplied id is endcoded using a reference parameter.
+ * This requires the ws-a interceptors to propagate the reference parameters
+ * on subsequent invokes using the returned reference.
+ * @param the id to encode in the new reference
+ * @return the new reference with the id encoded as a reference parameter
+ * @see org.apache.cxf.transport.MultiplexDestination#getAddressWithId(java.lang.String)
+
+ */
+ public EndpointReferenceType getAddressWithId(String id) {
+ EndpointReferenceType epr = EndpointReferenceUtils.duplicate(reference);
+ ReferenceParametersType newParams = new org.apache.cxf.ws.addressing.ObjectFactory()
+ .createReferenceParametersType();
+
+ ReferenceParametersType existingParams = epr.getReferenceParameters();
+ if (null != existingParams) {
+ newParams.getAny().addAll(existingParams.getAny());
+ }
+
+ newParams.getAny().add(new JAXBElement<String>(MULTIPLEX_ID_QNAME, String.class, id));
+ epr.setReferenceParameters(newParams);
+ return epr;
+ }
+
+ /**
+ * Obtain id from reference parameters of the ws-a to address
+ * Requires the existance of ws-a interceptors on dispatch path to provide access
+ * to the ws-a headers
+ * @param the current invocation or message context
+ * @return the id from the reference parameters of the ws-a-to address or null if not found
+ * @see org.apache.cxf.transport.MultiplexDestination#getId(java.util.Map)
+ */
+ public String getId(Map contextMap) {
+ String markedParam = null;
+ AddressingProperties maps = (AddressingProperties)contextMap
+ .get(SERVER_ADDRESSING_PROPERTIES_INBOUND);
+ if (null != maps) {
+ EndpointReferenceType toEpr = maps.getToEndpointReference();
+ if (null != toEpr) {
+ markedParam = extractStringElementFromAny(MULTIPLEX_ID_QNAME, toEpr);
+ }
+ }
+ return markedParam;
+ }
+
+ private String extractStringElementFromAny(QName elementQName, EndpointReferenceType epr) {
+ String elementStringValue = null;
+ if (null != epr.getReferenceParameters()) {
+ for (Object o : epr.getReferenceParameters().getAny()) {
+ if (o instanceof JAXBElement) {
+ JAXBElement el = (JAXBElement)o;
+ if (el.getName().equals(elementQName)) {
+ elementStringValue = (String)el.getValue();
+ }
+ }
+ }
+ }
+ return elementStringValue;
+ }
+}
Propchange: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/transport/AbstractMultiplexDestination.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/transport/AbstractObservable.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/transport/AbstractObservable.java?view=diff&rev=530804&r1=530803&r2=530804
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/transport/AbstractObservable.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/transport/AbstractObservable.java Fri Apr 20 06:40:11 2007
@@ -73,7 +73,7 @@
}
/**
- * Get the target reference .
+ * Get the target endpoint reference.
*
* @param ei the corresponding EndpointInfo
* @param t the given target EPR if available
@@ -89,11 +89,15 @@
AttributedURIType address = new AttributedURIType();
address.setValue(ei.getAddress());
ref.setAddress(address);
+ if (ei.getService() != null) {
+ EndpointReferenceUtils.setServiceAndPortName(ref,
+ ei.getService().getName(),
+ ei.getName().getLocalPart());
+ }
} else {
ref = t;
}
return EndpointReferenceUtils.resolve(ref, bus);
- //return ref;
}
/**
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java?view=diff&rev=530804&r1=530803&r2=530804
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java Fri Apr 20 06:40:11 2007
@@ -68,6 +68,8 @@
import org.apache.cxf.transport.DestinationFactory;
import org.apache.cxf.transport.DestinationFactoryManager;
import org.apache.cxf.workqueue.OneShotAsyncExecutor;
+import org.apache.cxf.ws.addressing.EndpointReferenceType;
+import org.apache.cxf.wsdl.EndpointReferenceUtils;
import org.apache.cxf.wsdl11.WSDLServiceFactory;
public class ServiceImpl extends ServiceDelegate {
@@ -214,7 +216,7 @@
public <T> T getPort(Class<T> type) {
try {
- return createPort(null, type);
+ return createPort(null, null, type);
} catch (ServiceConstructionException e) {
throw new WebServiceException(e);
}
@@ -225,11 +227,24 @@
throw new WebServiceException(BUNDLE.getString("PORT_NAME_NULL_EXC"));
}
try {
- return createPort(portName, type);
+ return createPort(portName, null, type);
} catch (ServiceConstructionException e) {
throw new WebServiceException(e);
}
}
+
+ public <T> T getPort(EndpointReferenceType endpointReference,
+ Class<T> type) {
+ QName serviceQName = EndpointReferenceUtils.getServiceName(endpointReference);
+ String portName = EndpointReferenceUtils.getPortName(endpointReference);
+
+ QName portQName = null;
+ if (portName != null && serviceQName != null) {
+ portQName = new QName(serviceQName.getNamespaceURI(), portName);
+ }
+
+ return createPort(portQName, endpointReference, type);
+ }
public Iterator<QName> getPorts() {
return ports.iterator();
@@ -255,8 +270,9 @@
return bus;
}
- protected <T> T createPort(QName portName, Class<T> serviceEndpointInterface) {
+ protected <T> T createPort(QName portName, EndpointReferenceType epr, Class<T> serviceEndpointInterface) {
LOG.log(Level.FINE, "creating port for portName", portName);
+ LOG.log(Level.FINE, "endpoint reference:", epr);
LOG.log(Level.FINE, "endpoint interface:", serviceEndpointInterface);
JaxWsProxyFactoryBean proxyFac = new JaxWsProxyFactoryBean();
@@ -278,6 +294,9 @@
serviceFactory.setEndpointName(portName);
}
+ if (epr != null) {
+ clientFac.setEndpointReference(epr);
+ }
PortInfoImpl portInfo = portInfos.get(portName);
if (portInfo != null) {
clientFac.setBindingId(portInfo.getBindingID());
Added: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/ServiceDelegateAccessor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/ServiceDelegateAccessor.java?view=auto&rev=530804
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/ServiceDelegateAccessor.java (added)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/ServiceDelegateAccessor.java Fri Apr 20 06:40:11 2007
@@ -0,0 +1,70 @@
+/**
+ * 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.jaxws.support;
+
+import java.lang.reflect.Field;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.xml.ws.Service;
+import javax.xml.ws.WebServiceException;
+
+import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.jaxws.ServiceImpl;
+
+/**
+ * A utility that allows access to the 'private' implementation specific delegate
+ * of a Service. Usefull when extensions to the JAXWS Service supported methods
+ * are required.
+ */
+public final class ServiceDelegateAccessor {
+
+ private static final Logger LOG = LogUtils.getL7dLogger(ServiceDelegateAccessor.class);
+
+ private static final String DELEGATE_FIELD_NAME = "delegate";
+
+ private ServiceDelegateAccessor() {
+ }
+
+ /**
+ * Get the delegate reference from the Service private field. This method
+ * uses Field.setAccessible() which, in the presence of a SecurityManager,
+ * requires the suppressAccessChecks permission
+ *
+ * @param service the taraget service
+ * @return the implementation delegate
+ * @throws WebServiceException if access to the field fails for any reason
+ */
+ public static ServiceImpl get(Service service) {
+ ServiceImpl delegate = null;
+ try {
+ Field delegateField = Service.class.getDeclaredField(DELEGATE_FIELD_NAME);
+ delegateField.setAccessible(true);
+ delegate = (ServiceImpl)delegateField.get(service);
+ } catch (Exception e) {
+ WebServiceException wse = new WebServiceException("Failed to access Field named "
+ + DELEGATE_FIELD_NAME + " of Service instance "
+ + service, e);
+ LOG.log(Level.SEVERE, e.getMessage(), e);
+ throw wse;
+ }
+ return delegate;
+ }
+}
Propchange: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/ServiceDelegateAccessor.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/AbstractEndpointFactory.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/AbstractEndpointFactory.java?view=diff&rev=530804&r1=530803&r2=530804
==============================================================================
--- incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/AbstractEndpointFactory.java (original)
+++ incubator/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/frontend/AbstractEndpointFactory.java Fri Apr 20 06:40:11 2007
@@ -48,6 +48,7 @@
import org.apache.cxf.transport.DestinationFactoryManager;
import org.apache.cxf.transport.local.LocalTransportFactory;
import org.apache.cxf.ws.AbstractWSFeature;
+import org.apache.cxf.ws.addressing.EndpointReferenceType;
import org.apache.cxf.wsdl11.WSDLEndpointFactory;
public abstract class AbstractEndpointFactory extends AbstractBasicInterceptorProvider {
@@ -65,6 +66,7 @@
private Map<String, Object> properties;
private List<AbstractWSFeature> features;
private BindingConfiguration bindingConfig;
+ private EndpointReferenceType endpointReference;
private ConduitSelector conduitSelector;
protected Endpoint createEndpoint() throws BusException, EndpointException {
@@ -103,6 +105,9 @@
ei.setAddress(getAddress());
}
+ if (endpointReference != null) {
+ ei.setAddress(endpointReference);
+ }
Endpoint ep = service.getEndpoints().get(ei.getName());
if (ep == null) {
@@ -318,6 +323,10 @@
this.endpointName = endpointName;
}
+ public void setEndpointReference(EndpointReferenceType epr) {
+ endpointReference = epr;
+ }
+
public Map<String, Object> getProperties() {
return properties;
}
Modified: incubator/cxf/trunk/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestinationTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestinationTest.java?view=diff&rev=530804&r1=530803&r2=530804
==============================================================================
--- incubator/cxf/trunk/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestinationTest.java (original)
+++ incubator/cxf/trunk/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestinationTest.java Fri Apr 20 06:40:11 2007
@@ -19,7 +19,6 @@
package org.apache.cxf.transport.http_jetty;
-
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
@@ -31,6 +30,8 @@
import javax.servlet.ServletInputStream;
import javax.servlet.ServletOutputStream;
+import javax.xml.bind.JAXBElement;
+import javax.xml.namespace.QName;
import org.apache.cxf.Bus;
import org.apache.cxf.bus.CXFBusImpl;
@@ -46,6 +47,7 @@
import org.apache.cxf.message.MessageImpl;
import org.apache.cxf.security.transport.TLSSessionInfo;
import org.apache.cxf.service.model.EndpointInfo;
+import org.apache.cxf.service.model.ServiceInfo;
import org.apache.cxf.transport.Conduit;
import org.apache.cxf.transport.Destination;
import org.apache.cxf.transport.MessageObserver;
@@ -53,6 +55,7 @@
import org.apache.cxf.transports.http.QueryHandler;
import org.apache.cxf.transports.http.QueryHandlerRegistry;
import org.apache.cxf.transports.http.configuration.HTTPServerPolicy;
+import org.apache.cxf.ws.addressing.AddressingProperties;
import org.apache.cxf.ws.addressing.EndpointReferenceType;
import org.apache.cxf.ws.policy.PolicyEngine;
import org.apache.cxf.wsdl.EndpointReferenceUtils;
@@ -63,6 +66,7 @@
import org.mortbay.jetty.HttpFields;
import org.mortbay.jetty.Request;
import org.mortbay.jetty.Response;
+import static org.apache.cxf.ws.addressing.JAXWSAConstants.SERVER_ADDRESSING_PROPERTIES_INBOUND;
public class JettyHTTPDestinationTest extends Assert {
protected static final String AUTH_HEADER = "Authorization";
@@ -123,6 +127,12 @@
assertEquals("unexpected address",
EndpointReferenceUtils.getAddress(ref),
StringUtils.addDefaultPortIfMissing(EndpointReferenceUtils.getAddress(address)));
+ assertEquals("unexpected service name local part",
+ EndpointReferenceUtils.getServiceName(ref).getLocalPart(),
+ "Service");
+ assertEquals("unexpected portName",
+ EndpointReferenceUtils.getPortName(ref),
+ "Port");
}
@Test
@@ -130,7 +140,10 @@
transportFactory = new JettyHTTPTransportFactory();
transportFactory.setBus(new CXFBusImpl());
- EndpointInfo ei = new EndpointInfo();
+ ServiceInfo serviceInfo = new ServiceInfo();
+ serviceInfo.setName(new QName("bla", "Service"));
+ EndpointInfo ei = new EndpointInfo(serviceInfo, "");
+ ei.setName(new QName("bla", "Port"));
ei.setAddress("http://foo");
Destination d1 = transportFactory.getDestination(ei);
@@ -296,7 +309,11 @@
bus = new CXFBusImpl();
transportFactory = new JettyHTTPTransportFactory();
- endpointInfo = new EndpointInfo();
+
+ ServiceInfo serviceInfo = new ServiceInfo();
+ serviceInfo.setName(new QName("bla", "Service"));
+ endpointInfo = new EndpointInfo(serviceInfo, "");
+ endpointInfo.setName(new QName("bla", "Port"));
endpointInfo.addExtensor(policy);
endpointInfo.addExtensor(new SSLServerPolicy());
@@ -311,6 +328,70 @@
assertEquals(policy, dest.getServer());
}
+ @Test
+ public void testMultiplexGetAddressWithId() throws Exception {
+ destination = setUpDestination();
+ final String id = "ID2";
+ EndpointReferenceType refWithId = destination.getAddressWithId(id);
+ assertNotNull(refWithId);
+ assertNotNull(refWithId.getReferenceParameters());
+ assertNotNull(refWithId.getReferenceParameters().getAny());
+ assertTrue("it is an element",
+ refWithId.getReferenceParameters().getAny().get(0) instanceof JAXBElement);
+ JAXBElement el = (JAXBElement) refWithId.getReferenceParameters().getAny().get(0);
+ assertEquals("match our id", el.getValue(), id);
+ }
+
+ @Test
+ public void testMultiplexGetAddressWithIdForAddress() throws Exception {
+ destination = setUpDestination();
+ destination.setMultiplexWithAddress(true);
+
+ final String id = "ID3";
+ EndpointReferenceType refWithId = destination.getAddressWithId(id);
+ assertNotNull(refWithId);
+ assertNull(refWithId.getReferenceParameters());
+ assertTrue("match our id", EndpointReferenceUtils.getAddress(refWithId).indexOf(id) != -1);
+ }
+
+ @Test
+ public void testMultiplexGetIdForAddress() throws Exception {
+ destination = setUpDestination();
+ destination.setMultiplexWithAddress(true);
+
+ final String id = "ID3";
+ EndpointReferenceType refWithId = destination.getAddressWithId(id);
+ String pathInfo = EndpointReferenceUtils.getAddress(refWithId);
+
+ Map<String, Object> context = new HashMap<String, Object>();
+ assertNull("fails with no context", destination.getId(context));
+
+ context.put(Message.PATH_INFO, pathInfo);
+ String result = destination.getId(context);
+ assertNotNull(result);
+ assertEquals("match our id", result, id);
+ }
+
+ @Test
+ public void testMultiplexGetId() throws Exception {
+ destination = setUpDestination();
+
+ final String id = "ID3";
+ EndpointReferenceType refWithId = destination.getAddressWithId(id);
+
+ Map<String, Object> context = new HashMap<String, Object>();
+ assertNull("fails with no context", destination.getId(context));
+
+ AddressingProperties maps = EasyMock.createMock(AddressingProperties.class);
+ maps.getToEndpointReference();
+ EasyMock.expectLastCall().andReturn(refWithId);
+ EasyMock.replay(maps);
+ context.put(SERVER_ADDRESSING_PROPERTIES_INBOUND, maps);
+ String result = destination.getId(context);
+ assertNotNull(result);
+ assertEquals("match our id", result, id);
+ }
+
private JettyHTTPDestination setUpDestination()
throws Exception {
return setUpDestination(false, false);
@@ -341,7 +422,10 @@
transportFactory.setBus(bus);
engine = EasyMock.createMock(ServerEngine.class);
- endpointInfo = new EndpointInfo();
+ ServiceInfo serviceInfo = new ServiceInfo();
+ serviceInfo.setName(new QName("bla", "Service"));
+ endpointInfo = new EndpointInfo(serviceInfo, "");
+ endpointInfo.setName(new QName("bla", "Port"));
endpointInfo.setAddress(NOWHERE + "bar/foo");
endpointInfo.addExtensor(policy);
Modified: incubator/cxf/trunk/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/spring/ApplicationContextTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/spring/ApplicationContextTest.java?view=diff&rev=530804&r1=530803&r2=530804
==============================================================================
--- incubator/cxf/trunk/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/spring/ApplicationContextTest.java (original)
+++ incubator/cxf/trunk/rt/transports/http-jetty/src/test/java/org/apache/cxf/transport/http_jetty/spring/ApplicationContextTest.java Fri Apr 20 06:40:11 2007
@@ -26,6 +26,7 @@
import org.apache.cxf.configuration.spring.ConfigurerImpl;
import org.apache.cxf.configuration.spring.JaxbClassPathXmlApplicationContext;
import org.apache.cxf.service.model.EndpointInfo;
+import org.apache.cxf.service.model.ServiceInfo;
import org.apache.cxf.transport.ConduitInitiator;
import org.apache.cxf.transport.ConduitInitiatorManager;
import org.apache.cxf.transport.Destination;
@@ -50,7 +51,9 @@
ConfigurerImpl cfg = new ConfigurerImpl(ctx);
- EndpointInfo info = new EndpointInfo();
+ ServiceInfo serviceInfo = new ServiceInfo();
+ serviceInfo.setName(new QName("bla", "Service"));
+ EndpointInfo info = new EndpointInfo(serviceInfo, "");
info.setName(new QName("urn:test:ns", "Foo"));
info.setAddress("http://localhost:9000");
Modified: incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java?view=diff&rev=530804&r1=530803&r2=530804
==============================================================================
--- incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java (original)
+++ incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java Fri Apr 20 06:40:11 2007
@@ -50,6 +50,7 @@
import org.apache.cxf.message.Message;
import org.apache.cxf.service.model.EndpointInfo;
import org.apache.cxf.transport.AbstractDestination;
+import org.apache.cxf.transport.AbstractMultiplexDestination;
import org.apache.cxf.transport.Conduit;
import org.apache.cxf.transport.ConduitInitiator;
import org.apache.cxf.transport.http.policy.PolicyUtils;
@@ -57,12 +58,13 @@
import org.apache.cxf.ws.addressing.EndpointReferenceType;
import org.apache.cxf.ws.policy.Assertor;
import org.apache.cxf.ws.policy.PolicyEngine;
+import org.apache.cxf.wsdl.EndpointReferenceUtils;
/**
* Common base for HTTP Destination implementations.
*/
-public abstract class AbstractHTTPDestination extends AbstractDestination
- implements Configurable, Assertor {
+public abstract class AbstractHTTPDestination extends AbstractMultiplexDestination implements Configurable,
+ Assertor {
public static final String HTTP_REQUEST = "HTTP.REQUEST";
public static final String HTTP_RESPONSE = "HTTP.RESPONSE";
@@ -81,7 +83,8 @@
protected SSLServerPolicy sslServer;
protected String contextMatchStrategy = "stem";
protected boolean fixedParameterOrder;
-
+ protected boolean multiplexWithAddress;
+
/**
* Constructor
*
@@ -417,6 +420,54 @@
return beanName;
}
+ /*
+ * Implement multiplex via the address URL to avoid the need for ws-a.
+ * Requires contextMatchStrategy of stem.
+ *
+ * @see org.apache.cxf.transport.AbstractMultiplexDestination#getAddressWithId(java.lang.String)
+ */
+ public EndpointReferenceType getAddressWithId(String id) {
+ EndpointReferenceType ref = null;
+
+ if (isMultiplexWithAddress()) {
+ String address = EndpointReferenceUtils.getAddress(reference);
+ ref = EndpointReferenceUtils.duplicate(reference);
+ if (address.endsWith("/")) {
+ EndpointReferenceUtils.setAddress(ref, address + id);
+ } else {
+ EndpointReferenceUtils.setAddress(ref, address + "/" + id);
+ }
+ } else {
+ ref = super.getAddressWithId(id);
+ }
+ return ref;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.cxf.transport.AbstractMultiplexDestination#getId(java.util.Map)
+ */
+ public String getId(Map context) {
+ String id = null;
+
+ if (isMultiplexWithAddress()) {
+ String address = (String)context.get(Message.PATH_INFO);
+ if (null != address) {
+ int afterLastSlashIndex = address.lastIndexOf("/") + 1;
+ if (afterLastSlashIndex > 0 && afterLastSlashIndex < address.length()) {
+ id = address.substring(afterLastSlashIndex);
+ }
+ } else {
+ getLogger().log(Level.WARNING,
+ new org.apache.cxf.common.i18n.Message("MISSING_PATH_INFO", LOG).toString());
+ }
+ } else {
+ return super.getId(context);
+ }
+ return id;
+ }
+
public AuthorizationPolicy getAuthorization() {
return authorization;
}
@@ -439,6 +490,14 @@
public void setFixedParameterOrder(boolean fixedParameterOrder) {
this.fixedParameterOrder = fixedParameterOrder;
+ }
+
+ public boolean isMultiplexWithAddress() {
+ return multiplexWithAddress;
+ }
+
+ public void setMultiplexWithAddress(boolean multiplexWithAddress) {
+ this.multiplexWithAddress = multiplexWithAddress;
}
public HTTPServerPolicy getServer() {
Modified: incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPTransportFactory.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPTransportFactory.java?view=diff&rev=530804&r1=530803&r2=530804
==============================================================================
--- incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPTransportFactory.java (original)
+++ incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPTransportFactory.java Fri Apr 20 06:40:11 2007
@@ -144,7 +144,7 @@
* to calling getConduit without an EndpointReferenceType.
*/
public Conduit getConduit(EndpointInfo endpointInfo) throws IOException {
- return getConduit(endpointInfo, null);
+ return getConduit(endpointInfo, endpointInfo.getTarget());
}
/**
Modified: incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/Messages.properties
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/Messages.properties?view=diff&rev=530804&r1=530803&r2=530804
==============================================================================
--- incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/Messages.properties (original)
+++ incubator/cxf/trunk/rt/transports/http/src/main/java/org/apache/cxf/transport/http/Messages.properties Fri Apr 20 06:40:11 2007
@@ -21,3 +21,4 @@
UNEXPECTED_RESPONSE_TYPE_MSG = Unexpected response type {0}
NULL_RESPONSE_MSG = Response object is null
DECOUPLED_RESPONSE_FAILED_MSG = Decouple response failed
+MISSING_PATH_INFO = PATH_INFO not present in message context, multiplex id is unavailable. Ensure the portName passed to getCurrentEndpointReferenceId is correct if the service has multiple ports
Modified: incubator/cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java?view=diff&rev=530804&r1=530803&r2=530804
==============================================================================
--- incubator/cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java (original)
+++ incubator/cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java Fri Apr 20 06:40:11 2007
@@ -49,7 +49,7 @@
import org.apache.cxf.message.MessageImpl;
import org.apache.cxf.service.model.EndpointInfo;
import org.apache.cxf.transport.AbstractConduit;
-import org.apache.cxf.transport.AbstractDestination;
+import org.apache.cxf.transport.AbstractMultiplexDestination;
import org.apache.cxf.transport.Conduit;
import org.apache.cxf.transport.ConduitInitiator;
import org.apache.cxf.transport.MessageObserver;
@@ -59,7 +59,7 @@
-public class JMSDestination extends AbstractDestination implements Configurable, JMSTransport {
+public class JMSDestination extends AbstractMultiplexDestination implements Configurable, JMSTransport {
protected static final String BASE_BEAN_NAME_SUFFIX = ".jms-destination-base";
Modified: incubator/cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSTransportFactory.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSTransportFactory.java?view=diff&rev=530804&r1=530803&r2=530804
==============================================================================
--- incubator/cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSTransportFactory.java (original)
+++ incubator/cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSTransportFactory.java Fri Apr 20 06:40:11 2007
@@ -55,7 +55,7 @@
}
public Conduit getConduit(EndpointInfo targetInfo) throws IOException {
- return getConduit(targetInfo, null);
+ return getConduit(targetInfo, targetInfo.getTarget());
}
public Conduit getConduit(EndpointInfo endpointInfo, EndpointReferenceType target) throws IOException {
Modified: incubator/cxf/trunk/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/JMSDestinationTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/JMSDestinationTest.java?view=diff&rev=530804&r1=530803&r2=530804
==============================================================================
--- incubator/cxf/trunk/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/JMSDestinationTest.java (original)
+++ incubator/cxf/trunk/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/JMSDestinationTest.java Fri Apr 20 06:40:11 2007
@@ -32,6 +32,7 @@
import org.apache.cxf.transport.Conduit;
import org.apache.cxf.transport.ConduitInitiator;
import org.apache.cxf.transport.MessageObserver;
+import org.apache.cxf.transport.MultiplexDestination;
import org.easymock.classextension.EasyMock;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -317,5 +318,16 @@
// wait for a while for the jms session recycling
Thread.sleep(1000);
destination.shutdown();
+ }
+
+ @Test
+ public void testIsMultiplexCapable() throws Exception {
+ inMessage = null;
+ setupServiceInfo("http://cxf.apache.org/hello_world_jms",
+ "/wsdl/jms_test.wsdl",
+ "HelloWorldService",
+ "HelloWorldPort");
+ final JMSDestination destination = setupJMSDestination(true);
+ assertTrue("is multiplex", destination instanceof MultiplexDestination);
}
}
Modified: incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/AddressingPropertiesImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/AddressingPropertiesImpl.java?view=diff&rev=530804&r1=530803&r2=530804
==============================================================================
--- incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/AddressingPropertiesImpl.java (original)
+++ incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/AddressingPropertiesImpl.java Fri Apr 20 06:40:11 2007
@@ -23,7 +23,7 @@
* Abstraction of Message Addressing Properties.
*/
public class AddressingPropertiesImpl implements AddressingProperties {
- private AttributedURIType to;
+ private EndpointReferenceType to;
private AttributedURIType messageID;
private EndpointReferenceType replyTo;
private EndpointReferenceType faultTo;
@@ -47,20 +47,24 @@
namespaceURI = uri;
}
+ public EndpointReferenceType getToEndpointReference() {
+ return to;
+ }
+
/**
* Accessor for the <b>To</b> property.
* @return To property
*/
public AttributedURIType getTo() {
- return to;
+ return null != to ? to.getAddress() : null;
}
-
+
/**
* Mutator for the <b>To</b> property.
* @param iri new value for To property
*/
- public void setTo(AttributedURIType iri) {
- to = iri;
+ public void setTo(EndpointReferenceType epr) {
+ to = epr;
}
/**
@@ -184,7 +188,7 @@
buf.append(", ");
}
buf.append("To: ");
- buf.append(to.getValue());
+ buf.append(to.getAddress().getValue());
}
if (null != replyTo) {
AttributedURIType address = replyTo.getAddress();
Modified: incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java?view=diff&rev=530804&r1=530803&r2=530804
==============================================================================
--- incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java (original)
+++ incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java Fri Apr 20 06:40:11 2007
@@ -29,6 +29,7 @@
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.ws.RequestWrapper;
import javax.xml.ws.ResponseWrapper;
@@ -54,6 +55,7 @@
import org.apache.cxf.workqueue.OneShotAsyncExecutor;
import org.apache.cxf.workqueue.SynchronousExecutor;
import org.apache.cxf.workqueue.WorkQueueManager;
+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;
@@ -74,6 +76,9 @@
private static final String WS_ADDRESSING_PACKAGE =
PackageUtils.getPackageName(EndpointReferenceType.class);
+ private static final EndpointReferenceType NONE_ENDPOINT_REFERENCE =
+ EndpointReferenceUtils.getEndpointReference(Names.WSA_NONE_ADDRESS);
+
private static final Logger LOG = LogUtils.getL7dLogger(ContextUtils.class);
@@ -456,7 +461,7 @@
// partial response that contains appropriate To and ReplyTo
// properties (i.e. anonymous & none respectively)
AddressingPropertiesImpl maps = new AddressingPropertiesImpl();
- maps.setTo(ContextUtils.getAttributedURI(Names.WSA_ANONYMOUS_ADDRESS));
+ maps.setTo(EndpointReferenceUtils.getAnonymousEndpointReference());
maps.setReplyTo(WSA_OBJECT_FACTORY.createEndpointReferenceType());
maps.getReplyTo().setAddress(getAttributedURI(Names.WSA_NONE_ADDRESS));
maps.setAction(getAttributedURI(""));
@@ -747,7 +752,18 @@
}
return method;
}
-
+
+ public static EndpointReferenceType getNoneEndpointReference() {
+ return NONE_ENDPOINT_REFERENCE;
+ }
+
+ public static void applyReferenceParam(EndpointReferenceType toEpr, JAXBElement<String> el) {
+ if (null == toEpr.getReferenceParameters()) {
+ toEpr.setReferenceParameters(WSA_OBJECT_FACTORY.createReferenceParametersType());
+ }
+ toEpr.getReferenceParameters().getAny().add(el);
+ }
+
/**
* Create a Binding specific Message.
*
Modified: incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java?view=diff&rev=530804&r1=530803&r2=530804
==============================================================================
--- incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java (original)
+++ incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java Fri Apr 20 06:40:11 2007
@@ -340,10 +340,8 @@
}
EndpointReferenceType reference = conduit != null
? conduit.getTarget()
- : null;
- maps.setTo(reference != null
- ? reference.getAddress()
- : ContextUtils.getAttributedURI(Names.WSA_NONE_ADDRESS));
+ : ContextUtils.getNoneEndpointReference();
+ maps.setTo(reference);
}
// ReplyTo, set if null in MAPs or if set to a generic address
@@ -378,7 +376,7 @@
maps.exposeAs(inMAPs.getNamespaceURI());
// To taken from ReplyTo in incoming MAPs
if (maps.getTo() == null && inMAPs.getReplyTo() != null) {
- maps.setTo(inMAPs.getReplyTo().getAddress());
+ maps.setTo(inMAPs.getReplyTo());
}
// RelatesTo taken from MessageID in incoming MAPs
if (inMAPs.getMessageID() != null
Modified: incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/MAPCodec.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/MAPCodec.java?view=diff&rev=530804&r1=530803&r2=530804
==============================================================================
--- incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/MAPCodec.java (original)
+++ incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/MAPCodec.java Fri Apr 20 06:40:11 2007
@@ -22,6 +22,7 @@
import java.util.Collections;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -35,6 +36,7 @@
import javax.xml.bind.Unmarshaller;
import javax.xml.namespace.QName;
+import org.w3c.dom.Attr;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
@@ -54,9 +56,9 @@
import org.apache.cxf.ws.addressing.ContextUtils;
import org.apache.cxf.ws.addressing.EndpointReferenceType;
import org.apache.cxf.ws.addressing.Names;
+import org.apache.cxf.ws.addressing.ReferenceParametersType;
import org.apache.cxf.ws.addressing.RelatesToType;
-
-
+import org.apache.cxf.wsdl.EndpointReferenceUtils;
/**
@@ -66,7 +68,8 @@
public class MAPCodec extends AbstractSoapInterceptor {
private static final Logger LOG = LogUtils.getL7dLogger(MAPCodec.class);
-
+ private static final String IS_REFERENCE_PARAM_ATTR_NAME = "isReferenceParameter";
+
/**
* REVISIT: map usage that the *same* interceptor instance
* is used in all chains.
@@ -186,6 +189,7 @@
AttributedURIType.class,
header,
marshaller);
+ encodeReferenceParameters(maps, header, marshaller);
propogateAction(maps.getAction(), message);
applyMAPValidation(message);
} catch (JAXBException je) {
@@ -193,6 +197,45 @@
}
}
}
+
+ private void encodeReferenceParameters(AddressingProperties maps, Element header,
+ Marshaller marshaller) throws JAXBException {
+ EndpointReferenceType toEpr = maps.getToEndpointReference();
+ if (null != toEpr) {
+ ReferenceParametersType params = toEpr.getReferenceParameters();
+ if (null != params) {
+ for (Object o : params.getAny()) {
+ if (o instanceof Element || o instanceof JAXBElement) {
+ JAXBElement jaxbEl = null;
+ if (o instanceof Element) {
+ Element e = (Element)o;
+ QName elQn = new QName(e.getNamespaceURI(), e.getLocalName());
+ jaxbEl = new JAXBElement<String>(elQn,
+ String.class,
+ e.getTextContent());
+ } else {
+ jaxbEl = (JAXBElement) o;
+ }
+
+ marshaller.marshal(jaxbEl, header);
+ Element lastAdded = (Element)header.getLastChild();
+ addIsReferenceParameterMarkerAttribute(lastAdded);
+ } else {
+ LOG.log(Level.WARNING, "IGNORE_NON_ELEMENT_REF_PARAM_MSG", o);
+ }
+ }
+ }
+ }
+ }
+
+ private void addIsReferenceParameterMarkerAttribute(Element lastAdded) {
+ Attr isRefParamAttr =
+ lastAdded.getOwnerDocument().createAttributeNS(Names.WSA_NAMESPACE_PREFIX,
+ IS_REFERENCE_PARAM_ATTR_NAME);
+ isRefParamAttr.setTextContent("1");
+ isRefParamAttr.setPrefix(Names.WSA_NAMESPACE_PREFIX);
+ lastAdded.setAttributeNodeNS(isRefParamAttr);
+ }
/**
* Encode message in exposed version.
@@ -239,6 +282,7 @@
if (header != null) {
LOG.log(Level.INFO, "Inbound WS-Addressing headers");
Unmarshaller unmarshaller = null;
+ Set<Element> referenceParameterHeaders = null;
NodeList headerElements = header.getChildNodes();
int headerCount = headerElements.getLength();
for (int i = 0; i < headerCount; i++) {
@@ -264,11 +308,12 @@
headerElement,
unmarshaller));
} else if (Names.WSA_TO_NAME.equals(localName)) {
- maps.setTo(decodeAsNative(
+ AttributedURIType addr = decodeAsNative(
headerURI,
AttributedURIType.class,
headerElement,
- unmarshaller));
+ unmarshaller);
+ maps.setTo(EndpointReferenceUtils.getEndpointReference(addr));
} else if (Names.WSA_REPLYTO_NAME.equals(localName)) {
maps.setReplyTo(decodeAsNative(
headerURI,
@@ -294,13 +339,23 @@
headerElement,
unmarshaller));
}
+ } else if (null != headerElement.getAttribute(IS_REFERENCE_PARAM_ATTR_NAME)) {
+ if (null == referenceParameterHeaders) {
+ referenceParameterHeaders = new HashSet<Element>();
+ }
+ referenceParameterHeaders.add(headerElement);
} else if (headerURI.contains(Names.WSA_NAMESPACE_PATTERN)) {
LOG.log(Level.WARNING,
"UNSUPPORTED_VERSION_MSG",
headerURI);
}
}
- }
+ }
+ if (null != referenceParameterHeaders) {
+ decodeReferenceParameters(referenceParameterHeaders, maps, unmarshaller);
+ }
+ restoreExchange(message, maps);
+ markPartialResponse(message, maps);
}
} catch (JAXBException je) {
LOG.log(Level.WARNING, "SOAP_HEADER_DECODE_FAILURE_MSG", je);
@@ -308,6 +363,19 @@
return maps;
}
+ private void decodeReferenceParameters(Set<Element> referenceParameterHeaders,
+ AddressingPropertiesImpl maps,
+ Unmarshaller unmarshaller)
+ throws JAXBException {
+ EndpointReferenceType toEpr = maps.getToEndpointReference();
+ if (null != toEpr) {
+ for (Element e : referenceParameterHeaders) {
+ JAXBElement<String> el = unmarshaller.unmarshal(e, String.class);
+ ContextUtils.applyReferenceParam(toEpr, el);
+ }
+ }
+ }
+
/**
* Decodes a MAP from a exposed version.
*
Modified: incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/Messages.properties
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/Messages.properties?view=diff&rev=530804&r1=530803&r2=530804
==============================================================================
--- incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/Messages.properties (original)
+++ incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/Messages.properties Fri Apr 20 06:40:11 2007
@@ -21,3 +21,4 @@
SOAP_HEADER_ENCODE_FAILURE_MSG = WS-Addressing - encoding Message Addressing Properties as SOAP Headers failed:
SOAP_HEADER_DECODE_FAILURE_MSG = WS-Addressing - decoding Message Addressing Properties from SOAP Headers failed:
UNSUPPORTED_VERSION_MSG = Unsupported WS-Addressing version {0}
+IGNORE_NON_ELEMENT_REF_PARAM_MSG = Ignoring reference parameter {0} because it is not a JAXBElement
Modified: incubator/cxf/trunk/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/soap/MAPCodecTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/soap/MAPCodecTest.java?view=diff&rev=530804&r1=530803&r2=530804
==============================================================================
--- incubator/cxf/trunk/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/soap/MAPCodecTest.java (original)
+++ incubator/cxf/trunk/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/soap/MAPCodecTest.java Fri Apr 20 06:40:11 2007
@@ -51,6 +51,7 @@
import org.apache.cxf.ws.addressing.RelatesToType;
import org.apache.cxf.ws.addressing.v200408.AttributedURI;
import org.apache.cxf.ws.addressing.v200408.Relationship;
+import org.apache.cxf.wsdl.EndpointReferenceUtils;
import org.easymock.IArgumentMatcher;
import org.easymock.classextension.EasyMock;
import org.easymock.classextension.IMocksControl;
@@ -427,7 +428,8 @@
maps.setMessageID(id);
AttributedURIType to =
ContextUtils.getAttributedURI("foobar");
- maps.setTo(to);
+ EndpointReferenceType toEpr = EndpointReferenceUtils.getEndpointReference(to);
+ maps.setTo(toEpr);
EndpointReferenceType replyTo = new EndpointReferenceType();
String anonymous =
exposeAsNative
Modified: incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Proxy.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Proxy.java?view=diff&rev=530804&r1=530803&r2=530804
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Proxy.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/Proxy.java Fri Apr 20 06:40:11 2007
@@ -217,14 +217,15 @@
public Conduit selectConduit(Message message) {
Conduit conduit = null;
EndpointInfo endpointInfo = getEndpoint().getEndpointInfo();
- String originalAddress = endpointInfo.getAddress();
+ org.apache.cxf.ws.addressing.EndpointReferenceType original =
+ endpointInfo.getTarget();
try {
if (null != address) {
- endpointInfo.setAddress(address.getAddress().getValue());
+ endpointInfo.setAddress(address);
}
conduit = super.selectConduit(message);
} finally {
- endpointInfo.setAddress(originalAddress);
+ endpointInfo.setAddress(original);
}
return conduit;
}
Modified: incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/ProxyTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/ProxyTest.java?view=diff&rev=530804&r1=530803&r2=530804
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/ProxyTest.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/ProxyTest.java Fri Apr 20 06:40:11 2007
@@ -38,7 +38,6 @@
import org.apache.cxf.service.model.ServiceInfo;
import org.apache.cxf.transport.Conduit;
import org.apache.cxf.workqueue.SynchronousExecutor;
-import org.apache.cxf.ws.addressing.AttributedURIType;
import org.apache.cxf.ws.addressing.RelatesToType;
import org.apache.cxf.ws.addressing.v200408.AttributedURI;
import org.apache.cxf.ws.addressing.v200408.EndpointReferenceType;
@@ -248,15 +247,7 @@
Proxy.RMClient client = proxy.new RMClient(bus, endpoint, conduit, address);
EndpointInfo endpointInfo = control.createMock(EndpointInfo.class);
EasyMock.expect(endpoint.getEndpointInfo()).andReturn(endpointInfo).anyTimes();
- String oa = "oa";
- EasyMock.expect(endpointInfo.getAddress()).andReturn(oa);
- AttributedURIType uri = control.createMock(AttributedURIType.class);
- EasyMock.expect(address.getAddress()).andReturn(uri);
- String ta = "ta";
- EasyMock.expect(uri.getValue()).andReturn(ta);
- endpointInfo.setAddress(ta);
- EasyMock.expectLastCall();
- endpointInfo.setAddress(oa);
+ endpointInfo.setAddress(address);
EasyMock.expectLastCall();
control.replay();
assertSame(conduit, client.getConduit());
Modified: incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMOutInterceptorTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMOutInterceptorTest.java?view=diff&rev=530804&r1=530803&r2=530804
==============================================================================
--- incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMOutInterceptorTest.java (original)
+++ incubator/cxf/trunk/rt/ws/rm/src/test/java/org/apache/cxf/ws/rm/RMOutInterceptorTest.java Fri Apr 20 06:40:11 2007
@@ -30,7 +30,6 @@
import org.apache.cxf.phase.Phase;
import org.apache.cxf.phase.PhaseInterceptorChain;
import org.apache.cxf.ws.addressing.AddressingPropertiesImpl;
-import org.apache.cxf.ws.addressing.AttributedURIType;
import org.apache.cxf.ws.addressing.EndpointReferenceType;
import org.apache.cxf.ws.addressing.JAXWSAConstants;
import org.apache.cxf.ws.addressing.MAPAggregator;
@@ -124,14 +123,7 @@
private AddressingPropertiesImpl createMAPs(String action, String to, String replyTo) {
AddressingPropertiesImpl maps = new AddressingPropertiesImpl();
- org.apache.cxf.ws.addressing.ObjectFactory factory =
- new org.apache.cxf.ws.addressing.ObjectFactory();
- AttributedURIType uri = factory.createAttributedURIType();
- uri.setValue(action);
- maps.setAction(uri);
- uri = factory.createAttributedURIType();
- uri.setValue(to);
- maps.setTo(uri);
+ maps.setTo(RMUtils.createReference(to));
EndpointReferenceType epr = RMUtils.createReference(replyTo);
maps.setReplyTo(epr);
return maps;
Added: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/factory_pattern/HttpNumberFactoryImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/factory_pattern/HttpNumberFactoryImpl.java?view=auto&rev=530804
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/factory_pattern/HttpNumberFactoryImpl.java (added)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/factory_pattern/HttpNumberFactoryImpl.java Fri Apr 20 06:40:11 2007
@@ -0,0 +1,63 @@
+/**
+ * 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.systest.factory_pattern;
+
+import javax.jws.WebService;
+import javax.xml.namespace.QName;
+
+import org.apache.cxf.BusFactory;
+import org.apache.cxf.jaxws.EndpointImpl;
+import org.apache.cxf.ws.addressing.EndpointReferenceType;
+import org.apache.cxf.wsdl.EndpointReferenceUtils;
+
+@WebService(serviceName = "NumberFactoryService",
+ portName = "NumberFactoryPort",
+ endpointInterface = "org.apache.cxf.factory_pattern.NumberFactory",
+ targetNamespace = "http://cxf.apache.org/factory_pattern")
+public class HttpNumberFactoryImpl extends NumberFactoryImpl {
+
+ public HttpNumberFactoryImpl() {
+ super();
+ // do servant creation up front so manual epr creation test has endpoint to talk to.
+ // the manual epr will not come from create()
+ //
+ manageNumberServantInitialisation();
+ }
+
+ public EndpointReferenceType create(String id) {
+ String portName = null;
+ return EndpointReferenceUtils.getEndpointReferenceWithId(NUMBER_SERVICE_QNAME,
+ portName,
+ id,
+ BusFactory.getDefaultBus());
+ }
+
+ protected void initDefaultServant() {
+ servant = new HttpNumberImpl();
+
+ String wsdlLocation = "testutils/factory_pattern.wsdl";
+ String bindingId = null;
+ EndpointImpl ep =
+ new EndpointImpl(BusFactory.getDefaultBus(), servant, bindingId, wsdlLocation);
+ ep.setEndpointName(new QName(NUMBER_SERVICE_QNAME.getNamespaceURI(), "NumberPort"));
+ ep.publish();
+ templateEpr = ep.getServer().getDestination().getAddress();
+ }
+}
Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/factory_pattern/HttpNumberFactoryImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/factory_pattern/HttpNumberImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/factory_pattern/HttpNumberImpl.java?view=auto&rev=530804
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/factory_pattern/HttpNumberImpl.java (added)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/factory_pattern/HttpNumberImpl.java Fri Apr 20 06:40:11 2007
@@ -0,0 +1,43 @@
+/**
+ * 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.systest.factory_pattern;
+
+import javax.annotation.Resource;
+import javax.jws.WebService;
+import javax.xml.ws.WebServiceContext;
+import javax.xml.ws.handler.MessageContext;
+
+import org.apache.cxf.wsdl.EndpointReferenceUtils;
+
+@WebService(serviceName = "NumberService",
+ endpointInterface = "org.apache.cxf.factory_pattern.Number",
+ targetNamespace = "http://cxf.apache.org/factory_pattern")
+public class HttpNumberImpl extends NumberImpl {
+ @Resource
+ protected WebServiceContext aContext;
+
+ protected WebServiceContext getWebSercviceContext() {
+ return aContext;
+ }
+
+ protected String idFromMessageContext(MessageContext mc) {
+ return EndpointReferenceUtils.getEndpointReferenceId(mc);
+ }
+}
Propchange: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/factory_pattern/HttpNumberImpl.java
------------------------------------------------------------------------------
svn:eol-style = native