From 761c354177a1379a042a5d35c7186749fea18fd7 Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Thu, 6 Oct 2011 10:31:04 +0000 Subject: [PATCH] SWS-725 - Add a constructor/setter to WebServiceTemplate which takes a Marshaller and assigns it as both Marshaller and Unmarshaller --- .../ws/client/core/WebServiceTemplate.java | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/core/src/main/java/org/springframework/ws/client/core/WebServiceTemplate.java b/core/src/main/java/org/springframework/ws/client/core/WebServiceTemplate.java index bf02c631..a95ff4dd 100644 --- a/core/src/main/java/org/springframework/ws/client/core/WebServiceTemplate.java +++ b/core/src/main/java/org/springframework/ws/client/core/WebServiceTemplate.java @@ -140,6 +140,46 @@ public class WebServiceTemplate extends WebServiceAccessor implements WebService initDefaultStrategies(); } + /** + * Creates a new WebServiceTemplate with the given marshaller. If the given {@link + * Marshaller} also implements the {@link Unmarshaller} interface, it is used for both marshalling and + * unmarshalling. Otherwise, an exception is thrown. + *

+ * Note that all {@link Marshaller} implementations in Spring also implement the {@link Unmarshaller} interface, + * so that you can safely use this constructor. + * + * @param marshaller object used as marshaller and unmarshaller + * @throws IllegalArgumentException when marshaller does not implement the {@link Unmarshaller} + * interface + * @since 2.0.3 + */ + public WebServiceTemplate(Marshaller marshaller) { + Assert.notNull(marshaller, "marshaller must not be null"); + if (!(marshaller instanceof Unmarshaller)) { + throw new IllegalArgumentException("Marshaller [" + marshaller + "] does not implement the Unmarshaller " + + "interface. Please set an Unmarshaller explicitly by using the " + + "WebServiceTemplate(Marshaller, Unmarshaller) constructor."); + } + else { + this.setMarshaller(marshaller); + this.setUnmarshaller((Unmarshaller) marshaller); + } + } + + /** + * Creates a new MarshallingMethodEndpointAdapter with the given marshaller and unmarshaller. + * + * @param marshaller the marshaller to use + * @param unmarshaller the unmarshaller to use + * @since 2.0.3 + */ + public WebServiceTemplate(Marshaller marshaller, Unmarshaller unmarshaller) { + Assert.notNull(marshaller, "marshaller must not be null"); + Assert.notNull(unmarshaller, "unmarshaller must not be null"); + this.setMarshaller(marshaller); + this.setUnmarshaller(unmarshaller); + } + /** Returns the default URI to be used on operations that do not have a URI parameter. */ public String getDefaultUri() { if (destinationProvider != null) {