You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2012/12/06 07:46:14 UTC
svn commit: r1417747 [1/2] - in /camel/trunk/components/camel-spring-ws/src:
main/java/org/apache/camel/component/spring/ws/
main/java/org/apache/camel/component/spring/ws/bean/
main/java/org/apache/camel/component/spring/ws/filter/impl/ main/java/org/...
Author: ningjiang
Date: Thu Dec 6 06:46:10 2012
New Revision: 1417747
URL: http://svn.apache.org/viewvc?rev=1417747&view=rev
Log:
CAMEL-5815 Support for WS-Addressing Action with thanks to Andrej
Added:
camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/bean/CamelSpringWSEndpointMapping.java
camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/bean/WSACamelEndpointMapping.java
camel/trunk/components/camel-spring-ws/src/test/java/net/
camel/trunk/components/camel-spring-ws/src/test/java/net/javacrumbs/
camel/trunk/components/camel-spring-ws/src/test/java/net/javacrumbs/springws/
camel/trunk/components/camel-spring-ws/src/test/java/net/javacrumbs/springws/test/
camel/trunk/components/camel-spring-ws/src/test/java/net/javacrumbs/springws/test/helper/
camel/trunk/components/camel-spring-ws/src/test/java/net/javacrumbs/springws/test/helper/InMemoryWebServiceMessageSender2.java
camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/addressing/
camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/addressing/AbstractConsumerTests.java
camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/addressing/ConsumerWSAEndpointMappingRouteTest.java
camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/addressing/ConsumerWSANewChannelParamsActionTests.java
camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/addressing/ConsumerWSANewChannelParamsToTests.java
camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/addressing/ConsumerWSASameChannelParamsActionTests.java
camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/addressing/ConsumerWSASameChannelParamsToTests.java
camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/addressing/ProducerParamsBasicTest.java
camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/addressing/ProducerParamsPrecedenceTest.java
camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/processor/
camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/processor/FaultResponseProcessor.java
- copied, changed from r1417746, camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConstants.java
camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/processor/OkResponseProcessor.java
camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/processor/PrecedenceProcessor.java
camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/utils/
camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/utils/OutputChannelReceiver.java
- copied, changed from r1417746, camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConstants.java
camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/utils/TestUtil.java
camel/trunk/components/camel-spring-ws/src/test/resources/org/apache/camel/component/spring/ws/addresing/
camel/trunk/components/camel-spring-ws/src/test/resources/org/apache/camel/component/spring/ws/addresing/ConsumerWSAEndpointMappingRouteTest-context.xml
camel/trunk/components/camel-spring-ws/src/test/resources/org/apache/camel/component/spring/ws/addresing/ConsumerWSAParamsActionTests-context.xml
camel/trunk/components/camel-spring-ws/src/test/resources/org/apache/camel/component/spring/ws/addresing/ConsumerWSAParamsTOTests-context.xml
camel/trunk/components/camel-spring-ws/src/test/resources/org/apache/camel/component/spring/ws/addresing/ProducerParamsBasicTest-context.xml
camel/trunk/components/camel-spring-ws/src/test/resources/org/apache/camel/component/spring/ws/addresing/ProducerParamsPrecedenceTest-context.xml
Modified:
camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceComponent.java
camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConfiguration.java
camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConstants.java
camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceProducer.java
camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/bean/CamelEndpointMapping.java
camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/filter/impl/BasicMessageFilter.java
camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/type/EndpointMappingType.java
camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ConsumerEndpointMappingByBeanNameRouteTest.java
camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ConsumerEndpointMappingResponseHandlingRouteTest.java
camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/filter/impl/BasicMessageFilterTest.java
camel/trunk/components/camel-spring-ws/src/test/resources/org/apache/camel/component/spring/ws/ConsumerEndpointMappingResponseHandlingRouteTest-context.xml
camel/trunk/components/camel-spring-ws/src/test/resources/org/apache/camel/component/spring/ws/DefaultMessageFilter-context.xml
camel/trunk/components/camel-spring-ws/src/test/resources/org/apache/camel/component/spring/ws/MessageFilter-context.xml
Modified: camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceComponent.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceComponent.java?rev=1417747&r1=1417746&r2=1417747&view=diff
==============================================================================
--- camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceComponent.java (original)
+++ camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceComponent.java Thu Dec 6 06:46:10 2012
@@ -26,7 +26,7 @@ import org.apache.camel.CamelContext;
import org.apache.camel.Endpoint;
import org.apache.camel.RuntimeCamelException;
import org.apache.camel.component.spring.ws.bean.CamelEndpointDispatcher;
-import org.apache.camel.component.spring.ws.bean.CamelEndpointMapping;
+import org.apache.camel.component.spring.ws.bean.CamelSpringWSEndpointMapping;
import org.apache.camel.component.spring.ws.filter.MessageFilter;
import org.apache.camel.component.spring.ws.type.EndpointMappingKey;
import org.apache.camel.component.spring.ws.type.EndpointMappingType;
@@ -68,7 +68,7 @@ public class SpringWebserviceComponent e
addConsumerConfiguration(remaining, parameters, configuration);
addProducerConfiguration(remaining, parameters, configuration);
addXmlConverterToConfiguration(parameters, configuration);
- configureMessageFilter(parameters, configuration);
+ configureMessageFilter(parameters, configuration);
setProperties(configuration, parameters);
return new SpringWebserviceEndpoint(this, uri, configuration);
}
@@ -88,8 +88,7 @@ public class SpringWebserviceComponent e
}
}
- private void addProducerConfiguration(String remaining, Map<String, Object> parameters,
- SpringWebserviceConfiguration configuration) throws URISyntaxException {
+ private void addProducerConfiguration(String remaining, Map<String, Object> parameters, SpringWebserviceConfiguration configuration) throws URISyntaxException {
if (configuration.getEndpointMapping() == null && configuration.getEndpointDispatcher() == null) {
LOG.debug("Building Spring Web Services producer");
URI webServiceEndpointUri = new URI(UnsafeUriCharactersEncoder.encode(remaining));
@@ -134,11 +133,11 @@ public class SpringWebserviceComponent e
private void addEndpointMappingToConfiguration(Map<String, Object> parameters,
SpringWebserviceConfiguration configuration) {
- // Obtain generic CamelEndpointMapping from registry
- CamelEndpointMapping endpointMapping = resolveAndRemoveReferenceParameter(parameters, "endpointMapping", CamelEndpointMapping.class, null);
+ // Obtain generic CamelSpringWSEndpointMapping from registry
+ CamelSpringWSEndpointMapping endpointMapping = resolveAndRemoveReferenceParameter(parameters, "endpointMapping", CamelSpringWSEndpointMapping.class, null);
if (endpointMapping == null && configuration.getEndpointDispatcher() == null) {
- throw new IllegalArgumentException("No CamelEndpointMapping found in Spring ApplicationContext."
- + " This bean is required for Spring-WS consumer support (unless the 'spring-ws:beanname:' URI scheme is used)");
+ throw new IllegalArgumentException("No instance of CamelSpringWSEndpointMapping found in Spring ApplicationContext."
+ + " This bean is required for Spring-WS consumer support (unless the 'spring-ws:beanname:' URI scheme is used)");
}
configuration.setEndpointMapping(endpointMapping);
}
@@ -157,8 +156,7 @@ public class SpringWebserviceComponent e
}
configuration.setXmlConverter(xmlConverter);
}
-
-
+
/**
* Configures the messageFilter's factory. The factory is looked up in the endpoint's URI and then in the Spring's context.
* The bean search mechanism looks for a bean with the name messageFilter.
Modified: camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConfiguration.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConfiguration.java?rev=1417747&r1=1417746&r2=1417747&view=diff
==============================================================================
--- camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConfiguration.java (original)
+++ camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConfiguration.java Thu Dec 6 06:46:10 2012
@@ -20,31 +20,37 @@ import java.net.URI;
import java.net.URISyntaxException;
import org.apache.camel.component.spring.ws.bean.CamelEndpointDispatcher;
-import org.apache.camel.component.spring.ws.bean.CamelEndpointMapping;
+import org.apache.camel.component.spring.ws.bean.CamelSpringWSEndpointMapping;
import org.apache.camel.component.spring.ws.filter.MessageFilter;
import org.apache.camel.component.spring.ws.filter.impl.BasicMessageFilter;
import org.apache.camel.component.spring.ws.type.EndpointMappingKey;
import org.apache.camel.converter.jaxp.XmlConverter;
import org.apache.camel.util.jsse.SSLContextParameters;
+import org.springframework.util.StringUtils;
import org.springframework.ws.client.core.WebServiceTemplate;
+import org.springframework.ws.soap.addressing.server.annotation.Action;
public class SpringWebserviceConfiguration {
-
+
/* Producer configuration */
private WebServiceTemplate webServiceTemplate;
private String soapAction;
private URI wsAddressingAction;
+ private URI outputAction;
+ private URI faultAction;
+ private URI faultTo;
+ private URI replyTo;
private int timeout = -1;
/* Consumer configuration */
- private CamelEndpointMapping endpointMapping;
+ private CamelSpringWSEndpointMapping endpointMapping;
private CamelEndpointDispatcher endpointDispatcher;
private EndpointMappingKey endpointMappingKey;
private SSLContextParameters sslContextParameters;
private XmlConverter xmlConverter;
private MessageFilter messageFilter;
-
+
public WebServiceTemplate getWebServiceTemplate() {
return webServiceTemplate;
}
@@ -80,7 +86,9 @@ public class SpringWebserviceConfigurati
}
public void setWsAddressingAction(String wsAddressingAction) throws URISyntaxException {
- setWsAddressingAction(new URI(wsAddressingAction));
+ if (StringUtils.hasText(wsAddressingAction)) {
+ setWsAddressingAction(new URI(wsAddressingAction));
+ }
}
public int getTimeout() {
@@ -91,11 +99,11 @@ public class SpringWebserviceConfigurati
this.timeout = timeout;
}
- public CamelEndpointMapping getEndpointMapping() {
+ public CamelSpringWSEndpointMapping getEndpointMapping() {
return endpointMapping;
}
- public void setEndpointMapping(CamelEndpointMapping endpointMapping) {
+ public void setEndpointMapping(CamelSpringWSEndpointMapping endpointMapping) {
this.endpointMapping = endpointMapping;
}
@@ -106,7 +114,7 @@ public class SpringWebserviceConfigurati
public void setEndpointMappingKey(EndpointMappingKey endpointMappingKey) {
this.endpointMappingKey = endpointMappingKey;
}
-
+
public SSLContextParameters getSslContextParameters() {
return sslContextParameters;
}
@@ -141,7 +149,6 @@ public class SpringWebserviceConfigurati
return i == -1 ? uri : (uri.subSequence(0, i) + "}" + uri.substring(i + 1)).replaceFirst("\\(", "{");
}
-
/**
* Default setter to override failsafe message filter.
*
@@ -165,4 +172,85 @@ public class SpringWebserviceConfigurati
}
return this.messageFilter;
}
+
+ /**
+ * Signifies the value for the response WS-Addressing <code>Action</code>
+ * header that is provided by the method.
+ *
+ * @see {@link Action}
+ */
+ public URI getOutputAction() {
+ return outputAction;
+ }
+
+ public void setOutputAction(String output) throws URISyntaxException {
+ if (StringUtils.hasText(output)) {
+ setOutputAction(new URI(output));
+ }
+ }
+
+ public void setOutputAction(URI outputAction) {
+ this.outputAction = outputAction;
+ }
+
+ /**
+ * Signifies the value for the faultAction response WS-Addressing
+ * <code>Fault Action</code> header that is provided by the method.
+ *
+ * @see {@link Action}
+ */
+ public URI getFaultAction() {
+ return faultAction;
+ }
+
+ public void setFaultAction(String fault) throws URISyntaxException {
+ if (StringUtils.hasText(fault)) {
+ setFaultAction(new URI(fault));
+ }
+ }
+
+ public void setFaultAction(URI fault) {
+ this.faultAction = fault;
+ }
+
+ /**
+ * Signifies the value for the faultAction response WS-Addressing
+ * <code>FaultTo</code> header that is provided by the method.
+ *
+ * @see {@link Action}
+ */
+ public URI getFaultTo() {
+ return faultTo;
+ }
+
+ public void setFaultTo(String faultTo) throws URISyntaxException {
+ if (StringUtils.hasText(faultTo)) {
+ setFaultTo(new URI(faultTo));
+ }
+ }
+
+ public void setFaultTo(URI faultTo) {
+ this.faultTo = faultTo;
+ }
+
+ /**
+ * Signifies the value for the replyTo response WS-Addressing
+ * <code>ReplyTo</code> header that is provided by the method.
+ *
+ * @see {@link Action}
+ */
+ public URI getReplyTo() {
+ return replyTo;
+ }
+
+ public void setReplyTo(String replyToAction) throws URISyntaxException {
+ if (StringUtils.hasText(replyToAction)) {
+ setReplyTo(new URI(replyToAction));
+ }
+ }
+
+ public void setReplyTo(URI replyToAction) {
+ this.replyTo = replyToAction;
+ }
+
}
Modified: camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConstants.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConstants.java?rev=1417747&r1=1417746&r2=1417747&view=diff
==============================================================================
--- camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConstants.java (original)
+++ camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceConstants.java Thu Dec 6 06:46:10 2012
@@ -22,6 +22,12 @@ public final class SpringWebserviceConst
public static final String SPRING_WS_ENDPOINT_URI = "CamelSpringWebserviceEndpointUri";
public static final String SPRING_WS_SOAP_ACTION = "CamelSpringWebserviceSoapAction";
public static final String SPRING_WS_ADDRESSING_ACTION = "CamelSpringWebserviceAddressingAction";
+ public static final String SPRING_WS_ADDRESSING_PRODUCER_FAULT_TO = "CamelSpringWebserviceAddressingFaultTo";
+ public static final String SPRING_WS_ADDRESSING_PRODUCER_REPLY_TO = "CamelSpringWebserviceAddressingReplyTo";
+
+ /* Consumers constants (reserved, not impl. yet) */
+ public static final String SPRING_WS_ADDRESSING_CONSUMER_OUTPUT_ACTION = "CamelSpringWebserviceAddressingOutputAction";
+ public static final String SPRING_WS_ADDRESSING_CONSUMER_FAULT_ACTION = "CamelSpringWebserviceAddressingFaultAction";
private SpringWebserviceConstants() {
}
Modified: camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceProducer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceProducer.java?rev=1417747&r1=1417746&r2=1417747&view=diff
==============================================================================
--- camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceProducer.java (original)
+++ camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/SpringWebserviceProducer.java Thu Dec 6 06:46:10 2012
@@ -39,6 +39,7 @@ import org.springframework.ws.client.cor
import org.springframework.ws.client.core.WebServiceMessageCallback;
import org.springframework.ws.client.core.WebServiceTemplate;
import org.springframework.ws.soap.addressing.client.ActionCallback;
+import org.springframework.ws.soap.addressing.core.EndpointReference;
import org.springframework.ws.soap.client.core.SoapActionCallback;
import org.springframework.ws.transport.WebServiceConnection;
import org.springframework.ws.transport.WebServiceMessageSender;
@@ -67,14 +68,17 @@ public class SpringWebserviceProducer ex
Source sourcePayload = exchange.getIn().getMandatoryBody(Source.class);
// Extract optional headers
- String endpointUri = exchange.getIn().getHeader(SpringWebserviceConstants.SPRING_WS_ENDPOINT_URI, String.class);
- String soapAction = exchange.getIn().getHeader(SpringWebserviceConstants.SPRING_WS_SOAP_ACTION, String.class);
- URI wsAddressingAction = exchange.getIn().getHeader(SpringWebserviceConstants.SPRING_WS_ADDRESSING_ACTION, URI.class);
+ String endpointUriHeader = exchange.getIn().getHeader(SpringWebserviceConstants.SPRING_WS_ENDPOINT_URI, String.class);
+ String soapActionHeader = exchange.getIn().getHeader(SpringWebserviceConstants.SPRING_WS_SOAP_ACTION, String.class);
+ URI wsAddressingActionHeader = exchange.getIn().getHeader(SpringWebserviceConstants.SPRING_WS_ADDRESSING_ACTION, URI.class);
+ URI wsReplyToHeader = exchange.getIn().getHeader(SpringWebserviceConstants.SPRING_WS_ADDRESSING_PRODUCER_REPLY_TO, URI.class);
+ URI wsFaultToHeader = exchange.getIn().getHeader(SpringWebserviceConstants.SPRING_WS_ADDRESSING_PRODUCER_FAULT_TO, URI.class);
- WebServiceMessageCallback callback = new DefaultWebserviceMessageCallback(soapAction, wsAddressingAction, getEndpoint().getConfiguration(), exchange);
+ WebServiceMessageCallback callback = new DefaultWebserviceMessageCallback(soapActionHeader, wsAddressingActionHeader, wsReplyToHeader,
+ wsFaultToHeader, getEndpoint().getConfiguration(), exchange);
Object body = null;
- if (endpointUri != null) {
- body = getEndpoint().getConfiguration().getWebServiceTemplate().sendSourceAndReceive(endpointUri, sourcePayload, callback, SOURCE_EXTRACTOR);
+ if (endpointUriHeader != null) {
+ body = getEndpoint().getConfiguration().getWebServiceTemplate().sendSourceAndReceive(endpointUriHeader, sourcePayload, callback, SOURCE_EXTRACTOR);
} else {
body = getEndpoint().getConfiguration().getWebServiceTemplate().sendSourceAndReceive(sourcePayload, callback, SOURCE_EXTRACTOR);
}
@@ -194,12 +198,16 @@ public class SpringWebserviceProducer ex
protected static class DefaultWebserviceMessageCallback implements WebServiceMessageCallback {
private final String soapActionHeader;
private final URI wsAddressingActionHeader;
+ private final URI wsReplyToHeader;
+ private final URI wsFaultToHeader;
private final SpringWebserviceConfiguration configuration;
private final Exchange exchange;
- public DefaultWebserviceMessageCallback(String soapAction, URI wsAddressingAction, SpringWebserviceConfiguration configuration, Exchange exchange) {
+ public DefaultWebserviceMessageCallback(String soapAction, URI wsAddressingAction, URI wsReplyTo, URI wsFaultTo, SpringWebserviceConfiguration configuration, Exchange exchange) {
this.soapActionHeader = soapAction;
this.wsAddressingActionHeader = wsAddressingAction;
+ this.wsReplyToHeader = wsReplyTo;
+ this.wsFaultToHeader = wsFaultTo;
this.configuration = configuration;
this.exchange = exchange;
}
@@ -215,8 +223,19 @@ public class SpringWebserviceProducer ex
// 'to' header will default to the URL of the connection).
// Note that exchange header takes precedence over endpoint option
URI wsAddressingAction = wsAddressingActionHeader != null ? wsAddressingActionHeader : configuration.getWsAddressingAction();
+ URI wsReplyTo = wsReplyToHeader != null ? wsReplyToHeader : configuration.getReplyTo();
+ URI wsFaultTo = wsFaultToHeader != null ? wsFaultToHeader : configuration.getFaultTo();
+
if (wsAddressingAction != null) {
- new ActionCallback(wsAddressingAction).doWithMessage(message);
+ ActionCallback actionCallback = new ActionCallback(wsAddressingAction);
+ if (wsReplyTo != null) {
+ actionCallback.setReplyTo(new EndpointReference(wsReplyTo));
+ }
+
+ if (wsFaultTo != null) {
+ actionCallback.setFaultTo(new EndpointReference(wsFaultTo));
+ }
+ actionCallback.doWithMessage(message);
}
configuration.getMessageFilter().filterProducer(exchange, message);
Modified: camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/bean/CamelEndpointMapping.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/bean/CamelEndpointMapping.java?rev=1417747&r1=1417746&r2=1417747&view=diff
==============================================================================
--- camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/bean/CamelEndpointMapping.java (original)
+++ camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/bean/CamelEndpointMapping.java Thu Dec 6 06:46:10 2012
@@ -34,6 +34,7 @@ import org.apache.camel.component.spring
import org.apache.camel.component.spring.ws.type.EndpointMappingType;
import org.apache.camel.converter.jaxp.XmlConverter;
import org.springframework.beans.factory.InitializingBean;
+import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
import org.springframework.ws.context.MessageContext;
import org.springframework.ws.server.EndpointInterceptor;
@@ -50,37 +51,46 @@ import org.springframework.ws.transport.
import org.springframework.xml.xpath.XPathExpression;
/**
- * Spring {@link EndpointMapping} for mapping messages to corresponding Camel endpoints.
- * This class needs to be registered in the Spring <tt>ApplicationContext</tt> when
- * consuming messages using any of the following URI schemes:
+ * Spring {@link EndpointMapping} for mapping messages to corresponding Camel
+ * endpoints. This class needs to be registered in the Spring
+ * <tt>ApplicationContext</tt> when consuming messages using any of the
+ * following URI schemes:
* <p/>
* <ul>
* <li><tt>spring-ws:rootqname:</tt><br/>
- * Equivalent to endpoint mappings specified through {@link org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping}
+ * Equivalent to endpoint mappings specified through
+ * {@link org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping}
* <p/>
* <li><tt>spring-ws:soapaction:</tt><br/>
- * Equivalent to endpoint mappings specified through {@link org.springframework.ws.soap.server.endpoint.mapping.SoapActionEndpointMapping}
+ * Equivalent to endpoint mappings specified through
+ * {@link org.springframework.ws.soap.server.endpoint.mapping.SoapActionEndpointMapping}
* <p/>
* <li><tt>spring-ws:uri:</tt><br/>
- * Equivalent to endpoint mappings specified through {@link org.springframework.ws.server.endpoint.mapping.UriEndpointMapping}
+ * Equivalent to endpoint mappings specified through
+ * {@link org.springframework.ws.server.endpoint.mapping.UriEndpointMapping}
* <p/>
* <li><tt>spring-ws:xpathresult:</tt><br/>
- * Equivalent to endpoint mappings specified through {@link org.springframework.ws.server.endpoint.mapping.XPathPayloadEndpointMapping}
+ * Equivalent to endpoint mappings specified through
+ * {@link org.springframework.ws.server.endpoint.mapping.XPathPayloadEndpointMapping}
* </ul>
- *
+ *
* @see org.springframework.ws.server.endpoint.mapping.AbstractEndpointMapping
* @see org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping
* @see org.springframework.ws.server.endpoint.mapping.UriEndpointMapping
* @see org.springframework.ws.server.endpoint.mapping.XPathPayloadEndpointMapping
* @see org.springframework.ws.soap.server.endpoint.mapping.SoapActionEndpointMapping
*/
-public class CamelEndpointMapping extends AbstractEndpointMapping implements InitializingBean {
+public class CamelEndpointMapping extends AbstractEndpointMapping implements InitializingBean, CamelSpringWSEndpointMapping {
private static final String DOUBLE_QUOTE = "\"";
private Map<EndpointMappingKey, MessageEndpoint> endpoints = new ConcurrentHashMap<EndpointMappingKey, MessageEndpoint>();
private TransformerFactory transformerFactory;
private XmlConverter xmlConverter;
+ private String[] actorsOrRoles;
+
+ private boolean isUltimateReceiver = true;
+
@Override
protected Object getEndpointInternal(MessageContext messageContext) throws Exception {
for (EndpointMappingKey key : endpoints.keySet()) {
@@ -114,9 +124,7 @@ public class CamelEndpointMapping extend
if (EndpointMappingType.SOAP_ACTION.equals(key.getType())) {
Object messageKey = getSoapAction(messageContext);
if (messageKey != null && key.getLookupKey().equals(messageKey)) {
- return new SoapEndpointInvocationChain(endpoint, interceptors);
- // possibly add support for SOAP actors/roles and ultimate
- // receiver in the future
+ return new SoapEndpointInvocationChain(endpoint, interceptors, actorsOrRoles, isUltimateReceiver);
}
}
}
@@ -125,7 +133,7 @@ public class CamelEndpointMapping extend
private String getSoapAction(MessageContext messageContext) {
if (messageContext.getRequest() instanceof SoapMessage) {
- SoapMessage request = (SoapMessage) messageContext.getRequest();
+ SoapMessage request = (SoapMessage)messageContext.getRequest();
String soapAction = request.getSoapAction();
if (StringUtils.hasLength(soapAction) && soapAction.startsWith(DOUBLE_QUOTE) && soapAction.endsWith(DOUBLE_QUOTE)) {
return soapAction.substring(1, soapAction.length() - 1);
@@ -151,7 +159,8 @@ public class CamelEndpointMapping extend
return qName != null ? qName.toString() : null;
}
- private String getXPathResult(MessageContext messageContext, XPathExpression expression) throws TransformerException, XMLStreamException, ParserConfigurationException, IOException, SAXException {
+ private String getXPathResult(MessageContext messageContext, XPathExpression expression) throws TransformerException, XMLStreamException, ParserConfigurationException,
+ IOException, SAXException {
if (expression != null) {
Node domNode = xmlConverter.toDOMNode(messageContext.getRequest().getPayloadSource());
if (domNode != null) {
@@ -163,8 +172,8 @@ public class CamelEndpointMapping extend
/**
* Used by Camel Spring Web Services endpoint to register consumers
- *
- * @param key unique consumer key
+ *
+ * @param key unique consumer key
* @param endpoint consumer
*/
public void addConsumer(EndpointMappingKey key, MessageEndpoint endpoint) {
@@ -173,7 +182,7 @@ public class CamelEndpointMapping extend
/**
* Used by Camel Spring Web Services endpoint to unregister consumers
- *
+ *
* @param key unique consumer key
*/
public void removeConsumer(Object key) {
@@ -182,7 +191,7 @@ public class CamelEndpointMapping extend
/**
* Gets the configured TransformerFactory
- *
+ *
* @return instance of TransformerFactory
*/
public TransformerFactory getTransformerFactory() {
@@ -191,7 +200,7 @@ public class CamelEndpointMapping extend
/**
* Optional setter to override default TransformerFactory
- *
+ *
* @param transformerFactory non-default TransformerFactory
*/
public void setTransformerFactory(TransformerFactory transformerFactory) {
@@ -206,4 +215,31 @@ public class CamelEndpointMapping extend
transformerFactory = TransformerFactory.newInstance();
}
}
+
+ /**
+ * @see {@link AbstractAddressingEndpointMapping}
+ * @param actorOrRole
+ */
+ public final void setActorOrRole(String actorOrRole) {
+ Assert.notNull(actorOrRole, "actorOrRole must not be null");
+ actorsOrRoles = new String[] {actorOrRole};
+ }
+
+ /**
+ * @see {@link AbstractAddressingEndpointMapping}
+ * @param actorsOrRoles
+ */
+ public final void setActorsOrRoles(String[] actorsOrRoles) {
+ Assert.notEmpty(actorsOrRoles, "actorsOrRoles must not be empty");
+ this.actorsOrRoles = actorsOrRoles;
+ }
+
+ /**
+ * @see {@link AbstractAddressingEndpointMapping}
+ * @param ultimateReceiver
+ */
+ public final void setUltimateReceiver(boolean ultimateReceiver) {
+ this.isUltimateReceiver = ultimateReceiver;
+ }
+
}
Added: camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/bean/CamelSpringWSEndpointMapping.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/bean/CamelSpringWSEndpointMapping.java?rev=1417747&view=auto
==============================================================================
--- camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/bean/CamelSpringWSEndpointMapping.java (added)
+++ camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/bean/CamelSpringWSEndpointMapping.java Thu Dec 6 06:46:10 2012
@@ -0,0 +1,45 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.spring.ws.bean;
+
+import org.apache.camel.component.spring.ws.type.EndpointMappingKey;
+import org.springframework.ws.server.EndpointMapping;
+import org.springframework.ws.server.endpoint.MessageEndpoint;
+
+/**
+ * Allows to register different spring-ws endpoints for camel.
+ *
+ * @author azachar
+ */
+public interface CamelSpringWSEndpointMapping extends EndpointMapping {
+
+ /**
+ * Used by Camel Spring Web Services endpoint to register consumers
+ *
+ * @param key unique consumer key
+ * @param endpoint consumer
+ */
+ void addConsumer(EndpointMappingKey key, MessageEndpoint endpoint);
+
+ /**
+ * Used by Camel Spring Web Services endpoint to unregister consumers
+ *
+ * @param key unique consumer key
+ */
+ void removeConsumer(Object key);
+
+}
Added: camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/bean/WSACamelEndpointMapping.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/bean/WSACamelEndpointMapping.java?rev=1417747&view=auto
==============================================================================
--- camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/bean/WSACamelEndpointMapping.java (added)
+++ camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/bean/WSACamelEndpointMapping.java Thu Dec 6 06:46:10 2012
@@ -0,0 +1,270 @@
+/**
+ * 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.camel.component.spring.ws.bean;
+
+import java.net.URI;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.component.spring.ws.SpringWebserviceConsumer;
+import org.apache.camel.component.spring.ws.SpringWebserviceEndpoint;
+import org.apache.camel.component.spring.ws.type.EndpointMappingKey;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.util.Assert;
+import org.springframework.ws.server.endpoint.MessageEndpoint;
+import org.springframework.ws.soap.addressing.core.MessageAddressingProperties;
+import org.springframework.ws.soap.addressing.server.AbstractAddressingEndpointMapping;
+import org.springframework.ws.soap.addressing.server.AnnotationActionEndpointMapping;
+import org.springframework.ws.transport.WebServiceConnection;
+import org.springframework.ws.transport.WebServiceMessageSender;
+
+/**
+ * Provides support for full WS-Addressing. Supported are faultAction and
+ * response action. For more details look at @see
+ * {@link AbstractAddressingEndpointMapping}. Implementation of the
+ * {@link org.springframework.ws.server.EndpointMapping} consumer interface that
+ * uses the camel uri to map to a WS-Addressing {@code Action} header.
+ * <p/>
+ */
+public class WSACamelEndpointMapping extends AbstractAddressingEndpointMapping implements CamelSpringWSEndpointMapping {
+
+ private static final Logger LOG = LoggerFactory.getLogger(WSACamelEndpointMapping.class);
+
+ private Map<EndpointMappingKey, MessageEndpoint> endpoints = new ConcurrentHashMap<EndpointMappingKey, MessageEndpoint>();
+
+ private String outputActionSuffix = AnnotationActionEndpointMapping.DEFAULT_OUTPUT_ACTION_SUFFIX;
+
+ private String faultActionSuffix = AnnotationActionEndpointMapping.DEFAULT_OUTPUT_ACTION_SUFFIX;
+
+ @Override
+ protected Object getEndpointInternal(MessageAddressingProperties map) {
+
+ for (EndpointMappingKey key : endpoints.keySet()) {
+ String compositeOrSimpleKey = null;
+ String simpleKey = null;
+ switch (key.getType()) {
+ case ACTION:
+ compositeOrSimpleKey = getActionCompositeLookupKey(map);
+ if (map.getAction() != null) {
+ simpleKey = map.getAction().toString();
+ }
+ break;
+ case TO:
+ compositeOrSimpleKey = getToCompositeLookupKey(map);
+ if (map.getTo() != null) {
+ simpleKey = map.getTo().toString();
+ }
+ break;
+ default:
+ throw new RuntimeCamelException(
+ "Invalid mapping type specified. Supported types are: spring-ws:action:<WS-Addressing Action>(optional:<WS-Addressing To>?<params...>\n)"
+ + "spring-ws:to:<WS-Addressing To>(optional:<WS-Addressing Action>?<params...>)");
+ }
+ // lookup for specific endpoint
+ if (compositeOrSimpleKey != null && key.getLookupKey().equals(compositeOrSimpleKey)) {
+ LOG.debug("Found mapping for key" + key);
+ return endpoints.get(key);
+ }
+ // look up for less specific endpoint
+ if (simpleKey != null && key.getLookupKey().equals(simpleKey)) {
+ LOG.debug("Found mapping for key" + key);
+ return endpoints.get(key);
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Generate a lookupKey for a given WS-Addressing message using action
+ * property. The possible combination are:
+ * <ul>
+ * <li>wsaAction</li>
+ * <li>wsaAction:wsaGetTo</li>
+ * </ul>
+ *
+ * @param map
+ * @return
+ */
+ protected String getActionCompositeLookupKey(MessageAddressingProperties map) {
+ String key = "";
+ if (map.getAction() != null) {
+ key = map.getAction().toString();
+ }
+ if (map.getTo() != null) {
+ if (!key.isEmpty()) {
+ key += ":";
+ }
+ key += map.getTo().toString();
+ }
+ return key;
+ }
+
+ /**
+ * Generate a lookupKey for a given WS-Addressing message using getTo
+ * property. The possible combination are:
+ * <ul>
+ * <li>wsaGetTo</li>
+ * <li>wsaGetTo:wsaAction</li>
+ * </ul>
+ *
+ * @param map
+ * @return
+ */
+ protected String getToCompositeLookupKey(MessageAddressingProperties map) {
+ String key = "";
+ if (map.getTo() != null) {
+ key = map.getTo().toString();
+ }
+ if (map.getAction() != null) {
+ if (!key.isEmpty()) {
+ key += ":";
+ }
+ key += map.getAction().toString();
+ }
+ return key;
+ }
+
+ /**
+ * Return output camel uri param or default action or null
+ */
+ @Override
+ protected URI getResponseAction(Object endpoint, MessageAddressingProperties requestMap) {
+ SpringWebserviceEndpoint camelEndpoint = getSpringWebserviceEndpoint(endpoint);
+
+ URI actionUri = camelEndpoint.getConfiguration().getOutputAction();
+ if (actionUri == null) {
+ actionUri = getDefaultResponseAction(camelEndpoint, requestMap);
+ }
+ return actionUri;
+ }
+
+ /**
+ * return fault came uri param or default fault action or null
+ */
+ @Override
+ protected URI getFaultAction(Object endpoint, MessageAddressingProperties requestMap) {
+ SpringWebserviceEndpoint camelEndpoint = getSpringWebserviceEndpoint(endpoint);
+
+ URI actionUri = camelEndpoint.getConfiguration().getFaultAction();
+ if (actionUri == null) {
+ actionUri = getDefaultFaultAction(camelEndpoint, requestMap);
+ }
+ return actionUri;
+
+ }
+
+ private SpringWebserviceEndpoint getSpringWebserviceEndpoint(Object endpoint) {
+ Assert.isInstanceOf(SpringWebserviceConsumer.class, endpoint, "Endpoint needs to be an instance of SpringWebserviceConsumer");
+
+ SpringWebserviceConsumer springWebserviceConsumer = (SpringWebserviceConsumer)endpoint;
+ return (SpringWebserviceEndpoint)springWebserviceConsumer.getEndpoint();
+ }
+
+
+
+ protected URI getDefaultResponseAction(Object endpoint, MessageAddressingProperties requestMap) {
+ URI requestAction = requestMap.getAction();
+ if (requestAction != null) {
+ return URI.create(requestAction.toString() + getOutputActionSuffix());
+ } else {
+ return null;
+ }
+ }
+
+ protected URI getDefaultFaultAction(Object endpoint, MessageAddressingProperties requestMap) {
+ URI requestAction = requestMap.getAction();
+ if (requestAction != null) {
+ return URI.create(requestAction.toString() + getFaultActionSuffix());
+ } else {
+ return null;
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see
+ * org.apache.camel.component.spring.ws.bean.CamelSpringWSEndpoint#addConsumer
+ * (org.apache.camel.component.spring.ws.type.EndpointMappingKey,
+ * org.springframework.ws.server.endpoint.MessageEndpoint)
+ */
+ public void addConsumer(EndpointMappingKey key, MessageEndpoint endpoint) {
+ endpoints.put(key, endpoint);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.camel.component.spring.ws.bean.CamelSpringWSEndpoint#
+ * removeConsumer(java.lang.Object)
+ */
+ public void removeConsumer(Object key) {
+ endpoints.remove(key);
+ }
+
+ /**
+ * Sets the single message sender used for sending messages.
+ * <p/>
+ * This message sender will be used to resolve an URI to a
+ * {@link WebServiceConnection}.
+ *
+ * @see #createConnection(URI)
+ */
+ public void setMessageSender(WebServiceMessageSender messageSender) {
+ Assert.notNull(messageSender, "'messageSender' must not be null");
+ setMessageSenders(new WebServiceMessageSender[] {messageSender});
+ }
+
+ /**
+ * Returns the suffix to add to request <code>Action</code>s for reply
+ * messages.
+ */
+ public String getOutputActionSuffix() {
+ return outputActionSuffix;
+ }
+
+ /**
+ * Sets the suffix to add to request <code>Action</code>s for reply
+ * messages.
+ *
+ * @see #DEFAULT_OUTPUT_ACTION_SUFFIX
+ */
+ public void setOutputActionSuffix(String outputActionSuffix) {
+ Assert.hasText(outputActionSuffix, "'outputActionSuffix' must not be empty");
+ this.outputActionSuffix = outputActionSuffix;
+ }
+
+ /**
+ * Returns the suffix to add to request <code>Action</code>s for reply fault
+ * messages.
+ */
+ public String getFaultActionSuffix() {
+ return faultActionSuffix;
+ }
+
+ /**
+ * Sets the suffix to add to request <code>Action</code>s for reply fault
+ * messages.
+ *
+ * @see #DEFAULT_FAULT_ACTION_SUFFIX
+ */
+ public void setFaultActionSuffix(String faultActionSuffix) {
+ Assert.hasText(faultActionSuffix, "'faultActionSuffix' must not be empty");
+ this.faultActionSuffix = faultActionSuffix;
+ }
+
+}
Modified: camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/filter/impl/BasicMessageFilter.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/filter/impl/BasicMessageFilter.java?rev=1417747&r1=1417746&r2=1417747&view=diff
==============================================================================
--- camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/filter/impl/BasicMessageFilter.java (original)
+++ camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/filter/impl/BasicMessageFilter.java Thu Dec 6 06:46:10 2012
@@ -105,8 +105,12 @@ public class BasicMessageFilter implemen
HashSet<String> headerKeySet = new HashSet<String>(headers.keySet());
headerKeySet.remove(SpringWebserviceConstants.SPRING_WS_SOAP_ACTION.toLowerCase());
- headerKeySet.remove(SpringWebserviceConstants.SPRING_WS_ADDRESSING_ACTION.toLowerCase());
headerKeySet.remove(SpringWebserviceConstants.SPRING_WS_ENDPOINT_URI.toLowerCase());
+ headerKeySet.remove(SpringWebserviceConstants.SPRING_WS_ADDRESSING_ACTION.toLowerCase());
+ headerKeySet.remove(SpringWebserviceConstants.SPRING_WS_ADDRESSING_PRODUCER_FAULT_TO.toLowerCase());
+ headerKeySet.remove(SpringWebserviceConstants.SPRING_WS_ADDRESSING_PRODUCER_REPLY_TO.toLowerCase());
+ headerKeySet.remove(SpringWebserviceConstants.SPRING_WS_ADDRESSING_CONSUMER_FAULT_ACTION.toLowerCase());
+ headerKeySet.remove(SpringWebserviceConstants.SPRING_WS_ADDRESSING_CONSUMER_OUTPUT_ACTION.toLowerCase());
headerKeySet.remove(LOWERCASE_BREADCRUMB_ID);
Modified: camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/type/EndpointMappingType.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/type/EndpointMappingType.java?rev=1417747&r1=1417746&r2=1417747&view=diff
==============================================================================
--- camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/type/EndpointMappingType.java (original)
+++ camel/trunk/components/camel-spring-ws/src/main/java/org/apache/camel/component/spring/ws/type/EndpointMappingType.java Thu Dec 6 06:46:10 2012
@@ -21,6 +21,8 @@ package org.apache.camel.component.sprin
*/
public enum EndpointMappingType {
ROOT_QNAME("rootqname:"),
+ ACTION("action:"),
+ TO("to:"),
SOAP_ACTION("soapaction:"),
XPATHRESULT("xpathresult:"),
URI("uri:"),
Added: camel/trunk/components/camel-spring-ws/src/test/java/net/javacrumbs/springws/test/helper/InMemoryWebServiceMessageSender2.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/src/test/java/net/javacrumbs/springws/test/helper/InMemoryWebServiceMessageSender2.java?rev=1417747&view=auto
==============================================================================
--- camel/trunk/components/camel-spring-ws/src/test/java/net/javacrumbs/springws/test/helper/InMemoryWebServiceMessageSender2.java (added)
+++ camel/trunk/components/camel-spring-ws/src/test/java/net/javacrumbs/springws/test/helper/InMemoryWebServiceMessageSender2.java Thu Dec 6 06:46:10 2012
@@ -0,0 +1,80 @@
+/**
+ * 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 net.javacrumbs.springws.test.helper;
+
+import org.springframework.ws.context.MessageContext;
+import org.springframework.ws.transport.WebServiceMessageReceiver;
+
+/**
+ * This class allows to spring to set the property webServiceMessageReceiver from
+ * the bean context.
+ * We have to use use the package net.javacrumbs.springws.test.helper to get it work
+ *
+ */
+public class InMemoryWebServiceMessageSender2 extends InMemoryWebServiceMessageSender {
+
+ private WebServiceMessageReceiver decorator;
+
+ @Override
+ public WebServiceMessageReceiver getWebServiceMessageReceiver() {
+ return super.getWebServiceMessageReceiver();
+ }
+
+ @Override
+ public void setWebServiceMessageReceiver(WebServiceMessageReceiver webServiceMessageReceiver) {
+ super.setWebServiceMessageReceiver(webServiceMessageReceiver);
+ }
+
+ public void decorateResponseReceiver() {
+ final WebServiceMessageReceiver original = getWebServiceMessageReceiver();
+ setWebServiceMessageReceiver(new WebServiceMessageReceiver() {
+
+ @Override
+ public void receive(MessageContext messageContext) throws Exception {
+ decorator.receive(messageContext);
+ original.receive(messageContext);
+ }
+ });
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see net.javacrumbs.springws.test.helper.InMemoryWebServiceMessageSender#
+ * afterPropertiesSet()
+ */
+ @Override
+ public void afterPropertiesSet() {
+ super.afterPropertiesSet();
+ if (decorator != null) {
+ decorateResponseReceiver();
+ }
+ }
+
+ /**
+ * * @return Returns the decorator.
+ */
+ public WebServiceMessageReceiver getDecorator() {
+ return decorator;
+ }
+
+ /**
+ * @param decorator The decorator to set.
+ */
+ public void setDecorator(WebServiceMessageReceiver decorator) {
+ this.decorator = decorator;
+ }
+}
Modified: camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ConsumerEndpointMappingByBeanNameRouteTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ConsumerEndpointMappingByBeanNameRouteTest.java?rev=1417747&r1=1417746&r2=1417747&view=diff
==============================================================================
--- camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ConsumerEndpointMappingByBeanNameRouteTest.java (original)
+++ camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ConsumerEndpointMappingByBeanNameRouteTest.java Thu Dec 6 06:46:10 2012
@@ -18,9 +18,11 @@ package org.apache.camel.component.sprin
import java.io.StringReader;
import java.io.StringWriter;
+
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
+import org.apache.camel.component.spring.ws.utils.TestUtil;
import org.apache.camel.test.junit4.CamelSpringTestSupport;
import org.junit.Before;
import org.junit.Test;
@@ -49,7 +51,7 @@ public class ConsumerEndpointMappingByBe
StreamResult result = new StreamResult(sw);
webServiceTemplate.sendSourceAndReceiveToResult(source, result);
assertNotNull(result);
- assertEquals(expectedResponse, sw.toString());
+ TestUtil.assertEqualsIgnoreNewLinesSymbol(expectedResponse, sw.toString());
}
@Override
Modified: camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ConsumerEndpointMappingResponseHandlingRouteTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ConsumerEndpointMappingResponseHandlingRouteTest.java?rev=1417747&r1=1417746&r2=1417747&view=diff
==============================================================================
--- camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ConsumerEndpointMappingResponseHandlingRouteTest.java (original)
+++ camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/ConsumerEndpointMappingResponseHandlingRouteTest.java Thu Dec 6 06:46:10 2012
@@ -18,15 +18,20 @@ package org.apache.camel.component.sprin
import java.io.StringReader;
import java.io.StringWriter;
+import java.net.URI;
+
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
+import org.apache.camel.component.spring.ws.utils.TestUtil;
import org.apache.camel.test.junit4.CamelSpringTestSupport;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.support.AbstractXmlApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.ws.client.core.WebServiceTemplate;
+import org.springframework.ws.soap.addressing.client.ActionCallback;
+import org.springframework.ws.soap.addressing.version.Addressing10;
import org.springframework.ws.soap.client.core.SoapActionCallback;
public class ConsumerEndpointMappingResponseHandlingRouteTest extends CamelSpringTestSupport {
@@ -52,7 +57,7 @@ public class ConsumerEndpointMappingResp
StreamResult result = new StreamResult(sw);
webServiceTemplate.sendSourceAndReceiveToResult(source, result);
assertNotNull(result);
- assertEquals(expectedResponse, sw.toString());
+ TestUtil.assertEqualsIgnoreNewLinesSymbol(expectedResponse, sw.toString());
}
@Test
@@ -62,7 +67,7 @@ public class ConsumerEndpointMappingResp
StreamResult result = new StreamResult(sw);
webServiceTemplate.sendSourceAndReceiveToResult(source, new SoapActionCallback("http://www.webserviceX.NET/GetQuote"), result);
assertNotNull(result);
- assertEquals(expectedResponse, sw.toString());
+ TestUtil.assertEqualsIgnoreNewLinesSymbol(expectedResponse, sw.toString());
}
@Test
@@ -72,7 +77,7 @@ public class ConsumerEndpointMappingResp
StreamResult result = new StreamResult(sw);
webServiceTemplate.sendSourceAndReceiveToResult("http://localhost/stockquote2", source, result);
assertNotNull(result);
- assertEquals(expectedResponse, sw.toString());
+ TestUtil.assertEqualsIgnoreNewLinesSymbol(expectedResponse, sw.toString());
}
@Test
@@ -82,7 +87,28 @@ public class ConsumerEndpointMappingResp
StreamResult result = new StreamResult(sw);
webServiceTemplate.sendSourceAndReceiveToResult(source, result);
assertNotNull(result);
- assertEquals(expectedResponse, sw.toString());
+ TestUtil.assertEqualsIgnoreNewLinesSymbol(expectedResponse, sw.toString());
+ }
+
+ @Test
+ public void testAction() throws Exception {
+ StreamSource source = new StreamSource(new StringReader(xmlRequestForGoogleStockQuoteNoNamespace));
+ StringWriter sw = new StringWriter();
+ StreamResult result = new StreamResult(sw);
+ webServiceTemplate.sendSourceAndReceiveToResult(source, new ActionCallback("http://www.webserviceX.NET/GetQuote"), result);
+ assertNotNull(result);
+ TestUtil.assertEqualsIgnoreNewLinesSymbol(expectedResponse, sw.toString());
+ }
+
+ @Test
+ public void testTo() throws Exception {
+ StreamSource source = new StreamSource(new StringReader(xmlRequestForGoogleStockQuoteNoNamespace));
+ StringWriter sw = new StringWriter();
+ StreamResult result = new StreamResult(sw);
+ webServiceTemplate.sendSourceAndReceiveToResult(source, new ActionCallback(new URI("http://action-does-not-matter-here"), new Addressing10(), new URI("http://url.to")),
+ result);
+ assertNotNull(result);
+ TestUtil.assertEqualsIgnoreNewLinesSymbol(expectedResponse, sw.toString());
}
@Override
Added: camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/addressing/AbstractConsumerTests.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/addressing/AbstractConsumerTests.java?rev=1417747&view=auto
==============================================================================
--- camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/addressing/AbstractConsumerTests.java (added)
+++ camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/addressing/AbstractConsumerTests.java Thu Dec 6 06:46:10 2012
@@ -0,0 +1,333 @@
+/**
+ * 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.camel.component.spring.ws.addressing;
+
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+
+import org.apache.camel.component.spring.ws.utils.OutputChannelReceiver;
+import org.apache.camel.component.spring.ws.utils.TestUtil;
+import org.apache.camel.test.junit4.CamelSpringTestSupport;
+import org.fest.assertions.Assertions;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.springframework.ws.client.core.WebServiceTemplate;
+import org.springframework.ws.soap.SoapMessage;
+import org.springframework.ws.soap.addressing.client.ActionCallback;
+import org.springframework.ws.soap.addressing.core.EndpointReference;
+import org.springframework.ws.soap.addressing.core.MessageAddressingProperties;
+import org.springframework.ws.soap.addressing.version.Addressing10;
+import org.springframework.ws.soap.client.SoapFaultClientException;
+
+/**
+ * Provides abstract test for fault and output params for spring-ws:to: and
+ * spring-ws:action: endpoints
+ *
+ * @author a.zachar
+ */
+public abstract class AbstractConsumerTests extends CamelSpringTestSupport {
+ private final String xmlBody = "<GetQuote xmlns=\"http://www.webserviceX.NET/\"><symbol>GOOG</symbol></GetQuote>";
+
+ private WebServiceTemplate webServiceTemplate;
+ private OutputChannelReceiver response;
+ private OutputChannelReceiver newReply;
+
+ private StreamSource source;
+ private StreamResult result;
+ private String requestInputAction;
+
+ @Before
+ public void setUp() throws Exception {
+ super.setUp();
+ // initialize beans for catching results
+ webServiceTemplate = applicationContext.getBean("webServiceTemplate", WebServiceTemplate.class);
+ newReply = getMandatoryBean(OutputChannelReceiver.class, "replyReceiver");
+ response = getMandatoryBean(OutputChannelReceiver.class, "responseReceiver");
+
+ // sample data
+ source = new StreamSource(new StringReader(xmlBody));
+ result = new StreamResult(new StringWriter());
+
+ // reset from previous test
+ response.clear();
+ newReply.clear();
+ requestInputAction = null;
+ }
+
+ @After
+ public void after() throws Exception {
+ assertNotNull(result);
+ }
+
+ /**
+ * Creates WS-Addressing Action and ReplyTo param for request
+ *
+ * @param action
+ * @param replyTo
+ * @return
+ * @throws URISyntaxException
+ */
+ protected final ActionCallback actionAndReplyTo(String action, String replyTo) throws URISyntaxException {
+ requestInputAction = action;
+ ActionCallback requestCallback = new ActionCallback(action);
+ if (replyTo != null) {
+ requestCallback.setReplyTo(new EndpointReference(new URI(replyTo)));
+ }
+ return requestCallback;
+ }
+
+ /**
+ * Creates WS-Addressing Action param for request
+ *
+ * @param action
+ * @param replyTo
+ * @return
+ * @throws URISyntaxException
+ */
+ protected final ActionCallback action(String action) throws URISyntaxException {
+ return actionAndReplyTo(action, null);
+ }
+
+ /**
+ * Creates WS-Addressing To and ReplyTo param for request
+ *
+ * @param action
+ * @param replyTo
+ * @return
+ * @throws URISyntaxException
+ */
+ protected final ActionCallback toAndReplyTo(String to, String replyTo) throws URISyntaxException {
+ requestInputAction = "http://doesn-not-matter.com";
+ ActionCallback requestCallback = new ActionCallback(new URI(requestInputAction), new Addressing10(), new URI(to));
+ if (replyTo != null) {
+ requestCallback.setReplyTo(new EndpointReference(new URI(replyTo)));
+ }
+ return requestCallback;
+ }
+
+ /**
+ * Creates WS-Addressing To param for request
+ *
+ * @param action
+ * @param replyTo
+ * @return
+ * @throws URISyntaxException
+ */
+ protected final ActionCallback to(String to) throws URISyntaxException {
+ return toAndReplyTo(to, null);
+ }
+
+ /**
+ * Construct a default action for the response message from the input
+ * message using the default response action suffix.
+ *
+ * @return
+ * @throws URISyntaxException
+ */
+ private URI getDefaultResponseAction() throws URISyntaxException {
+ return new URI(requestInputAction + "Response");
+ }
+
+ /**
+ * Only response is allow using a brand new channel
+ *
+ * @return
+ */
+
+ protected final MessageAddressingProperties newChannelParams() {
+ assertNotNull(newReply);
+ assertNotNull(newReply.getMessageContext());
+ SoapMessage request = (SoapMessage)newReply.getMessageContext().getRequest();
+ assertNotNull(request);
+
+ MessageAddressingProperties wsaProperties = TestUtil.getWSAProperties(request);
+ assertNotNull(wsaProperties);
+ assertNotNull(wsaProperties.getTo());
+ return wsaProperties;
+ }
+
+ /**
+ * Only response is allow using same channel
+ *
+ * @return
+ */
+ protected final MessageAddressingProperties sameChannelParams() {
+ // we expect the same channel reply
+ assertNull(newReply.getMessageContext());
+
+ assertNotNull(response);
+ assertNotNull(response.getMessageContext());
+
+ SoapMessage soapResponse = (SoapMessage)response.getMessageContext().getResponse();
+ assertNotNull(soapResponse);
+
+ MessageAddressingProperties wsaProperties = TestUtil.getWSAProperties(soapResponse);
+ assertNotNull(wsaProperties);
+ return wsaProperties;
+ }
+
+ /**
+ * Provides such an ActionCallback that sets the WS-Addressing param replyTo
+ * or doesn't set WS-Addressing param replyTo. In other words it cause
+ * response to be return using new or same channel as the request.
+ *
+ * @param action
+ * @return
+ * @throws URISyntaxException
+ */
+ abstract ActionCallback channelIn(String action) throws URISyntaxException;
+
+ /**
+ * Provide corresponding results based on channel input. These two abstract methods (channelIn and
+ * channelOut)are bind together tighly.
+ *
+ * @return
+ */
+ abstract MessageAddressingProperties channelOut();
+
+ @Test
+ public void defaultAction4ouput() throws Exception {
+ ActionCallback requestCallback = channelIn("http://default-ok.com/");
+
+ webServiceTemplate.sendSourceAndReceiveToResult(source, requestCallback, result);
+
+ Assertions.assertThat(channelOut().getAction()).isEqualTo(getDefaultResponseAction());
+ }
+
+ @Test
+ public void defaultAction4fault() throws Exception {
+ ActionCallback requestCallback = channelIn("http://default-fault.com/");
+ try {
+ webServiceTemplate.sendSourceAndReceiveToResult(source, requestCallback, result);
+ } catch (SoapFaultClientException e) {
+ // ok - cause fault response
+ }
+ Assertions.assertThat(channelOut().getAction()).isEqualTo(getDefaultResponseAction());
+ }
+
+ @Test
+ public void customAction4output() throws Exception {
+ ActionCallback requestCallback = channelIn("http://uri-ok.com");
+
+ webServiceTemplate.sendSourceAndReceiveToResult(source, requestCallback, result);
+
+ Assertions.assertThat(channelOut().getAction()).isEqualTo(new URI("http://customURIOutputAction"));
+ }
+
+ @Test
+ public void customAction4fault() throws Exception {
+ ActionCallback requestCallback = channelIn("http://uri-fault.com");
+ try {
+ webServiceTemplate.sendSourceAndReceiveToResult(source, requestCallback, result);
+ } catch (SoapFaultClientException e) {
+ // ok - cause fault response
+ }
+ Assertions.assertThat(channelOut().getAction()).isEqualTo(new URI("http://customURIFaultAction"));
+ }
+
+ @Test
+ @Ignore(value = "Not implemented yet")
+ public void overrideHeaderAction4output() throws Exception {
+ ActionCallback requestCallback = channelIn("http://override-ok.com");
+
+ webServiceTemplate.sendSourceAndReceiveToResult(source, requestCallback, result);
+
+ Assertions.assertThat(channelOut().getAction()).isEqualTo(new URI("http://outputHeader.com"));
+ }
+
+ @Test
+ @Ignore(value = "Not implemented yet")
+ public void overrideHeaderAction4fault() throws Exception {
+ ActionCallback requestCallback = channelIn("http://override-fault.com");
+ try {
+ webServiceTemplate.sendSourceAndReceiveToResult(source, requestCallback, result);
+ } catch (SoapFaultClientException e) {
+ // ok - cause fault response
+ }
+ Assertions.assertThat(channelOut().getAction()).isEqualTo(new URI("http://faultHeader.com"));
+ }
+
+ @Test
+ @Ignore(value = "Not implemented yet")
+ public void headerAction4output() throws Exception {
+ ActionCallback requestCallback = channelIn("http://headerOnly-ok.com");
+
+ webServiceTemplate.sendSourceAndReceiveToResult(source, requestCallback, result);
+
+ Assertions.assertThat(channelOut().getAction()).isEqualTo(new URI("http://outputHeader.com"));
+ }
+
+ @Test
+ @Ignore(value = "Not implemented yet")
+ public void headerAction4fault() throws Exception {
+ ActionCallback requestCallback = channelIn("http://headerOnly-fault.com");
+ try {
+ webServiceTemplate.sendSourceAndReceiveToResult(source, requestCallback, result);
+ } catch (SoapFaultClientException e) {
+ // ok - cause fault response
+ }
+ Assertions.assertThat(channelOut().getAction()).isEqualTo(new URI("http://faultHeader.com"));
+ }
+
+ @Test
+ public void onlyCustomOutputSpecified4output() throws Exception {
+ ActionCallback requestCallback = channelIn("http://uriOutputOnly-ok.com/");
+
+ webServiceTemplate.sendSourceAndReceiveToResult(source, requestCallback, result);
+
+ Assertions.assertThat(channelOut().getAction()).isEqualTo(new URI("http://customURIOutputAction"));
+ }
+
+ @Test
+ public void onlyCustomOutputSpecified4fault() throws Exception {
+ ActionCallback requestCallback = channelIn("http://uriOutputOnly-fault.com/");
+ try {
+ webServiceTemplate.sendSourceAndReceiveToResult(source, requestCallback, result);
+ } catch (SoapFaultClientException e) {
+ // ok - cause fault response
+ }
+ Assertions.assertThat(channelOut().getAction()).isEqualTo(getDefaultResponseAction());
+ }
+
+ @Test
+ public void onlyCustomFaultSpecified4output() throws Exception {
+ ActionCallback requestCallback = channelIn("http://uriFaultOnly-ok.com/");
+
+ webServiceTemplate.sendSourceAndReceiveToResult(source, requestCallback, result);
+
+ Assertions.assertThat(channelOut().getAction()).isEqualTo(getDefaultResponseAction());
+ }
+
+ @Test
+ public void onlyCustomFaultSpecified4fault() throws Exception {
+ ActionCallback requestCallback = channelIn("http://uriFaultOnly-fault.com/");
+ try {
+ webServiceTemplate.sendSourceAndReceiveToResult(source, requestCallback, result);
+ } catch (SoapFaultClientException e) {
+ // ok - cause fault response
+ }
+ Assertions.assertThat(channelOut().getAction()).isEqualTo(new URI("http://customURIFaultAction"));
+ }
+
+}
Added: camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/addressing/ConsumerWSAEndpointMappingRouteTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/addressing/ConsumerWSAEndpointMappingRouteTest.java?rev=1417747&view=auto
==============================================================================
--- camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/addressing/ConsumerWSAEndpointMappingRouteTest.java (added)
+++ camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/addressing/ConsumerWSAEndpointMappingRouteTest.java Thu Dec 6 06:46:10 2012
@@ -0,0 +1,184 @@
+/**
+ * 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.camel.component.spring.ws.addressing;
+
+import java.io.StringReader;
+import java.net.URI;
+
+import javax.xml.transform.stream.StreamSource;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.component.spring.ws.utils.TestUtil;
+import org.apache.camel.test.junit4.CamelSpringTestSupport;
+import org.junit.Before;
+import org.junit.Test;
+import org.springframework.context.support.AbstractXmlApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+import org.springframework.ws.client.WebServiceIOException;
+import org.springframework.ws.client.core.WebServiceTemplate;
+import org.springframework.ws.soap.addressing.client.ActionCallback;
+import org.springframework.ws.soap.addressing.version.Addressing10;
+import org.springframework.ws.soap.client.core.SoapActionCallback;
+
+public class ConsumerWSAEndpointMappingRouteTest extends CamelSpringTestSupport {
+
+ private final String xmlBody = "<GetQuote xmlns=\"http://www.stockquotes.edu/\"><symbol>GOOG</symbol></GetQuote>";
+
+ @EndpointInject(uri = "mock:testDefault")
+ private MockEndpoint resultEndpointActionDefault;
+
+ @EndpointInject(uri = "mock:testAction")
+ private MockEndpoint resultEndpointAction;
+
+ @EndpointInject(uri = "mock:testTo")
+ private MockEndpoint resultEndpointTo;
+
+ @EndpointInject(uri = "mock:testActionAndTo")
+ private MockEndpoint resultEndpointActionAndTo;
+
+ @EndpointInject(uri = "mock:testToAndAction")
+ private MockEndpoint resultEndpointToAndAction;
+
+ @EndpointInject(uri = "mock:testToMoreSpecific")
+ private MockEndpoint resultEndpointToMoreSpecific;
+
+ @EndpointInject(uri = "mock:testActionMoreSpecific")
+ private MockEndpoint resultEndpointActionMoreSpecific;
+
+ @EndpointInject(uri = "mock:testOutputAndFault")
+ private MockEndpoint resultOutputAndFault;
+
+ @EndpointInject(uri = "mock:testOutputAndFault2")
+ private MockEndpoint resultOutputAndFault2;
+
+ @EndpointInject(uri = "mock:testSoapAction")
+ private MockEndpoint resultSoapAction;
+
+ @EndpointInject(uri = "mock:testReplyTo")
+ private MockEndpoint resultReplyTo;
+
+ private WebServiceTemplate webServiceTemplate;
+
+ @Before
+ public void setUp() throws Exception {
+ super.setUp();
+ webServiceTemplate = applicationContext.getBean("webServiceTemplate", WebServiceTemplate.class);
+ }
+
+ @Test
+ public void testWSAddressingAction() throws Exception {
+ StreamSource source = new StreamSource(new StringReader(xmlBody));
+ webServiceTemplate.sendSourceAndReceive(source, new ActionCallback("http://www.stockquotes.edu/myUniqueAction"), TestUtil.NOOP_SOURCE_EXTRACTOR);
+ // here is localhost as to by default
+ resultEndpointAction.expectedMinimumMessageCount(1);
+ resultEndpointAction.assertIsSatisfied();
+ }
+
+ @Test
+ public void testWSAddressingTo() throws Exception {
+ StreamSource source = new StreamSource(new StringReader(xmlBody));
+ webServiceTemplate.sendSourceAndReceive(source, new ActionCallback(new URI("http://www.stockquotes.edu/does-not-matter"), new Addressing10(),
+ new URI("http://myUniqueToUrl")), TestUtil.NOOP_SOURCE_EXTRACTOR);
+
+ resultEndpointTo.expectedMinimumMessageCount(1);
+ resultEndpointTo.assertIsSatisfied();
+ }
+
+ @Test
+ public void testWSAddressingActionAndTo() throws Exception {
+ StreamSource source = new StreamSource(new StringReader(xmlBody));
+ webServiceTemplate.sendSourceAndReceive(source, new ActionCallback(new URI("http://actionAndTo"), new Addressing10(), new URI("http://url4.to")),
+ TestUtil.NOOP_SOURCE_EXTRACTOR);
+ resultEndpointActionAndTo.expectedMinimumMessageCount(1);
+ resultEndpointActionAndTo.assertIsSatisfied();
+ }
+
+ @Test
+ public void testWSAddressingToAndAction() throws Exception {
+ StreamSource source = new StreamSource(new StringReader(xmlBody));
+ webServiceTemplate.sendSourceAndReceive(source, new ActionCallback(new URI("http://toAndAction"), new Addressing10(), new URI("http://url3.to")),
+ TestUtil.NOOP_SOURCE_EXTRACTOR);
+
+ resultEndpointToAndAction.expectedMinimumMessageCount(1);
+ resultEndpointToAndAction.assertIsSatisfied();
+ }
+
+ @Test
+ public void testWSAddressingResolveToMoreSpecif() throws Exception {
+ StreamSource source = new StreamSource(new StringReader(xmlBody));
+ webServiceTemplate.sendSourceAndReceive(source, new ActionCallback(new URI("http://action1"), new Addressing10(), new URI("http://url1.to")),
+ TestUtil.NOOP_SOURCE_EXTRACTOR);
+
+ resultEndpointToMoreSpecific.expectedMinimumMessageCount(1);
+ resultEndpointToMoreSpecific.assertIsSatisfied();
+
+ resultEndpointActionMoreSpecific.expectedMinimumMessageCount(0);
+ resultEndpointActionMoreSpecific.assertIsSatisfied();
+ }
+
+ @Test
+ public void testWSAddressingResolveActionMoreSpecif() throws Exception {
+ StreamSource source = new StreamSource(new StringReader(xmlBody));
+ webServiceTemplate.sendSourceAndReceive(source, new ActionCallback(new URI("http://action2"), new Addressing10(), new URI("http://url2.to")),
+ TestUtil.NOOP_SOURCE_EXTRACTOR);
+
+ resultEndpointToMoreSpecific.expectedMinimumMessageCount(0);
+ resultEndpointToMoreSpecific.assertIsSatisfied();
+
+ resultEndpointActionMoreSpecific.expectedMinimumMessageCount(1);
+ resultEndpointActionMoreSpecific.assertIsSatisfied();
+ }
+
+ @Test
+ public void testWSAddressingActionResponseActions() throws Exception {
+ StreamSource source = new StreamSource(new StringReader(xmlBody));
+ webServiceTemplate.sendSourceAndReceive(source, new ActionCallback("http://www.stockquotes.edu/WSAddresingActionReply"), TestUtil.NOOP_SOURCE_EXTRACTOR);
+ resultOutputAndFault.expectedMinimumMessageCount(1);
+ resultOutputAndFault.assertIsSatisfied();
+ }
+
+ @Test
+ public void testWSAddressingToResponseActions() throws Exception {
+ StreamSource source = new StreamSource(new StringReader(xmlBody));
+ webServiceTemplate.sendSourceAndReceive(source, new ActionCallback(new URI("http://doesn-not-matter.com"), new Addressing10(), new URI("http://urlOutputAndFault2.to")),
+ TestUtil.NOOP_SOURCE_EXTRACTOR);
+ resultOutputAndFault2.expectedMinimumMessageCount(1);
+ resultOutputAndFault2.assertIsSatisfied();
+ }
+
+ @Test(expected = WebServiceIOException.class)
+ public void testWrongWSAddressingAction() throws Exception {
+ StreamSource source = new StreamSource(new StringReader(xmlBody));
+ webServiceTemplate.sendSourceAndReceive(source, new ActionCallback("http://this-is-a-wrong-ws-addressing-action"), TestUtil.NOOP_SOURCE_EXTRACTOR);
+ resultEndpointAction.assertIsSatisfied();
+ }
+
+ @Test
+ public void testClassicalSoapHttpHeaderInterference() throws Exception {
+ StreamSource source = new StreamSource(new StringReader(xmlBody));
+ webServiceTemplate.sendSourceAndReceive(source, new SoapActionCallback("http://www.stockquotes.edu/soapHttpHeaderAction"), TestUtil.NOOP_SOURCE_EXTRACTOR);
+
+ resultSoapAction.expectedMinimumMessageCount(1);
+ resultSoapAction.assertIsSatisfied();
+ }
+
+ @Override
+ protected AbstractXmlApplicationContext createApplicationContext() {
+ return new ClassPathXmlApplicationContext(new String[] {"org/apache/camel/component/spring/ws/addresing/ConsumerWSAEndpointMappingRouteTest-context.xml"});
+ }
+}
Added: camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/addressing/ConsumerWSANewChannelParamsActionTests.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/addressing/ConsumerWSANewChannelParamsActionTests.java?rev=1417747&view=auto
==============================================================================
--- camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/addressing/ConsumerWSANewChannelParamsActionTests.java (added)
+++ camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/addressing/ConsumerWSANewChannelParamsActionTests.java Thu Dec 6 06:46:10 2012
@@ -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.camel.component.spring.ws.addressing;
+
+import java.net.URISyntaxException;
+
+import org.springframework.context.support.AbstractXmlApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+import org.springframework.ws.soap.addressing.client.ActionCallback;
+import org.springframework.ws.soap.addressing.core.MessageAddressingProperties;
+
+public class ConsumerWSANewChannelParamsActionTests extends AbstractConsumerTests {
+
+ public ActionCallback channelIn(String actionUri) throws URISyntaxException {
+ // new channel
+ return actionAndReplyTo(actionUri, "mailto:reply-to-trigger@new-channel.com");
+ }
+
+ @Override
+ public MessageAddressingProperties channelOut() {
+ return newChannelParams();
+ }
+
+ @Override
+ protected AbstractXmlApplicationContext createApplicationContext() {
+ return new ClassPathXmlApplicationContext(new String[] {"org/apache/camel/component/spring/ws/addresing/ConsumerWSAParamsActionTests-context.xml"});
+ }
+
+}
Added: camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/addressing/ConsumerWSANewChannelParamsToTests.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/addressing/ConsumerWSANewChannelParamsToTests.java?rev=1417747&view=auto
==============================================================================
--- camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/addressing/ConsumerWSANewChannelParamsToTests.java (added)
+++ camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/addressing/ConsumerWSANewChannelParamsToTests.java Thu Dec 6 06:46:10 2012
@@ -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.camel.component.spring.ws.addressing;
+
+import java.net.URISyntaxException;
+
+import org.springframework.context.support.AbstractXmlApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+import org.springframework.ws.soap.addressing.client.ActionCallback;
+import org.springframework.ws.soap.addressing.core.MessageAddressingProperties;
+
+public class ConsumerWSANewChannelParamsToTests extends AbstractConsumerTests {
+
+ public ActionCallback channelIn(String actionUri) throws URISyntaxException {
+ // new channel
+ return toAndReplyTo(actionUri, "mailto:reply-to-trigger@new-channel.com");
+ }
+
+ @Override
+ public MessageAddressingProperties channelOut() {
+ return newChannelParams();
+ }
+
+ @Override
+ protected AbstractXmlApplicationContext createApplicationContext() {
+ return new ClassPathXmlApplicationContext(new String[] {"org/apache/camel/component/spring/ws/addresing/ConsumerWSAParamsTOTests-context.xml"});
+ }
+
+}
Added: camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/addressing/ConsumerWSASameChannelParamsActionTests.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/addressing/ConsumerWSASameChannelParamsActionTests.java?rev=1417747&view=auto
==============================================================================
--- camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/addressing/ConsumerWSASameChannelParamsActionTests.java (added)
+++ camel/trunk/components/camel-spring-ws/src/test/java/org/apache/camel/component/spring/ws/addressing/ConsumerWSASameChannelParamsActionTests.java Thu Dec 6 06:46:10 2012
@@ -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.camel.component.spring.ws.addressing;
+
+import java.net.URISyntaxException;
+
+import org.springframework.context.support.AbstractXmlApplicationContext;
+import org.springframework.context.support.ClassPathXmlApplicationContext;
+import org.springframework.ws.soap.addressing.client.ActionCallback;
+import org.springframework.ws.soap.addressing.core.MessageAddressingProperties;
+
+public class ConsumerWSASameChannelParamsActionTests extends AbstractConsumerTests {
+
+ public ActionCallback channelIn(String actionUri) throws URISyntaxException {
+ // same channel
+ return action(actionUri);
+ }
+
+ @Override
+ MessageAddressingProperties channelOut() {
+ return sameChannelParams();
+ }
+
+ @Override
+ protected AbstractXmlApplicationContext createApplicationContext() {
+ return new ClassPathXmlApplicationContext(new String[] {"org/apache/camel/component/spring/ws/addresing/ConsumerWSAParamsActionTests-context.xml"});
+ }
+
+}