Skip to content

Commit

Permalink
CAMEL-8935: camel-spring-ws - Expose more options
Browse files Browse the repository at this point in the history
  • Loading branch information
davsclaus committed Jul 6, 2015
1 parent d99acf5 commit 57395f8
Show file tree
Hide file tree
Showing 4 changed files with 51 additions and 40 deletions.
Expand Up @@ -27,6 +27,7 @@
import org.apache.camel.component.spring.ws.bean.CamelEndpointDispatcher; import org.apache.camel.component.spring.ws.bean.CamelEndpointDispatcher;
import org.apache.camel.component.spring.ws.bean.CamelSpringWSEndpointMapping; 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.MessageFilter;
import org.apache.camel.component.spring.ws.filter.impl.BasicMessageFilter;
import org.apache.camel.component.spring.ws.type.EndpointMappingKey; import org.apache.camel.component.spring.ws.type.EndpointMappingKey;
import org.apache.camel.component.spring.ws.type.EndpointMappingType; import org.apache.camel.component.spring.ws.type.EndpointMappingType;
import org.apache.camel.converter.jaxp.XmlConverter; import org.apache.camel.converter.jaxp.XmlConverter;
Expand All @@ -36,9 +37,7 @@
import org.apache.camel.util.UnsafeUriCharactersEncoder; import org.apache.camel.util.UnsafeUriCharactersEncoder;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.ws.WebServiceMessageFactory;
import org.springframework.ws.client.core.WebServiceTemplate; import org.springframework.ws.client.core.WebServiceTemplate;
import org.springframework.ws.transport.WebServiceMessageSender;
import org.springframework.xml.xpath.XPathExpression; import org.springframework.xml.xpath.XPathExpression;
import org.springframework.xml.xpath.XPathExpressionFactory; import org.springframework.xml.xpath.XPathExpressionFactory;


Expand Down Expand Up @@ -66,10 +65,10 @@ protected String preProcessUri(String uri) {
protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception { protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
SpringWebserviceConfiguration configuration = new SpringWebserviceConfiguration(); SpringWebserviceConfiguration configuration = new SpringWebserviceConfiguration();
addConsumerConfiguration(remaining, parameters, configuration); addConsumerConfiguration(remaining, parameters, configuration);
addProducerConfiguration(remaining, parameters, configuration);
addXmlConverterToConfiguration(parameters, configuration); addXmlConverterToConfiguration(parameters, configuration);
configureMessageFilter(parameters, configuration);
setProperties(configuration, parameters); setProperties(configuration, parameters);
configureProducerConfiguration(remaining, configuration);
configureMessageFilter(configuration);
return new SpringWebserviceEndpoint(this, uri, configuration); return new SpringWebserviceEndpoint(this, uri, configuration);
} }


Expand All @@ -93,33 +92,31 @@ private void addConsumerConfiguration(String remaining, Map<String, Object> para
} }
} }


private void addProducerConfiguration(String remaining, Map<String, Object> parameters, SpringWebserviceConfiguration configuration) throws URISyntaxException { private void configureProducerConfiguration(String remaining, SpringWebserviceConfiguration configuration) throws URISyntaxException {
if (configuration.getEndpointMapping() == null && configuration.getEndpointDispatcher() == null) { if (configuration.getEndpointMapping() == null && configuration.getEndpointDispatcher() == null) {
LOG.debug("Building Spring Web Services producer"); LOG.debug("Building Spring Web Services producer");
URI webServiceEndpointUri = new URI(UnsafeUriCharactersEncoder.encode(remaining)); URI webServiceEndpointUri = new URI(UnsafeUriCharactersEncoder.encode(remaining));


// Obtain a WebServiceTemplate from the registry when specified by // Obtain a WebServiceTemplate from the registry when specified by
// an option on the component, else create a new template with // an option on the component, else create a new template with
// Spring-WS defaults // Spring-WS defaults
WebServiceTemplate webServiceTemplate = resolveAndRemoveReferenceParameter(parameters, WebServiceTemplate webServiceTemplate = configuration.getWebServiceTemplate();
"webServiceTemplate", WebServiceTemplate.class, new WebServiceTemplate()); if (webServiceTemplate == null) {
WebServiceMessageSender messageSender = resolveAndRemoveReferenceParameter(parameters, webServiceTemplate = new WebServiceTemplate();
"messageSender", WebServiceMessageSender.class, null); configuration.setWebServiceTemplate(webServiceTemplate);
WebServiceMessageFactory messageFactory = resolveAndRemoveReferenceParameter(parameters, }
"messageFactory", WebServiceMessageFactory.class, null);


if (webServiceTemplate.getDefaultUri() == null) { if (webServiceTemplate.getDefaultUri() == null) {
String uri = webServiceEndpointUri.toString(); String uri = webServiceEndpointUri.toString();
webServiceTemplate.setDefaultUri(uri); webServiceTemplate.setDefaultUri(uri);
configuration.setWebServiceEndpointUri(uri); configuration.setWebServiceEndpointUri(uri);
} }
if (messageSender != null) { if (configuration.getMessageSender() != null) {
webServiceTemplate.setMessageSender(messageSender); webServiceTemplate.setMessageSender(configuration.getMessageSender());
} }
if (messageFactory != null) { if (configuration.getMessageFactory() != null) {
webServiceTemplate.setMessageFactory(messageFactory); webServiceTemplate.setMessageFactory(configuration.getMessageFactory());
} }
configuration.setWebServiceTemplate(webServiceTemplate);
} }
} }


