package com.bansheeproject.test; import java.io.File; import java.util.ArrayList; import java.util.List; import junit.framework.Assert; import org.testng.annotations.Test; import com.bansheeproject.Response; import com.bansheeproject.SOAP11InvocationData; import com.bansheeproject.WSDLServiceData; import com.bansheeproject.WebServicesInvocationData; import com.bansheeproject.engine.ExceptionParameter; import com.bansheeproject.engine.ObjectParameter; import com.bansheeproject.engine.converters.JAXBConverter; import com.bansheeproject.engine.converters.ObjectConverter; import com.bansheeproject.engine.converters.ObjectConverterFactory; import com.bansheeproject.exceptions.ServiceInvokeException; import com.bansheeproject.exceptions.WSDLRetrievalException; import com.bansheeproject.test.entities.BusinessExceptionData; import com.bansheeproject.test.entities.ComplexOperation; import com.bansheeproject.test.entities.ComplexOperationResponse; import com.bansheeproject.test.entities.ComplexType; import com.bansheeproject.test.entities.ThrowBusinessExceptionOperation; import com.bansheeproject.test.entities.ThrowBusinessExceptionOperationResponse; import com.bansheeproject.test.entities.ThrowRandomExceptionResponse; public class TestConverters { @Test public void invokeLocalConverter() throws WSDLRetrievalException, ServiceInvokeException { WebServicesInvocationData invocationData = getInvocationData(); List<Object> encoded = new ArrayList<Object>(); List<Object> decoded = new ArrayList<Object>(); TestConverter testConverter = new TestConverter(encoded, decoded); ComplexOperation complexOperation = new ComplexOperation(); ComplexType request = new ComplexType(); request.setArray(new Integer[]{1,2,3}); request.setString("testString1"); complexOperation.setArg0(request); invocationData.setObjectParameter(complexOperation, ComplexOperationResponse.class, testConverter); Response response1 = invocationData.invoke(); Assert.assertNotNull(response1); Assert.assertEquals(encoded.size(), 1); Assert.assertEquals(encoded.get(0).getClass(), ComplexOperation.class); Assert.assertEquals(decoded.size(), 1); Assert.assertEquals(decoded.get(0).getClass(), ComplexOperationResponse.class); } @Test public void invokeLocalConverterWithException() throws WSDLRetrievalException, ServiceInvokeException { WebServicesInvocationData invocationData = getInvocationData(); List<Object> encoded = new ArrayList<Object>(); List<Object> decoded = new ArrayList<Object>(); TestConverter testConverter = new TestConverter(encoded, decoded); invocationData.setObjectParameter(new ThrowBusinessExceptionOperation(), ThrowRandomExceptionResponse.class, testConverter); invocationData.addExceptionType(BusinessExceptionData.class); Response response1 = invocationData.invoke(); Assert.assertNotNull(response1); Assert.assertEquals(1, encoded.size()); Assert.assertEquals(ThrowBusinessExceptionOperation.class, encoded.get(0).getClass()); Assert.assertEquals(0, decoded.size()); } @Test public void invokeLocalConverterWithExceptionSeparateConverter() throws WSDLRetrievalException, ServiceInvokeException { WebServicesInvocationData invocationData = getInvocationData(); List<Object> encoded = new ArrayList<Object>(); List<Object> decoded = new ArrayList<Object>(); TestConverter testConverter = new TestConverter(encoded, new ArrayList<Object>()); TestConverter separateConverter = new TestConverter(new ArrayList<Object>(), decoded); invocationData.setObjectParameter(new ThrowBusinessExceptionOperation(), ThrowRandomExceptionResponse.class, testConverter); invocationData.addExceptionType(BusinessExceptionData.class, separateConverter); Response response1 = invocationData.invoke(); Assert.assertNotNull(response1); Assert.assertEquals(1, encoded.size()); Assert.assertEquals(ThrowBusinessExceptionOperation.class, encoded.get(0).getClass()); Assert.assertEquals(1, decoded.size()); Assert.assertEquals(BusinessExceptionData.class, decoded.get(0).getClass()); } @Test public void invokeSharedConverter() throws WSDLRetrievalException, ServiceInvokeException { WebServicesInvocationData invocationData = getInvocationData(); List<Object> encoded = new ArrayList<Object>(); List<Object> decoded = new ArrayList<Object>(); TestConverter testConverter = new TestConverter(encoded, decoded); invocationData.setObjectConverter(testConverter); ComplexOperation complexOperation = new ComplexOperation(); ComplexType request = new ComplexType(); request.setArray(new Integer[]{1,2,3}); request.setString("testString1"); complexOperation.setArg0(request); invocationData.setObjectParameter(complexOperation, ComplexOperationResponse.class); Response response1 = invocationData.invoke(); Assert.assertNotNull(response1); Assert.assertEquals(1, encoded.size()); Assert.assertEquals(ComplexOperation.class, encoded.get(0).getClass()); Assert.assertEquals(1, decoded.size()); Assert.assertEquals(ComplexOperationResponse.class, decoded.get(0).getClass()); } @Test public void invokeSharedConverterWithException() throws WSDLRetrievalException, ServiceInvokeException { WebServicesInvocationData invocationData = getInvocationData(); List<Object> encoded = new ArrayList<Object>(); List<Object> decoded = new ArrayList<Object>(); TestConverter testConverter = new TestConverter(encoded, decoded); invocationData.setObjectConverter(testConverter); invocationData.addExceptionType(BusinessExceptionData.class); invocationData.setObjectParameter(new ThrowBusinessExceptionOperation(), ThrowBusinessExceptionOperationResponse.class); Response response1 = invocationData.invoke(); Assert.assertNotNull(response1); Assert.assertEquals(encoded.size(), 1); Assert.assertEquals(encoded.get(0).getClass(), ThrowBusinessExceptionOperation.class); Assert.assertEquals(decoded.size(), 1); Assert.assertEquals(decoded.get(0).getClass(), BusinessExceptionData.class); } public static List<Object> globalEncoded = new ArrayList<Object>(); public static List<Object> globalDecoded = new ArrayList<Object>(); @Test public void invokeGlobalConverter() throws WSDLRetrievalException, ServiceInvokeException { try { System.setProperty(ObjectConverterFactory.SYSTEM_PROPERTY, SystemObjectConverterFactory.class.getName()); WebServicesInvocationData invocationData = getInvocationData(); ComplexOperation complexOperation = new ComplexOperation(); ComplexType request = new ComplexType(); request.setArray(new Integer[]{1,2,3}); request.setString("testString1"); complexOperation.setArg0(request); //invocationData.setServiceParameter(new ObjectParameter(complexOperation, ComplexOperationResponse.class, testConverter)); invocationData.setObjectParameter(complexOperation, ComplexOperationResponse.class); Response response1 = invocationData.invoke(); Assert.assertNotNull(response1); Assert.assertEquals(globalEncoded.size(), 1); Assert.assertEquals(globalEncoded.get(0).getClass(), ComplexOperation.class); Assert.assertEquals(globalDecoded.size(), 1); Assert.assertEquals(globalDecoded.get(0).getClass(), ComplexOperationResponse.class); } finally { removeGlobalConverter(); } } @Test public void invokeGlobalConverterWithException() throws WSDLRetrievalException, ServiceInvokeException { try { System.setProperty(ObjectConverterFactory.SYSTEM_PROPERTY, SystemObjectConverterFactory.class.getName()); WebServicesInvocationData invocationData = getInvocationData(); invocationData.addExceptionType(BusinessExceptionData.class); invocationData.setObjectParameter(new ThrowBusinessExceptionOperation(), ThrowBusinessExceptionOperationResponse.class); Response response1 = invocationData.invoke(); Assert.assertNotNull(response1); Assert.assertEquals(globalEncoded.size(), 1); Assert.assertEquals(globalEncoded.get(0).getClass(), ThrowBusinessExceptionOperation.class); Assert.assertEquals(globalDecoded.size(), 1); Assert.assertEquals(globalDecoded.get(0).getClass(), BusinessExceptionData.class); } finally { removeGlobalConverter(); } } public void removeGlobalConverter() { System.setProperty(ObjectConverterFactory.SYSTEM_PROPERTY, ObjectConverterFactory.DEFAULT_FACTORY); globalDecoded.clear(); globalEncoded.clear(); } private WebServicesInvocationData getInvocationData() throws WSDLRetrievalException { WSDLServiceData serviceData = WSDLServiceData.loadFromFile(new File("src\\test\\resources\\wsdl\\soap11.wsdl")); WebServicesInvocationData invocationData = new SOAP11InvocationData(serviceData); return invocationData; } public class TestConverter extends JAXBConverter { List<Object> encoded ; List<Object> decoded; public TestConverter(List<Object> encoded, List<Object> decoded) { this.encoded = encoded; this.decoded = decoded; } @Override public String encode(Object source) { encoded.add(source); return super.encode(source); } @Override public Object decode(String response, Class<?> expectedType) { Object responseObject = super.decode(response, expectedType); decoded.add(responseObject); return responseObject; } } public static class SystemObjectConverterFactory extends ObjectConverterFactory { @Override public ObjectConverter newObjectConverter() { return new SystemConverter(); } } public static class SystemConverter extends JAXBConverter { @Override public String encode(Object source) { globalEncoded.add(source); return super.encode(source); } @Override public Object decode(String response, Class<?> expectedType) { Object responseObject = super.decode(response, expectedType); globalDecoded.add(responseObject); return responseObject; } } }