diff --git a/pom.xml b/pom.xml index 1be2cda..2a7592a 100644 --- a/pom.xml +++ b/pom.xml @@ -2,11 +2,7 @@ 4.0.0 - - framework - com.docus - 1.0-SNAPSHOT - + com.docus docus-soap-api-client 1.0-SNAPSHOT @@ -24,58 +20,66 @@ docus-soap-api-client 1.8 + 5.0.2.RELEASE + 3.0.10.RELEASE - - - org.springframework.boot - spring-boot-starter-web - provided - - - - cn.hutool - hutool-all - ${hutool.version} - - org.springframework.ws spring-ws-core ${spring-ws.version} - - com.docus - docus-tool-starter - 1.0-SNAPSHOT - - javax.inject javax.inject 1 - org.springframework.boot - spring-boot-test + org.springframework + spring-test + ${spring.version} test + + + org.slf4j + slf4j-api + 1.7.6 + - org.junit.jupiter - junit-jupiter-api - test + org.slf4j + jcl-over-slf4j + 1.7.6 junit junit + 4.12 test - org.springframework - spring-test - test + com.fasterxml.jackson.module + jackson-module-jaxb-annotations + 2.2.2 + + + org.projectlombok + lombok + 1.18.26 + provided + + + javax.servlet + javax.servlet-api + 3.1.0 + provided + + + org.apache.httpcomponents + httpclient + 4.5 diff --git a/src/main/java/com/docus/soap/api/DefaultAppContextInitializer.java b/src/main/java/com/docus/soap/api/DefaultAppContextInitializer.java new file mode 100644 index 0000000..2695bfd --- /dev/null +++ b/src/main/java/com/docus/soap/api/DefaultAppContextInitializer.java @@ -0,0 +1,31 @@ +package com.docus.soap.api; + +import org.springframework.context.ApplicationContextInitializer; +import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; +import org.springframework.core.env.PropertiesPropertySource; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.web.context.ConfigurableWebApplicationContext; + +import java.io.IOException; +import java.util.Properties; + +public class DefaultAppContextInitializer implements ApplicationContextInitializer { + @Override + public void initialize(ConfigurableWebApplicationContext context) { + PropertyLoader propertyLoader = new PropertyLoader(); + try { + propertyLoader.setLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:*.properties")); + + context.getEnvironment().setIgnoreUnresolvableNestedPlaceholders(true); + context.getEnvironment().getPropertySources().addLast(new PropertiesPropertySource("properties", propertyLoader.loadProperties())); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + static class PropertyLoader extends PropertySourcesPlaceholderConfigurer { + Properties loadProperties() throws IOException { + return mergeProperties(); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/docus/soap/api/DocusSoapApplication.java b/src/main/java/com/docus/soap/api/DocusSoapApplication.java deleted file mode 100644 index 1b227e4..0000000 --- a/src/main/java/com/docus/soap/api/DocusSoapApplication.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.docus.soap.api; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class DocusSoapApplication { - - public static void main(String[] args) { - SpringApplication.run(DocusSoapApplication.class, args); - } - -} diff --git a/src/main/java/com/docus/soap/api/EnableSoapAPIClientSelector.java b/src/main/java/com/docus/soap/api/EnableSoapAPIClientSelector.java index 202b558..c6b712a 100644 --- a/src/main/java/com/docus/soap/api/EnableSoapAPIClientSelector.java +++ b/src/main/java/com/docus/soap/api/EnableSoapAPIClientSelector.java @@ -7,8 +7,9 @@ public class EnableSoapAPIClientSelector extends AdviceModeImportSelector> T toEnum(String value, Class enumClass, T defaultValue) { + if (!StringUtils.hasText(value)) { + return defaultValue; + } + try { + return Enum.valueOf(enumClass, value); + } catch (IllegalArgumentException e) { + return defaultValue; + } + } + + private Convert() { + } +} diff --git a/src/main/java/com/docus/soap/api/util/DateUtils.java b/src/main/java/com/docus/soap/api/util/DateUtils.java new file mode 100644 index 0000000..a1d832f --- /dev/null +++ b/src/main/java/com/docus/soap/api/util/DateUtils.java @@ -0,0 +1,117 @@ +package com.docus.soap.api.util; + +import java.util.Calendar; +import java.util.Date; +import java.util.TimeZone; + +/** + * Date should be considered as immutable object (e.g. String), all methods in + * this util return new instance + */ +public final class DateUtils { + public static Date date(int year, int month, int day) { + return date(year, month, day, 0, 0, 0); + } + + public static Date date(int year, int month, int day, int hour, int minute, int second) { + Calendar calendar = Calendar.getInstance(); + calendar.setLenient(false); + calendar.set(year, month, day, hour, minute, second); + calendar.set(Calendar.MILLISECOND, 0); + return calendar.getTime(); + } + + public static Calendar calendar(Date date) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + return calendar; + } + + public static Date add(Date date, int field, int value) { + Calendar calendar = calendar(date); + calendar.add(field, value); + return calendar.getTime(); + } + + public static int get(Date date, int field) { + Calendar calendar = calendar(date); + return calendar.get(field); + } + + public static Date withField(Date date, int field, int value) { + Calendar calendar = calendar(date); + calendar.set(field, value); + return calendar.getTime(); + } + + public static int getYear(Date date) { + return get(date, Calendar.YEAR); + } + + public static int getMonth(Date date) { + return get(date, Calendar.MONTH); + } + + public static int getDay(Date date) { + return get(date, Calendar.DATE); + } + + public static int getHour(Date date) { + return get(date, Calendar.HOUR_OF_DAY); + } + + public static int getMinute(Date date) { + return get(date, Calendar.MINUTE); + } + + public static Date withHour(Date date, int value) { + return withField(date, Calendar.HOUR_OF_DAY, value); + } + + public static Date withMinute(Date date, int value) { + return withField(date, Calendar.MINUTE, value); + } + + public static Date toCurrentTimeZone(Date targetDate, TimeZone targetTimeZone) { + Calendar target = calendar(targetDate); + + Calendar result = Calendar.getInstance(targetTimeZone); + result.set(Calendar.YEAR, target.get(Calendar.YEAR)); + result.set(Calendar.MONTH, target.get(Calendar.MONTH)); + result.set(Calendar.DATE, target.get(Calendar.DATE)); + result.set(Calendar.HOUR_OF_DAY, target.get(Calendar.HOUR_OF_DAY)); + result.set(Calendar.MINUTE, target.get(Calendar.MINUTE)); + result.set(Calendar.SECOND, target.get(Calendar.SECOND)); + result.set(Calendar.MILLISECOND, target.get(Calendar.MILLISECOND)); + + return result.getTime(); + } + + public static boolean isWeekDay(Date targetDate) { + Calendar calendar = calendar(targetDate); + int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); + return dayOfWeek != Calendar.SATURDAY && dayOfWeek != Calendar.SUNDAY; + } + + public static boolean isDateValid(int year, int month, int day) { + try { + date(year, month, day); + return true; + } catch (Exception e) { + return false; + } + } + + public static Date truncateTime(Date date) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + return calendar.getTime(); + } + + private DateUtils() { + } +} diff --git a/src/main/java/com/docus/soap/api/util/JSON.java b/src/main/java/com/docus/soap/api/util/JSON.java new file mode 100644 index 0000000..d6e0526 --- /dev/null +++ b/src/main/java/com/docus/soap/api/util/JSON.java @@ -0,0 +1,68 @@ +package com.docus.soap.api.util; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.JavaType; + +import java.io.IOException; + +public class JSON { + + public static String toJSON(Object obj) { + return toJSON(ObjectMapperBuilder.defaultObjectMapper(), obj); + } + + public static String toJSON(ObjectMapperBuilder builder, Object obj) { + try { + return builder.get().writeValueAsString(obj); + } catch (JsonProcessingException e) { + throw new RuntimeIOException(e); + } + } + + public static T fromJSON(String json, Class exceptClass) { + return fromJSON(ObjectMapperBuilder.defaultObjectMapper(), json, exceptClass); + } + + public static T fromJSON(ObjectMapperBuilder builder, String json, Class exceptClass) { + try { + return builder.get().readValue(json, exceptClass); + } catch (IOException e) { + throw new RuntimeIOException(e); + } + } + + public static T fromJSONWithGeneric(String json, TypeReference genericType) { + return fromJSONWithGeneric(ObjectMapperBuilder.defaultObjectMapper(), json, genericType); + } + + /** + * example:List jsonList = JSON.fromJSONWithGeneric(JSON.toJSON(list), new TypeReference>(){}) + */ + public static T fromJSONWithGeneric(ObjectMapperBuilder builder, String json, TypeReference genericType) { + try { + return builder.get().readValue(json, genericType); + } catch (IOException e) { + throw new RuntimeIOException(e); + } + } + + public static T fromJSONWithGeneric(String json, JavaType javaType) { + return fromJSONWithGeneric(ObjectMapperBuilder.defaultObjectMapper(), json, javaType); + } + + /** + * @param builder {@see ObjectMapperBuilder} + * @param json value + * @param javaType {@link com.fasterxml.jackson.databind.type.TypeFactory#constructParametricType} or {@link com.fasterxml.jackson.databind.ObjectMapper#constructType} + * @param result Type + * @return result + */ + public static T fromJSONWithGeneric(ObjectMapperBuilder builder, String json, JavaType javaType) { + try { + return builder.get().readValue(json, javaType); + } catch (IOException e) { + throw new RuntimeIOException(e); + } + } +} diff --git a/src/main/java/com/docus/soap/api/util/JSONBinder.java b/src/main/java/com/docus/soap/api/util/JSONBinder.java new file mode 100644 index 0000000..9a56b52 --- /dev/null +++ b/src/main/java/com/docus/soap/api/util/JSONBinder.java @@ -0,0 +1,55 @@ +package com.docus.soap.api.util; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; + +import java.io.IOException; + +@Deprecated +public final class JSONBinder { + static final ObjectMapper DEFAULT_OBJECT_MAPPER; + + static { + DEFAULT_OBJECT_MAPPER = ObjectMapperBuilder.defaultObjectMapper().get(); + } + + public static JSONBinder binder(Class beanClass) { + return new JSONBinder<>(beanClass); + } + + public static ObjectMapper getObjectMapper() { + return DEFAULT_OBJECT_MAPPER; + } + + ObjectMapper objectMapper; + private final Class beanClass; + + private JSONBinder(Class beanClass) { + this.beanClass = beanClass; + this.objectMapper = DEFAULT_OBJECT_MAPPER; + } + + public T fromJSON(String json) { + try { + return objectMapper.readValue(json, beanClass); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public String toJSON(T object) { + try { + return objectMapper.writeValueAsString(object); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public JSONBinder indentOutput() { + if (DEFAULT_OBJECT_MAPPER.equals(objectMapper)) { + objectMapper = ObjectMapperBuilder.defaultObjectMapper().rebirth().get(); + } + objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true); + return this; + } +} diff --git a/src/main/java/com/docus/soap/api/util/JSONDateFormat.java b/src/main/java/com/docus/soap/api/util/JSONDateFormat.java new file mode 100644 index 0000000..8aecd54 --- /dev/null +++ b/src/main/java/com/docus/soap/api/util/JSONDateFormat.java @@ -0,0 +1,82 @@ +package com.docus.soap.api.util; + +import java.text.DateFormat; +import java.text.FieldPosition; +import java.text.ParsePosition; +import java.util.Date; + +public class JSONDateFormat extends DateFormat { + private static final long serialVersionUID = 1L; + + @Override + public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) { + toAppendTo.append(Convert.toString(date, Convert.DATE_FORMAT_ISO_WITH_TIMEZONE)); + return toAppendTo; + } + + @Override + public Date parse(String source, ParsePosition pos) { + pos.setIndex(source.length()); + + if (isContainChar(source, '-')) { + if (Convert.DATA_FORMAT_DATETIME_SLASH.length() == source.length()) { + return Convert.toDate(source, Convert.DATA_FORMAT_DATETIME_SLASH); + } else { + return Convert.toDate(source, getISOPattern(source)); + } + } + if ("MM/dd/yyyyTHH:mm:ss".length() == source.length()) { + //TODO: remove legacy format + return Convert.toDate(source, Convert.DATE_FORMAT_DATETIME); + } + + return Convert.toDate(source, Convert.DATE_FORMAT_DATE); + + } + + + public boolean isContainChar(String source, char character) { + if (!StringUtils.hasText(source)) { + return false; + } + + for (char c : source.toCharArray()) { + if (character == c) { + return true; + } + } + return false; + } + + public String getISOPattern(String source) { + StringBuilder b = new StringBuilder("yyyy-MM-dd'T'HH:mm:ss"); + int precision = 0; + int state = 0; + + for (int i = "yyyy-MM-ddTHH:mm:ss".length(); i < source.length(); i++) { + char c = source.charAt(i); + + if (c == '.' && state == 0) { + state = 1; + } else if (c == '-' || c == '+' || c == 'Z') { + if (state > 0) { + b.append('.'); + //support million seconds + for (int j = 0; j < precision; j++) { + b.append('S'); + } + } + b.append("XXX"); + break; + } else if (state == 1) { + precision++; + } + } + return b.toString(); + } + + @Override + public Object clone() { + return this; + } +} diff --git a/src/main/java/com/docus/soap/api/util/NullObjectMapperBuilder.java b/src/main/java/com/docus/soap/api/util/NullObjectMapperBuilder.java index fdb85c5..a1d5088 100644 --- a/src/main/java/com/docus/soap/api/util/NullObjectMapperBuilder.java +++ b/src/main/java/com/docus/soap/api/util/NullObjectMapperBuilder.java @@ -1,6 +1,5 @@ package com.docus.soap.api.util; -import com.docus.core.util.json.ObjectMapperBuilder; import com.fasterxml.jackson.databind.AnnotationIntrospector; import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector; import com.fasterxml.jackson.databind.type.TypeFactory; diff --git a/src/main/java/com/docus/soap/api/util/ObjectMapperBuilder.java b/src/main/java/com/docus/soap/api/util/ObjectMapperBuilder.java new file mode 100644 index 0000000..8b6be1f --- /dev/null +++ b/src/main/java/com/docus/soap/api/util/ObjectMapperBuilder.java @@ -0,0 +1,63 @@ +package com.docus.soap.api.util; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.AnnotationIntrospector; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.MapperFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector; +import com.fasterxml.jackson.databind.type.TypeFactory; +import com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector; + +public class ObjectMapperBuilder { + static final ObjectMapper DEFAULT_OBJECT_MAPPER; + + static { + DEFAULT_OBJECT_MAPPER = createMapper(); + } + + public static ObjectMapper getObjectMapper() { + return DEFAULT_OBJECT_MAPPER; + } + + private static ObjectMapper createMapper() { + ObjectMapper mapper = new ObjectMapper(); + mapper.setDateFormat(new JSONDateFormat()); + AnnotationIntrospector primary = new JaxbAnnotationIntrospector(TypeFactory.defaultInstance()); + AnnotationIntrospector secondary = new JacksonAnnotationIntrospector(); + mapper.setAnnotationIntrospector(AnnotationIntrospector.pair(primary, secondary)); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + mapper.configure(MapperFeature.USE_WRAPPER_NAME_AS_PROPERTY_NAME, true); + mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true); + return mapper; + } + + private boolean changed = false; + private ObjectMapper objectMapper; + + public ObjectMapperBuilder() { + this.objectMapper = DEFAULT_OBJECT_MAPPER; + } + + public ObjectMapper get() { + return objectMapper; + } + + public static ObjectMapperBuilder defaultObjectMapper() { + return new ObjectMapperBuilder(); + } + + public ObjectMapperBuilder rebirth() { + if (!changed && DEFAULT_OBJECT_MAPPER.equals(objectMapper)) { + objectMapper = createMapper(); + } + return this; + } + + public ObjectMapperBuilder indent() { + objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true); + changed = true; + return this; + } +} diff --git a/src/main/java/com/docus/soap/api/util/RuntimeIOException.java b/src/main/java/com/docus/soap/api/util/RuntimeIOException.java new file mode 100644 index 0000000..d78f51e --- /dev/null +++ b/src/main/java/com/docus/soap/api/util/RuntimeIOException.java @@ -0,0 +1,8 @@ +package com.docus.soap.api.util; + + +public final class RuntimeIOException extends RuntimeException { + public RuntimeIOException(Throwable cause) { + super(cause); + } +} diff --git a/src/main/java/com/docus/soap/api/util/StringDateTimeAdapter.java b/src/main/java/com/docus/soap/api/util/StringDateTimeAdapter.java index d5f749e..417d6ab 100644 --- a/src/main/java/com/docus/soap/api/util/StringDateTimeAdapter.java +++ b/src/main/java/com/docus/soap/api/util/StringDateTimeAdapter.java @@ -1,8 +1,5 @@ package com.docus.soap.api.util; -import com.docus.core.util.Convert; -import com.docus.core.util.StringUtils; - import javax.xml.bind.annotation.adapters.XmlAdapter; import java.util.Date; diff --git a/src/main/java/com/docus/soap/api/util/StringUtils.java b/src/main/java/com/docus/soap/api/util/StringUtils.java new file mode 100644 index 0000000..f9e9e83 --- /dev/null +++ b/src/main/java/com/docus/soap/api/util/StringUtils.java @@ -0,0 +1,69 @@ +package com.docus.soap.api.util; + +import java.util.regex.Pattern; + + +public final class StringUtils { + private static final Pattern PATTERN_GUID = Pattern.compile("^[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$"); + private static final Pattern PATTERN_SAFE_STRING = Pattern.compile("^[.\\-,#&\\p{Alnum}\\p{Space}]*$"); + + public static boolean isGUID(String input) { + if (!StringUtils.hasText(input)) { + return false; + } + return PATTERN_GUID.matcher(input).matches(); + } + + public static int compare(String text1, String text2) { + if (text1 == null && text2 == null) + return 0; + if (text1 != null && text2 == null) { + return 1; + } + if (text1 == null) { + return -1; + } + return text1.compareTo(text2); + } + + public static boolean hasText(String text) { + if (text == null) + return false; + for (int i = 0; i < text.length(); i++) { + if (!Character.isWhitespace(text.charAt(i))) + return true; + } + return false; + } + + public static boolean equals(String text1, String text2) { + if (text1 == null) + return text2 == null; + + return text1.equals(text2); + } + + public static String truncate(String text, int maxLength) { + if (text == null) + return null; + if (text.length() <= maxLength) + return text; + return text.substring(0, maxLength); + } + + public static String trim(String text) { + if (text == null) + return null; + return text.trim(); + } + + public static boolean isSafeString(String value) { + if (!StringUtils.hasText(value)) { + return true; + } + return PATTERN_SAFE_STRING.matcher(value).matches(); + } + + private StringUtils() { + } +} diff --git a/src/main/resources/api.server.properties b/src/main/resources/api.server.properties new file mode 100644 index 0000000..ff18b53 --- /dev/null +++ b/src/main/resources/api.server.properties @@ -0,0 +1,2 @@ +soap.complaint.api.url=http://101.132.67.155:8087/PKIQRCode/services/v1?wsdl +soap.complaint.api.action=SOF_GetQRCodeBySys diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml deleted file mode 100644 index c0bc3f5..0000000 --- a/src/main/resources/application.yml +++ /dev/null @@ -1,3 +0,0 @@ -soap: - complaint.api.url: http://101.132.67.155:8087/PKIQRCode/services/v1?wsdl - complaint.api.action: SOF_GetQRCodeBySys \ No newline at end of file diff --git a/src/test/java/com/docus/soap/api/ComplaintAPIServiceTest.java b/src/test/java/com/docus/soap/api/ComplaintAPIServiceTest.java index 7e94f78..be44f71 100644 --- a/src/test/java/com/docus/soap/api/ComplaintAPIServiceTest.java +++ b/src/test/java/com/docus/soap/api/ComplaintAPIServiceTest.java @@ -1,29 +1,22 @@ package com.docus.soap.api; -import com.docus.core.util.AssertUtils; import com.docus.soap.api.request.complain.GetTableByIdDateRequest; import com.docus.soap.api.response.complain.ComplaintListResult; import com.docus.soap.api.service.ComplaintAPIService; +import org.junit.Assert; import org.junit.Test; -import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.core.env.Environment; import javax.inject.Inject; -@RunWith(SpringRunner.class) -@SpringBootTest(classes = DocusSoapApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) -public class ComplaintAPIServiceTest { +public class ComplaintAPIServiceTest extends SpringTest { private final Logger logger = LoggerFactory.getLogger(ComplaintAPIServiceTest.class); - @Value("${soap.complaint.api.url}") - public String soapComplaintUrl; - @Value("${soap.complaint.api.action}") - public String soapComplaintAction; + @Inject + private Environment env; @Inject private ComplaintAPIService complaintAPIService; @@ -34,13 +27,13 @@ public class ComplaintAPIServiceTest { GetTableByIdDateRequest request = new GetTableByIdDateRequest(); request.setSys("JSScan"); ComplaintListResult result = complaintAPIService.getTableByIdDate(request, getTableByIdDateSettings()); - AssertUtils.assertNotNull(result, "not null"); + Assert.assertNotNull("not null", result); } private SoapAPISettings getTableByIdDateSettings() { SoapAPISettings soapAPISettings = new SoapAPISettings(); - soapAPISettings.setAction(soapComplaintAction); - soapAPISettings.setUri(soapComplaintUrl); + soapAPISettings.setAction(env.getProperty("soap.complaint.api.action")); + soapAPISettings.setUri(env.getProperty("soap.complaint.api.url")); return soapAPISettings; } } diff --git a/src/test/java/com/docus/soap/api/SpringTest.java b/src/test/java/com/docus/soap/api/SpringTest.java new file mode 100644 index 0000000..78c5a8e --- /dev/null +++ b/src/test/java/com/docus/soap/api/SpringTest.java @@ -0,0 +1,17 @@ +package com.docus.soap.api; + +import org.junit.runner.RunWith; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.transaction.TransactionConfiguration; +import org.springframework.test.context.web.WebAppConfiguration; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = {TestEnvironmentConfig.class}, initializers = DefaultAppContextInitializer.class) +@TransactionConfiguration +@ActiveProfiles("test") +@WebAppConfiguration +public abstract class SpringTest { + +} diff --git a/src/test/java/com/docus/soap/api/TestEnvironmentConfig.java b/src/test/java/com/docus/soap/api/TestEnvironmentConfig.java new file mode 100644 index 0000000..6f19e9c --- /dev/null +++ b/src/test/java/com/docus/soap/api/TestEnvironmentConfig.java @@ -0,0 +1,12 @@ +package com.docus.soap.api; + +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.Profile; + +@Profile("test") +@Configuration +@Import(SoapAPIConfig.class) +public class TestEnvironmentConfig { + +} diff --git a/src/test/resources/api.server.properties b/src/test/resources/api.server.properties new file mode 100644 index 0000000..ff18b53 --- /dev/null +++ b/src/test/resources/api.server.properties @@ -0,0 +1,2 @@ +soap.complaint.api.url=http://101.132.67.155:8087/PKIQRCode/services/v1?wsdl +soap.complaint.api.action=SOF_GetQRCodeBySys diff --git a/src/test/resources/application.yml b/src/test/resources/application.yml deleted file mode 100644 index c0bc3f5..0000000 --- a/src/test/resources/application.yml +++ /dev/null @@ -1,3 +0,0 @@ -soap: - complaint.api.url: http://101.132.67.155:8087/PKIQRCode/services/v1?wsdl - complaint.api.action: SOF_GetQRCodeBySys \ No newline at end of file