Expand Down Expand Up @@ -168,18 +165,18 @@ private void addXmlConverterToConfiguration(Map<String, Object> parameters, Spri
* The bean search mechanism looks for a bean with the name messageFilter. * The bean search mechanism looks for a bean with the name messageFilter.
* The endpoint's URI search mechanism looks for the URI's key parameter name messageFilter, for instance like this: * The endpoint's URI search mechanism looks for the URI's key parameter name messageFilter, for instance like this:
* spring-ws:http://yourdomain.com?messageFilter=<beanName> * spring-ws:http://yourdomain.com?messageFilter=<beanName>
*
* @param parameters
* @param configuration
*/ */
private void configureMessageFilter(Map<String, Object> parameters, SpringWebserviceConfiguration configuration) { private void configureMessageFilter(SpringWebserviceConfiguration configuration) {

if (configuration.getMessageFilter() == null) {
final MessageFilter globalMessageFilter = EndpointHelper.resolveReferenceParameter( // try to lookup a global filter to use
getCamelContext(), "messageFilter", MessageFilter.class, false /*not mandatory*/); final MessageFilter globalMessageFilter = EndpointHelper.resolveReferenceParameter(getCamelContext(), "messageFilter", MessageFilter.class, false);
final MessageFilter messageFilter = resolveAndRemoveReferenceParameter( if (globalMessageFilter != null) {
parameters, "messageFilter", MessageFilter.class, globalMessageFilter); configuration.setMessageFilter(globalMessageFilter);

} else {
configuration.setMessageFilter(messageFilter); // use basic as fallback
configuration.setMessageFilter(new BasicMessageFilter());
}
}
} }


} }
Expand Up @@ -30,6 +30,7 @@
import org.apache.camel.spi.UriPath; import org.apache.camel.spi.UriPath;
import org.apache.camel.util.jsse.SSLContextParameters; import org.apache.camel.util.jsse.SSLContextParameters;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.ws.WebServiceMessageFactory;
import org.springframework.ws.client.core.WebServiceTemplate; import org.springframework.ws.client.core.WebServiceTemplate;
import org.springframework.ws.soap.addressing.messageid.MessageIdStrategy; import org.springframework.ws.soap.addressing.messageid.MessageIdStrategy;
import org.springframework.ws.soap.addressing.server.annotation.Action; import org.springframework.ws.soap.addressing.server.annotation.Action;
Expand All @@ -39,17 +40,22 @@
public class SpringWebserviceConfiguration { public class SpringWebserviceConfiguration {


private XmlConverter xmlConverter; private XmlConverter xmlConverter;
private MessageFilter messageFilter;


@UriParam(label = "consumer")
private EndpointMappingKey endpointMappingKey;
@UriPath(label = "producer") @UriPath(label = "producer")
private String webServiceEndpointUri; private String webServiceEndpointUri;


/* Common configuration */
@UriParam
private MessageFilter messageFilter;

/* Producer configuration */ /* Producer configuration */
@UriParam(label = "producer") @UriParam(label = "producer")
private WebServiceTemplate webServiceTemplate; private WebServiceTemplate webServiceTemplate;
@UriParam(label = "producer") @UriParam(label = "producer")
private WebServiceMessageSender messageSender;
@UriParam(label = "producer")
private WebServiceMessageFactory messageFactory;
@UriParam(label = "producer")
private String soapAction; private String soapAction;
@UriParam(label = "producer") @UriParam(label = "producer")
private URI wsAddressingAction; private URI wsAddressingAction;
Expand All @@ -62,14 +68,14 @@ public class SpringWebserviceConfiguration {
@UriParam(label = "producer") @UriParam(label = "producer")
private URI replyTo; private URI replyTo;
@UriParam(label = "producer") @UriParam(label = "producer")
private WebServiceMessageSender messageSender;
@UriParam(label = "producer")
private MessageIdStrategy messageIdStrategy; private MessageIdStrategy messageIdStrategy;
@UriParam(label = "producer") @UriParam(label = "producer")
private int timeout = -1; private int timeout = -1;


/* Consumer configuration */ /* Consumer configuration */
@UriParam(label = "consumer") @UriParam(label = "consumer")
private EndpointMappingKey endpointMappingKey;
@UriParam(label = "consumer")
private CamelSpringWSEndpointMapping endpointMapping; private CamelSpringWSEndpointMapping endpointMapping;
@UriParam(label = "consumer") @UriParam(label = "consumer")
private CamelEndpointDispatcher endpointDispatcher; private CamelEndpointDispatcher endpointDispatcher;
Expand All @@ -91,6 +97,17 @@ public void setWebServiceTemplate(WebServiceTemplate webServiceTemplate) {
this.webServiceTemplate = webServiceTemplate; this.webServiceTemplate = webServiceTemplate;
} }


public WebServiceMessageFactory getMessageFactory() {
return messageFactory;
}

/**
* Option to provide a custom WebServiceMessageFactory. For example when you want Apache Axiom to handle web service messages instead of SAAJ.
*/
public void setMessageFactory(WebServiceMessageFactory messageFactory) {
this.messageFactory = messageFactory;
}

public String getWebServiceEndpointUri() { public String getWebServiceEndpointUri() {
return webServiceEndpointUri; return webServiceEndpointUri;
} }
Expand Down Expand Up @@ -242,10 +259,7 @@ public void setMessageFilter(MessageFilter messageFilter) {
} }


public MessageFilter getMessageFilter() { public MessageFilter getMessageFilter() {
if (this.messageFilter == null) { return messageFilter;
this.messageFilter = new BasicMessageFilter();
}
return this.messageFilter;
} }


public URI getOutputAction() { public URI getOutputAction() {
Expand Down
Expand Up @@ -42,12 +42,12 @@
<route> <route>
<from uri="direct:sendWithLocalFilter" /> <from uri="direct:sendWithLocalFilter" />
<to <to
uri="spring-ws:http://localhost/testSender?endpointMapping=#endpointMapping&amp;messageFilter=local&amp;webServiceTemplate=#webServiceTemplate" /> uri="spring-ws:http://localhost/testSender?endpointMapping=#endpointMapping&amp;messageFilter=#local&amp;webServiceTemplate=#webServiceTemplate" />
</route> </route>
<route> <route>
<from uri="direct:sendWithoutFilter" /> <from uri="direct:sendWithoutFilter" />
<to <to
uri="spring-ws:http://localhost/testSender?endpointMapping=#endpointMapping&amp;messageFilter=empty&amp;webServiceTemplate=#webServiceTemplate" /> uri="spring-ws:http://localhost/testSender?endpointMapping=#endpointMapping&amp;messageFilter=#empty&amp;webServiceTemplate=#webServiceTemplate" />
</route> </route>
<route> <route>
<from uri="direct:sendDefault" /> <from uri="direct:sendDefault" />
Expand Down
Expand Up @@ -42,12 +42,12 @@
<route> <route>
<from uri="direct:sendWithLocalFilter" /> <from uri="direct:sendWithLocalFilter" />
<to <to
uri="spring-ws:http://localhost/testSender?endpointMapping=#endpointMapping&amp;messageFilter=local&amp;webServiceTemplate=#webServiceTemplate" /> uri="spring-ws:http://localhost/testSender?endpointMapping=#endpointMapping&amp;messageFilter=#local&amp;webServiceTemplate=#webServiceTemplate" />
</route> </route>
<route> <route>
<from uri="direct:sendWithoutFilter" /> <from uri="direct:sendWithoutFilter" />
<to <to
uri="spring-ws:http://localhost/testSender?endpointMapping=#endpointMapping&amp;messageFilter=empty&amp;webServiceTemplate=#webServiceTemplate" /> uri="spring-ws:http://localhost/testSender?endpointMapping=#endpointMapping&amp;messageFilter=#empty&amp;webServiceTemplate=#webServiceTemplate" />
</route> </route>
</camelContext> </camelContext>


Expand Down

0 comments on commit 57395f8

Please sign in to comment.