1 /*
2 * Copyright 2007 the original author or authors.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 package org.springframework.ws.client.core.support;
18
19 import org.apache.commons.logging.Log;
20 import org.apache.commons.logging.LogFactory;
21
22 import org.springframework.beans.factory.InitializingBean;
23 import org.springframework.oxm.Marshaller;
24 import org.springframework.oxm.Unmarshaller;
25 import org.springframework.util.Assert;
26 import org.springframework.ws.WebServiceMessageFactory;
27 import org.springframework.ws.client.core.WebServiceTemplate;
28 import org.springframework.ws.client.support.destination.DestinationProvider;
29 import org.springframework.ws.client.support.interceptor.ClientInterceptor;
30 import org.springframework.ws.transport.WebServiceMessageSender;
31
32 /**
33 * Convenient super class for application classes that need Web service access.
34 * <p/>
35 * Requires a {@link WebServiceMessageFactory} or a {@link WebServiceTemplate} instance to be set. It will create its
36 * own <code>WebServiceTemplate</code> if <code>WebServiceMessageFactory</code> is passed in.
37 * <p/>
38 * In addition to the message factory property, this gateway offers {@link Marshaller} and {@link Unmarshaller}
39 * properties. Setting these is required when the {@link WebServiceTemplate#marshalSendAndReceive(Object) marshalling
40 * methods} of the template are to be used.
41 * <p/>
42 * Note that when {@link #setWebServiceTemplate(WebServiceTemplate) injecting a <code>WebServiceTemplate</code>}
43 * directly, the convenience setters ({@link #setMarshaller(Marshaller)}, {@link #setUnmarshaller(Unmarshaller)}, {@link
44 * #setMessageSender(WebServiceMessageSender)}, {@link #setMessageSenders(WebServiceMessageSender[])}, and {@link
45 * #setDefaultUri(String)}) should not be used on this class, but on the template directly.
46 *
47 * @author Arjen Poutsma
48 * @see #setMessageFactory(WebServiceMessageFactory)
49 * @see WebServiceTemplate
50 * @see #setMarshaller(Marshaller)
51 * @since 1.0.0
52 */
53 public abstract class WebServiceGatewaySupport implements InitializingBean {
54
55 /** Logger available to subclasses. */
56 protected final Log logger = LogFactory.getLog(getClass());
57
58 private WebServiceTemplate webServiceTemplate;
59
60 /**
61 * Creates a new instance of the <code>WebServiceGatewaySupport</code> class, with a default
62 * <code>WebServiceTemplate</code>.
63 */
64 protected WebServiceGatewaySupport() {
65 webServiceTemplate = new WebServiceTemplate();
66 }
67
68 /**
69 * Creates a new <code>WebServiceGatewaySupport</code> instance based on the given message factory.
70 *
71 * @param messageFactory the message factory to use
72 */
73 protected WebServiceGatewaySupport(WebServiceMessageFactory messageFactory) {
74 webServiceTemplate = new WebServiceTemplate(messageFactory);
75 }
76
77 /** Returns the <code>WebServiceMessageFactory</code> used by the gateway. */
78 public final WebServiceMessageFactory getMessageFactory() {
79 return webServiceTemplate.getMessageFactory();
80 }
81
82 /** Set the <code>WebServiceMessageFactory</code> to be used by the gateway. */
83 public final void setMessageFactory(WebServiceMessageFactory messageFactory) {
84 webServiceTemplate.setMessageFactory(messageFactory);
85 }
86
87 /** Returns the default URI used by the gateway. */
88 public final String getDefaultUri() {
89 return webServiceTemplate.getDefaultUri();
90 }
91
92 /** Sets the default URI used by the gateway. */
93 public final void setDefaultUri(String uri) {
94 webServiceTemplate.setDefaultUri(uri);
95 }
96
97 /** Returns the destination provider used by the gateway. */
98 public final DestinationProvider getDestinationProvider() {
99 return webServiceTemplate.getDestinationProvider();
100 }
101
102 /** Set the destination provider URI used by the gateway. */
103 public final void setDestinationProvider(DestinationProvider destinationProvider) {
104 webServiceTemplate.setDestinationProvider(destinationProvider);
105 }
106
107 /** Sets a single <code>WebServiceMessageSender</code> to be used by the gateway. */
108 public final void setMessageSender(WebServiceMessageSender messageSender) {
109 webServiceTemplate.setMessageSender(messageSender);
110 }
111
112 /** Returns the <code>WebServiceMessageSender</code>s used by the gateway. */
113 public final WebServiceMessageSender[] getMessageSenders() {
114 return webServiceTemplate.getMessageSenders();
115 }
116
117 /** Sets multiple <code>WebServiceMessageSender</code> to be used by the gateway. */
118 public final void setMessageSenders(WebServiceMessageSender[] messageSenders) {
119 webServiceTemplate.setMessageSenders(messageSenders);
120 }
121
122 /** Returns the <code>WebServiceTemplate</code> for the gateway. */
123 public final WebServiceTemplate getWebServiceTemplate() {
124 return webServiceTemplate;
125 }
126
127 /**
128 * Sets the <code>WebServiceTemplate</code> to be used by the gateway.
129 * <p/>
130 * When using this property, the convenience setters ({@link #setMarshaller(Marshaller)}, {@link
131 * #setUnmarshaller(Unmarshaller)}, {@link #setMessageSender(WebServiceMessageSender)}, {@link
132 * #setMessageSenders(WebServiceMessageSender[])}, and {@link #setDefaultUri(String)}) should not be set on this
133 * class, but on the template directly.
134 */
135 public final void setWebServiceTemplate(WebServiceTemplate webServiceTemplate) {
136 Assert.notNull(webServiceTemplate, "'webServiceTemplate' must not be null");
137 this.webServiceTemplate = webServiceTemplate;
138 }
139
140 /** Returns the <code>Marshaller</code> used by the gateway. */
141 public final Marshaller getMarshaller() {
142 return webServiceTemplate.getMarshaller();
143 }
144
145 /**
146 * Sets the <code>Marshaller</code> used by the gateway. Setting this property is only required if the marshalling
147 * functionality of <code>WebServiceTemplate</code> is to be used.
148 *
149 * @see WebServiceTemplate#marshalSendAndReceive
150 */
151 public final void setMarshaller(Marshaller marshaller) {
152 webServiceTemplate.setMarshaller(marshaller);
153 }
154
155 /** Returns the <code>Unmarshaller</code> used by the gateway. */
156 public final Unmarshaller getUnmarshaller() {
157 return webServiceTemplate.getUnmarshaller();
158 }
159
160 /**
161 * Sets the <code>Unmarshaller</code> used by the gateway. Setting this property is only required if the marshalling
162 * functionality of <code>WebServiceTemplate</code> is to be used.
163 *
164 * @see WebServiceTemplate#marshalSendAndReceive
165 */
166 public final void setUnmarshaller(Unmarshaller unmarshaller) {
167 webServiceTemplate.setUnmarshaller(unmarshaller);
168 }
169
170 /** Returns the <code>ClientInterceptors</code> used by the template. */
171 public final ClientInterceptor[] getInterceptors() {
172 return webServiceTemplate.getInterceptors();
173 }
174
175 /** Sets the <code>ClientInterceptors</code> used by the gateway. */
176 public final void setInterceptors(ClientInterceptor[] interceptors) {
177 webServiceTemplate.setInterceptors(interceptors);
178 }
179
180 public final void afterPropertiesSet() throws Exception {
181 webServiceTemplate.afterPropertiesSet();
182 initGateway();
183 }
184
185 /**
186 * Subclasses can override this for custom initialization behavior. Gets called after population of this instance's
187 * bean properties.
188 *
189 * @throws java.lang.Exception if initialization fails
190 */
191 protected void initGateway() throws Exception {
192 }
193
194 }