Fixed SWS-119: Remove IOExceptions from WebServiceTemplate
This commit is contained in:
@@ -19,9 +19,11 @@ package org.springframework.ws.client;
|
||||
import org.springframework.ws.WebServiceException;
|
||||
|
||||
/**
|
||||
* Exception thrown whenever an error occurs on the client-side.
|
||||
*
|
||||
* @author Arjen Poutsma
|
||||
*/
|
||||
public class WebServiceClientException extends WebServiceException {
|
||||
public abstract class WebServiceClientException extends WebServiceException {
|
||||
|
||||
public WebServiceClientException(String msg) {
|
||||
super(msg);
|
||||
|
||||
@@ -14,9 +14,7 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.ws.client.core;
|
||||
|
||||
import org.springframework.ws.client.WebServiceClientException;
|
||||
package org.springframework.ws.client;
|
||||
|
||||
/**
|
||||
* Thrown by <code>SimpleFaultResolver</code> when the response message has a fault.
|
||||
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Copyright 2007 the original author or authors.
|
||||
*
|
||||
* Licensed 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.springframework.ws.client;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Exception thrown whenever an I/O error occurs on the client-side.
|
||||
*
|
||||
* @author Arjen Poutsma
|
||||
*/
|
||||
public class WebServiceIOException extends WebServiceClientException {
|
||||
|
||||
public WebServiceIOException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
|
||||
public WebServiceIOException(String msg, IOException ex) {
|
||||
super(msg, ex);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Copyright 2007 the original author or authors.
|
||||
*
|
||||
* Licensed 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.springframework.ws.client;
|
||||
|
||||
import javax.xml.transform.TransformerException;
|
||||
|
||||
/**
|
||||
* Exception thrown whenever an transformation error occurs on the client-side.
|
||||
*
|
||||
* @author Arjen Poutsma
|
||||
*/
|
||||
public class WebServiceTransformerException extends WebServiceClientException {
|
||||
|
||||
public WebServiceTransformerException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
|
||||
public WebServiceTransformerException(String msg, TransformerException ex) {
|
||||
super(msg, ex);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Copyright 2007 the original author or authors.
|
||||
*
|
||||
* Licensed 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.springframework.ws.client;
|
||||
|
||||
import org.springframework.ws.transport.TransportException;
|
||||
|
||||
/**
|
||||
* Exception thrown whenever an transport error occurs on the client-side.
|
||||
*
|
||||
* @author Arjen Poutsma
|
||||
*/
|
||||
public class WebServiceTransportException extends WebServiceIOException {
|
||||
|
||||
public WebServiceTransportException(String msg) {
|
||||
super(msg);
|
||||
}
|
||||
|
||||
public WebServiceTransportException(String msg, TransportException ex) {
|
||||
super(msg, ex);
|
||||
}
|
||||
}
|
||||
@@ -17,18 +17,18 @@
|
||||
package org.springframework.ws.client.core;
|
||||
|
||||
import org.springframework.ws.WebServiceMessage;
|
||||
import org.springframework.ws.client.WebServiceFaultException;
|
||||
|
||||
/**
|
||||
* Simple fault resolver that simply throws a {@link WebServiceFaultException} when a fault occurs.
|
||||
* Simple fault resolver that simply throws a {@link org.springframework.ws.client.WebServiceFaultException} when a
|
||||
* fault occurs.
|
||||
*
|
||||
* @author Arjen Poutsma
|
||||
* @see WebServiceFaultException
|
||||
* @see org.springframework.ws.client.WebServiceFaultException
|
||||
*/
|
||||
public class SimpleFaultResolver implements FaultResolver {
|
||||
|
||||
/**
|
||||
* Throws a new <code>WebServiceFaultException</code>.
|
||||
*/
|
||||
/** Throws a new <code>WebServiceFaultException</code>. */
|
||||
public void resolveFault(WebServiceMessage message) {
|
||||
throw new WebServiceFaultException(message.getFaultReason());
|
||||
}
|
||||
|
||||
@@ -16,10 +16,12 @@
|
||||
|
||||
package org.springframework.ws.client.core;
|
||||
|
||||
import java.io.IOException;
|
||||
import javax.xml.transform.Result;
|
||||
import javax.xml.transform.Source;
|
||||
|
||||
import org.springframework.oxm.GenericMarshallingFailureException;
|
||||
import org.springframework.ws.client.WebServiceClientException;
|
||||
|
||||
/**
|
||||
* Specifies a basic set of Web service operations. Implemented by {@link WebServiceTemplate}. Not often used directly,
|
||||
* but a useful option to enhance testability, as it can easily be mocked or stubbed.
|
||||
@@ -35,11 +37,14 @@ public interface WebServiceOperations {
|
||||
*
|
||||
* @param requestPayload the object to marshal into the request message payload
|
||||
* @return the unmarshalled payload of the response message, or <code>null</code> if no response is given
|
||||
* @throws IOException in case of I/O errors
|
||||
* @throws GenericMarshallingFailureException
|
||||
* if there is a problem marshalling or unmarshalling
|
||||
* @throws WebServiceClientException if there is a problem sending or receiving the message
|
||||
* @see WebServiceTemplate#setMarshaller(org.springframework.oxm.Marshaller)
|
||||
* @see WebServiceTemplate#setUnmarshaller(org.springframework.oxm.Unmarshaller)
|
||||
*/
|
||||
Object marshalSendAndReceive(Object requestPayload) throws IOException;
|
||||
Object marshalSendAndReceive(Object requestPayload)
|
||||
throws GenericMarshallingFailureException, WebServiceClientException;
|
||||
|
||||
/**
|
||||
* Sends a web service message that contains the given payload, marshalled by the configured
|
||||
@@ -49,11 +54,14 @@ public interface WebServiceOperations {
|
||||
* @param requestPayload the object to marshal into the request message payload
|
||||
* @param requestCallback callback to change message, can be <code>null</code>
|
||||
* @return the unmarshalled payload of the response message, or <code>null</code> if no response is given
|
||||
* @throws IOException in case of I/O errors
|
||||
* @throws GenericMarshallingFailureException
|
||||
* if there is a problem marshalling or unmarshalling
|
||||
* @throws WebServiceClientException if there is a problem sending or receiving the message
|
||||
* @see WebServiceTemplate#setMarshaller(org.springframework.oxm.Marshaller)
|
||||
* @see WebServiceTemplate#setUnmarshaller(org.springframework.oxm.Unmarshaller)
|
||||
*/
|
||||
Object marshalSendAndReceive(Object requestPayload, WebServiceMessageCallback requestCallback) throws IOException;
|
||||
Object marshalSendAndReceive(Object requestPayload, WebServiceMessageCallback requestCallback)
|
||||
throws GenericMarshallingFailureException, WebServiceClientException;
|
||||
|
||||
/**
|
||||
* Sends a web service message that contains the given payload, reading the result with a
|
||||
@@ -62,8 +70,9 @@ public interface WebServiceOperations {
|
||||
* @param requestPayload the payload of the request message
|
||||
* @param responseExtractor object that will extract results
|
||||
* @return an arbitrary result object, as returned by the <code>SourceExtractor</code>
|
||||
* @throws WebServiceClientException if there is a problem sending or receiving the message
|
||||
*/
|
||||
Object sendAndReceive(Source requestPayload, SourceExtractor responseExtractor) throws IOException;
|
||||
Object sendAndReceive(Source requestPayload, SourceExtractor responseExtractor) throws WebServiceClientException;
|
||||
|
||||
/**
|
||||
* Sends a web service message that contains the given payload, reading the result with a
|
||||
@@ -75,10 +84,11 @@ public interface WebServiceOperations {
|
||||
* @param requestCallback callback to change message, can be <code>null</code>
|
||||
* @param responseExtractor object that will extract results
|
||||
* @return an arbitrary result object, as returned by the <code>SourceExtractor</code>
|
||||
* @throws WebServiceClientException if there is a problem sending or receiving the message
|
||||
*/
|
||||
Object sendAndReceive(Source requestPayload,
|
||||
WebServiceMessageCallback requestCallback,
|
||||
SourceExtractor responseExtractor) throws IOException;
|
||||
SourceExtractor responseExtractor) throws WebServiceClientException;
|
||||
|
||||
/**
|
||||
* Sends a web service message that contains the given payload. Writes the response, if any, to the given
|
||||
@@ -86,9 +96,9 @@ public interface WebServiceOperations {
|
||||
*
|
||||
* @param requestPayload the payload of the request message
|
||||
* @param responseResult the result to write the response payload to
|
||||
* @throws IOException in case of I/O errors
|
||||
* @throws WebServiceClientException if there is a problem sending or receiving the message
|
||||
*/
|
||||
void sendAndReceive(Source requestPayload, Result responseResult) throws IOException;
|
||||
void sendAndReceive(Source requestPayload, Result responseResult) throws WebServiceClientException;
|
||||
|
||||
/**
|
||||
* Sends a web service message that contains the given payload. Writes the response, if any, to the given
|
||||
@@ -99,10 +109,10 @@ public interface WebServiceOperations {
|
||||
* @param requestPayload the payload of the request message
|
||||
* @param requestCallback callback to change message, can be <code>null</code>
|
||||
* @param responseResult the result to write the response payload to
|
||||
* @throws IOException in case of I/O errors
|
||||
* @throws WebServiceClientException if there is a problem sending or receiving the message
|
||||
*/
|
||||
void sendAndReceive(Source requestPayload, WebServiceMessageCallback requestCallback, Result responseResult)
|
||||
throws IOException;
|
||||
throws WebServiceClientException;
|
||||
|
||||
/**
|
||||
* Sends a web service message that can be manipulated with the given callback, reading the result with a
|
||||
@@ -111,10 +121,10 @@ public interface WebServiceOperations {
|
||||
* @param requestCallback the requestCallback to be used for manipulating the request message
|
||||
* @param responseExtractor object that will extract results
|
||||
* @return an arbitrary result object, as returned by the <code>WebServiceMessageExtractor</code>
|
||||
* @throws IOException in case of I/O errors
|
||||
* @throws WebServiceClientException if there is a problem sending or receiving the message
|
||||
*/
|
||||
Object sendAndReceive(WebServiceMessageCallback requestCallback, WebServiceMessageExtractor responseExtractor)
|
||||
throws IOException;
|
||||
throws WebServiceClientException;
|
||||
|
||||
/**
|
||||
* Sends a web service message that can be manipulated with the given callback, reading the result with a
|
||||
@@ -122,8 +132,8 @@ public interface WebServiceOperations {
|
||||
*
|
||||
* @param requestCallback the callback to be used for manipulating the request message
|
||||
* @param responseCallback the callback to be used for manipulating the response message
|
||||
* @throws IOException in case of I/O errors
|
||||
* @throws WebServiceClientException if there is a problem sending or receiving the message
|
||||
*/
|
||||
void sendAndReceive(WebServiceMessageCallback requestCallback, WebServiceMessageCallback responseCallback)
|
||||
throws IOException;
|
||||
throws WebServiceClientException;
|
||||
}
|
||||
|
||||
@@ -36,10 +36,13 @@ import org.springframework.util.Assert;
|
||||
import org.springframework.util.ClassUtils;
|
||||
import org.springframework.ws.WebServiceMessage;
|
||||
import org.springframework.ws.WebServiceMessageFactory;
|
||||
import org.springframework.ws.client.WebServiceClientException;
|
||||
import org.springframework.ws.client.WebServiceIOException;
|
||||
import org.springframework.ws.client.WebServiceTransformerException;
|
||||
import org.springframework.ws.client.WebServiceTransportException;
|
||||
import org.springframework.ws.client.support.WebServiceAccessor;
|
||||
import org.springframework.ws.context.MessageContext;
|
||||
import org.springframework.ws.transport.FaultAwareWebServiceConnection;
|
||||
import org.springframework.ws.transport.TransportException;
|
||||
import org.springframework.ws.transport.TransportInputStream;
|
||||
import org.springframework.ws.transport.TransportOutputStream;
|
||||
import org.springframework.ws.transport.WebServiceConnection;
|
||||
@@ -144,12 +147,11 @@ public class WebServiceTemplate extends WebServiceAccessor implements WebService
|
||||
* Marshalling methods
|
||||
*/
|
||||
|
||||
public Object marshalSendAndReceive(final Object requestPayload) throws IOException {
|
||||
public Object marshalSendAndReceive(final Object requestPayload) {
|
||||
return marshalSendAndReceive(requestPayload, null);
|
||||
}
|
||||
|
||||
public Object marshalSendAndReceive(final Object requestPayload, final WebServiceMessageCallback requestCallback)
|
||||
throws IOException {
|
||||
public Object marshalSendAndReceive(final Object requestPayload, final WebServiceMessageCallback requestCallback) {
|
||||
if (getMarshaller() == null) {
|
||||
throw new IllegalStateException("No marshaller registered. Check configuration of WebServiceTemplate.");
|
||||
}
|
||||
@@ -176,13 +178,13 @@ public class WebServiceTemplate extends WebServiceAccessor implements WebService
|
||||
* Result-handling methods
|
||||
*/
|
||||
|
||||
public void sendAndReceive(Source requestPayload, Result responseResult) throws IOException {
|
||||
public void sendAndReceive(Source requestPayload, Result responseResult) {
|
||||
sendAndReceive(requestPayload, null, responseResult);
|
||||
}
|
||||
|
||||
public void sendAndReceive(Source requestPayload,
|
||||
WebServiceMessageCallback requestCallback,
|
||||
final Result responseResult) throws IOException {
|
||||
final Result responseResult) {
|
||||
try {
|
||||
final Transformer transformer = createTransformer();
|
||||
doSendAndReceive(transformer, requestPayload, requestCallback, new SourceExtractor() {
|
||||
@@ -192,14 +194,14 @@ public class WebServiceTemplate extends WebServiceAccessor implements WebService
|
||||
transformer.transform(source, responseResult);
|
||||
}
|
||||
catch (TransformerException ex) {
|
||||
throw new WebServiceClientException("Could not transform payload", ex);
|
||||
throw new WebServiceTransformerException("Could not transform payload", ex);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
});
|
||||
}
|
||||
catch (TransformerException ex) {
|
||||
throw new WebServiceClientException("Could not create transformer", ex);
|
||||
catch (TransformerConfigurationException ex) {
|
||||
throw new WebServiceTransformerException("Could not create transformer", ex);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -207,27 +209,26 @@ public class WebServiceTemplate extends WebServiceAccessor implements WebService
|
||||
* Source-handling methods
|
||||
*/
|
||||
|
||||
public Object sendAndReceive(final Source requestPayload, final SourceExtractor responseExtractor)
|
||||
throws IOException {
|
||||
public Object sendAndReceive(final Source requestPayload, final SourceExtractor responseExtractor) {
|
||||
return sendAndReceive(requestPayload, null, responseExtractor);
|
||||
}
|
||||
|
||||
public Object sendAndReceive(final Source requestPayload,
|
||||
final WebServiceMessageCallback requestCallback,
|
||||
final SourceExtractor responseExtractor) throws IOException {
|
||||
final SourceExtractor responseExtractor) {
|
||||
|
||||
try {
|
||||
return doSendAndReceive(createTransformer(), requestPayload, requestCallback, responseExtractor);
|
||||
}
|
||||
catch (TransformerConfigurationException ex) {
|
||||
throw new WebServiceClientException("Could not create transformer", ex);
|
||||
throw new WebServiceTransformerException("Could not create transformer", ex);
|
||||
}
|
||||
}
|
||||
|
||||
private Object doSendAndReceive(final Transformer transformer,
|
||||
final Source requestPayload,
|
||||
final WebServiceMessageCallback requestCallback,
|
||||
final SourceExtractor responseExtractor) throws IOException {
|
||||
final SourceExtractor responseExtractor) {
|
||||
Assert.notNull(responseExtractor, "responseExtractor must not be null");
|
||||
return sendAndReceive(new WebServiceMessageCallback() {
|
||||
public void doInMessage(WebServiceMessage message) throws IOException {
|
||||
@@ -238,7 +239,7 @@ public class WebServiceTemplate extends WebServiceAccessor implements WebService
|
||||
}
|
||||
}
|
||||
catch (TransformerException ex) {
|
||||
throw new WebServiceClientException("Could not transform payload to request message", ex);
|
||||
throw new WebServiceTransformerException("Could not transform payload to request message", ex);
|
||||
}
|
||||
}
|
||||
}, new SourceExtractorMessageExtractor(responseExtractor));
|
||||
@@ -248,18 +249,18 @@ public class WebServiceTemplate extends WebServiceAccessor implements WebService
|
||||
* WebServiceMessage-handling methods
|
||||
*/
|
||||
|
||||
public void sendAndReceive(WebServiceMessageCallback requestCallback, WebServiceMessageCallback responseCallback)
|
||||
throws IOException {
|
||||
public void sendAndReceive(WebServiceMessageCallback requestCallback, WebServiceMessageCallback responseCallback) {
|
||||
Assert.notNull(responseCallback, "responseCallback must not be null");
|
||||
sendAndReceive(requestCallback, new WebServiceMessageCallbackMessageExtractor(responseCallback));
|
||||
}
|
||||
|
||||
public Object sendAndReceive(WebServiceMessageCallback requestCallback,
|
||||
WebServiceMessageExtractor responseExtractor) throws IOException {
|
||||
WebServiceMessageExtractor responseExtractor) {
|
||||
Assert.notNull(responseExtractor, "response extractor must not be null");
|
||||
MessageContext messageContext = createMessageContext();
|
||||
WebServiceConnection connection = getMessageSender().createConnection();
|
||||
WebServiceConnection connection = null;
|
||||
try {
|
||||
connection = getMessageSender().createConnection();
|
||||
WebServiceMessage request = messageContext.getRequest();
|
||||
if (requestCallback != null) {
|
||||
requestCallback.doInMessage(request);
|
||||
@@ -287,8 +288,21 @@ public class WebServiceTemplate extends WebServiceAccessor implements WebService
|
||||
}
|
||||
return null;
|
||||
}
|
||||
catch (TransportException ex) {
|
||||
throw new WebServiceTransportException("Could not use transport: " + ex.getMessage(), ex);
|
||||
}
|
||||
catch (IOException ex) {
|
||||
throw new WebServiceIOException("I/O error: " + ex.getMessage(), ex);
|
||||
}
|
||||
finally {
|
||||
connection.close();
|
||||
if (connection != null) {
|
||||
try {
|
||||
connection.close();
|
||||
}
|
||||
catch (IOException ex) {
|
||||
logger.debug("Could not close WebServiceConnection", ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ package org.springframework.ws.client.core;
|
||||
import junit.framework.TestCase;
|
||||
import org.easymock.MockControl;
|
||||
import org.springframework.ws.WebServiceMessage;
|
||||
import org.springframework.ws.client.WebServiceFaultException;
|
||||
|
||||
public class SimpleFaultResolverTest extends TestCase {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user