From ec2f2fa26d03a213eed886d5cf6768fc30ebe1b1 Mon Sep 17 00:00:00 2001 From: linrf Date: Tue, 23 May 2023 20:03:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9Edocus-soap-client-api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 33 +++++++ pom.xml | 81 ++++++++++++++++ .../docus/soap/api/DocusSoapApplication.java | 13 +++ .../com/docus/soap/api/SoapAPIClient.java | 29 ++++++ .../com/docus/soap/api/SoapAPIConfig.java | 92 +++++++++++++++++++ .../docus/soap/api/SoapAPILogIntercepter.java | 41 +++++++++ .../soap/api/SoapAPIMessageGenerator.java | 43 +++++++++ .../soap/api/SoapAPIResponseExtractor.java | 39 ++++++++ .../com/docus/soap/api/SoapAPISettings.java | 49 ++++++++++ .../docus/soap/api/SoapMessageEnvelope.java | 24 +++++ .../complain/ComplaintProcessStatus.java | 53 +++++++++++ .../complain/GetTableByIdDateDataRequest.java | 72 +++++++++++++++ .../complain/GetTableByIdDateRequest.java | 22 +++++ .../complain/ComplaintListResult.java | 41 +++++++++ .../soap/api/response/complain/DataItem.java | 28 ++++++ .../complain/GetComplaintListExResponse.java | 22 +++++ .../complain/GetComplaintListResponse.java | 22 +++++ .../complain/GetTableByIdDateResponse.java | 22 +++++ .../complain/GetTableByIdDateResult.java | 29 ++++++ .../api/response/complain/package-info.java | 5 + .../soap/api/service/ComplaintAPIService.java | 21 +++++ .../java/com/docus/soap/api/service/a.java | 4 + .../api/util/NullObjectMapperBuilder.java | 26 ++++++ .../docus/soap/api/util/NullSerializer.java | 36 ++++++++ .../soap/api/util/StringDateTimeAdapter.java | 34 +++++++ .../com/docus/soap/api/util/XmlUtils.java | 32 +++++++ src/main/resources/application.yml | 3 + src/main/resources/logback.xml | 36 ++++++++ .../soap/api/ComplaintAPIServiceTest.java | 46 ++++++++++ src/test/resources/application.yml | 3 + src/test/resources/logback.xml | 36 ++++++++ 31 files changed, 1037 insertions(+) create mode 100644 .gitignore create mode 100644 pom.xml create mode 100644 src/main/java/com/docus/soap/api/DocusSoapApplication.java create mode 100644 src/main/java/com/docus/soap/api/SoapAPIClient.java create mode 100644 src/main/java/com/docus/soap/api/SoapAPIConfig.java create mode 100644 src/main/java/com/docus/soap/api/SoapAPILogIntercepter.java create mode 100644 src/main/java/com/docus/soap/api/SoapAPIMessageGenerator.java create mode 100644 src/main/java/com/docus/soap/api/SoapAPIResponseExtractor.java create mode 100644 src/main/java/com/docus/soap/api/SoapAPISettings.java create mode 100644 src/main/java/com/docus/soap/api/SoapMessageEnvelope.java create mode 100644 src/main/java/com/docus/soap/api/request/complain/ComplaintProcessStatus.java create mode 100644 src/main/java/com/docus/soap/api/request/complain/GetTableByIdDateDataRequest.java create mode 100644 src/main/java/com/docus/soap/api/request/complain/GetTableByIdDateRequest.java create mode 100644 src/main/java/com/docus/soap/api/response/complain/ComplaintListResult.java create mode 100644 src/main/java/com/docus/soap/api/response/complain/DataItem.java create mode 100644 src/main/java/com/docus/soap/api/response/complain/GetComplaintListExResponse.java create mode 100644 src/main/java/com/docus/soap/api/response/complain/GetComplaintListResponse.java create mode 100644 src/main/java/com/docus/soap/api/response/complain/GetTableByIdDateResponse.java create mode 100644 src/main/java/com/docus/soap/api/response/complain/GetTableByIdDateResult.java create mode 100644 src/main/java/com/docus/soap/api/response/complain/package-info.java create mode 100644 src/main/java/com/docus/soap/api/service/ComplaintAPIService.java create mode 100644 src/main/java/com/docus/soap/api/service/a.java create mode 100644 src/main/java/com/docus/soap/api/util/NullObjectMapperBuilder.java create mode 100644 src/main/java/com/docus/soap/api/util/NullSerializer.java create mode 100644 src/main/java/com/docus/soap/api/util/StringDateTimeAdapter.java create mode 100644 src/main/java/com/docus/soap/api/util/XmlUtils.java create mode 100644 src/main/resources/application.yml create mode 100644 src/main/resources/logback.xml create mode 100644 src/test/java/com/docus/soap/api/ComplaintAPIServiceTest.java create mode 100644 src/test/resources/application.yml create mode 100644 src/test/resources/logback.xml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..549e00a --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..1be2cda --- /dev/null +++ b/pom.xml @@ -0,0 +1,81 @@ + + + 4.0.0 + + framework + com.docus + 1.0-SNAPSHOT + + docus-soap-api-client + 1.0-SNAPSHOT + + + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + + + + + docus-soap-api-client + + 1.8 + + + + + + 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 + test + + + org.junit.jupiter + junit-jupiter-api + test + + + junit + junit + test + + + org.springframework + spring-test + test + + + diff --git a/src/main/java/com/docus/soap/api/DocusSoapApplication.java b/src/main/java/com/docus/soap/api/DocusSoapApplication.java new file mode 100644 index 0000000..1b227e4 --- /dev/null +++ b/src/main/java/com/docus/soap/api/DocusSoapApplication.java @@ -0,0 +1,13 @@ +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/SoapAPIClient.java b/src/main/java/com/docus/soap/api/SoapAPIClient.java new file mode 100644 index 0000000..d7ae078 --- /dev/null +++ b/src/main/java/com/docus/soap/api/SoapAPIClient.java @@ -0,0 +1,29 @@ +package com.docus.soap.api; + +import org.springframework.ws.client.core.WebServiceTemplate; + +public class SoapAPIClient { + private WebServiceTemplate webServiceTemplate; + private SoapAPIMessageGenerator messageGenerator; + private SoapAPIResponseExtractor responseExtractor; + + public Object soapCall(Object requestBody, String soapAction, String uri) { + SoapMessageEnvelope messageEnvelope = new SoapMessageEnvelope(); + messageEnvelope.setSoapBody(requestBody); + messageEnvelope.setSoapAction(soapAction); + webServiceTemplate.setDefaultUri(uri); + return webServiceTemplate.sendAndReceive(messageGenerator.generateSoapMessage(messageEnvelope), responseExtractor.generateExtractor()); + } + + public void setWebServiceTemplate(WebServiceTemplate webServiceTemplate) { + this.webServiceTemplate = webServiceTemplate; + } + + public void setMessageGenerator(SoapAPIMessageGenerator messageGenerator) { + this.messageGenerator = messageGenerator; + } + + public void setResponseExtractor(SoapAPIResponseExtractor responseExtractor) { + this.responseExtractor = responseExtractor; + } +} diff --git a/src/main/java/com/docus/soap/api/SoapAPIConfig.java b/src/main/java/com/docus/soap/api/SoapAPIConfig.java new file mode 100644 index 0000000..e0ba4ff --- /dev/null +++ b/src/main/java/com/docus/soap/api/SoapAPIConfig.java @@ -0,0 +1,92 @@ +package com.docus.soap.api; + +import com.docus.soap.api.service.ComplaintAPIService; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.oxm.jaxb.Jaxb2Marshaller; +import org.springframework.ws.client.core.WebServiceTemplate; +import org.springframework.ws.client.support.interceptor.ClientInterceptor; +import org.springframework.ws.soap.SoapVersion; +import org.springframework.ws.soap.saaj.SaajSoapMessageFactory; +import org.springframework.ws.transport.http.HttpComponentsMessageSender; + +import javax.inject.Named; +import java.util.ArrayList; +import java.util.List; + +@Configuration +public class SoapAPIConfig { + + @Bean + public WebServiceTemplate webServiceTemplate() { + WebServiceTemplate webServiceTemplate = new WebServiceTemplate(); + webServiceTemplate.setMessageFactory(saajSoapMessageFactory()); + webServiceTemplate.setMarshaller(marshaller()); + webServiceTemplate.setUnmarshaller(unmarshaller()); + webServiceTemplate.setMessageSender(new HttpComponentsMessageSender()); + webServiceTemplate.setInterceptors(interceptors()); + return webServiceTemplate; + } + + private ClientInterceptor[] interceptors() { + List clientInterceptors = new ArrayList<>(); + clientInterceptors.add(new SoapAPILogIntercepter()); + return clientInterceptors.toArray(new ClientInterceptor[clientInterceptors.size()]); + } + + @Bean + public SaajSoapMessageFactory saajSoapMessageFactory() { + SaajSoapMessageFactory factory = new SaajSoapMessageFactory(); + factory.setSoapVersion(SoapVersion.SOAP_11); + return factory; + } + + @Bean + @Named(value = "marshaller") + public Jaxb2Marshaller marshaller() { + Jaxb2Marshaller marshaller = new Jaxb2Marshaller(); + marshaller.setBeanClassLoader(ClassLoader.getSystemClassLoader()); + marshaller.setPackagesToScan(new String[]{"com.docus.soap.api.request"}); + return marshaller; + } + + @Bean + @Named(value = "unmarshaller") + public Jaxb2Marshaller unmarshaller() { + Jaxb2Marshaller unmarshaller = new Jaxb2Marshaller(); + unmarshaller.setBeanClassLoader(ClassLoader.getSystemClassLoader()); + unmarshaller.setPackagesToScan(new String[]{"com.docus.soap.api.response"}); + return unmarshaller; + } + + @Bean + public SoapAPIMessageGenerator soapAPIMessageGenerator() { + SoapAPIMessageGenerator soapApiMessageGenerator = new SoapAPIMessageGenerator(); + soapApiMessageGenerator.setMarshaller(marshaller()); + return soapApiMessageGenerator; + } + + @Bean + public SoapAPIResponseExtractor soapAPIResponseExtractor() { + SoapAPIResponseExtractor soapApiResponseExtractor = new SoapAPIResponseExtractor(); + soapApiResponseExtractor.setUnmarshaller(unmarshaller()); + return soapApiResponseExtractor; + } + + @Bean + public SoapAPIClient soapApiClient() { + SoapAPIClient soapAPIClient = new SoapAPIClient(); + soapAPIClient.setWebServiceTemplate(webServiceTemplate()); + soapAPIClient.setMessageGenerator(soapAPIMessageGenerator()); + soapAPIClient.setResponseExtractor(soapAPIResponseExtractor()); + return soapAPIClient; + } + + @Bean + public ComplaintAPIService complaintApiService() { + ComplaintAPIService complaintApiService = new ComplaintAPIService(); + complaintApiService.setWebServiceClient(soapApiClient()); + return complaintApiService; + } + +} diff --git a/src/main/java/com/docus/soap/api/SoapAPILogIntercepter.java b/src/main/java/com/docus/soap/api/SoapAPILogIntercepter.java new file mode 100644 index 0000000..4e9ab47 --- /dev/null +++ b/src/main/java/com/docus/soap/api/SoapAPILogIntercepter.java @@ -0,0 +1,41 @@ +package com.docus.soap.api; + +import com.docus.soap.api.util.XmlUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.ws.WebServiceMessage; +import org.springframework.ws.client.WebServiceClientException; +import org.springframework.ws.client.support.interceptor.ClientInterceptor; +import org.springframework.ws.context.MessageContext; +import org.springframework.ws.soap.SoapMessage; + +public class SoapAPILogIntercepter implements ClientInterceptor { + + private static Logger logger = LoggerFactory.getLogger(SoapAPILogIntercepter.class); + + @Override + public boolean handleRequest(MessageContext messageContext) throws WebServiceClientException { + WebServiceMessage request = messageContext.getRequest(); + SoapMessage soapMessage = (SoapMessage) request; + logger.debug("soap-action:{}", soapMessage.getSoapAction()); + logger.debug("soap-request:\n{}", XmlUtils.pretty(soapMessage.getDocument())); + return true; + } + + @Override + public boolean handleResponse(MessageContext messageContext) throws WebServiceClientException { + return true; + } + + @Override + public boolean handleFault(MessageContext messageContext) throws WebServiceClientException { + return true; + } + + @Override + public void afterCompletion(MessageContext messageContext, Exception ex) throws WebServiceClientException { + WebServiceMessage request = messageContext.getResponse(); + SoapMessage soapMessage = (SoapMessage) request; + logger.debug("response:\n{}", XmlUtils.pretty(soapMessage.getDocument())); + } +} diff --git a/src/main/java/com/docus/soap/api/SoapAPIMessageGenerator.java b/src/main/java/com/docus/soap/api/SoapAPIMessageGenerator.java new file mode 100644 index 0000000..c1565d6 --- /dev/null +++ b/src/main/java/com/docus/soap/api/SoapAPIMessageGenerator.java @@ -0,0 +1,43 @@ +package com.docus.soap.api; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.oxm.Marshaller; +import org.springframework.ws.WebServiceMessage; +import org.springframework.ws.client.core.WebServiceMessageCallback; +import org.springframework.ws.soap.saaj.SaajSoapMessage; +import org.springframework.ws.support.MarshallingUtils; + +import javax.xml.transform.TransformerException; +import java.io.IOException; + +public class SoapAPIMessageGenerator { + private final Logger logger = LoggerFactory.getLogger(SoapAPIMessageGenerator.class); + private Marshaller marshaller; + + public WebServiceMessageCallback generateSoapMessage(final SoapMessageEnvelope envelope) { + return new WebServiceMessageCallback() { + @Override + public void doWithMessage(WebServiceMessage message) throws IOException, TransformerException { + try { + SaajSoapMessage soapMessage = (SaajSoapMessage) message; + marshallerRequestSoapBody(soapMessage, envelope.getSoapBody()); + soapMessage.setSoapAction(envelope.getSoapAction()); + } catch (Exception e) { + logger.error(e.getMessage(), e); + } + } + }; + } + + private void marshallerRequestSoapBody(SaajSoapMessage soapMessage, Object soapBody) throws IOException { + if (null == marshaller) { + throw new IllegalStateException("Not marshaller registered ,please check your configuration."); + } + MarshallingUtils.marshal(marshaller, soapBody, soapMessage); + } + + public void setMarshaller(Marshaller marshaller) { + this.marshaller = marshaller; + } +} diff --git a/src/main/java/com/docus/soap/api/SoapAPIResponseExtractor.java b/src/main/java/com/docus/soap/api/SoapAPIResponseExtractor.java new file mode 100644 index 0000000..d930dd1 --- /dev/null +++ b/src/main/java/com/docus/soap/api/SoapAPIResponseExtractor.java @@ -0,0 +1,39 @@ +package com.docus.soap.api; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.oxm.Unmarshaller; +import org.springframework.ws.WebServiceMessage; +import org.springframework.ws.client.core.WebServiceMessageExtractor; +import org.springframework.ws.soap.SoapFault; +import org.springframework.ws.soap.SoapMessage; +import org.springframework.ws.support.MarshallingUtils; + +import javax.xml.transform.TransformerException; +import java.io.IOException; + +public class SoapAPIResponseExtractor { + + private static Logger logger = LoggerFactory.getLogger(SoapAPIResponseExtractor.class); + private Unmarshaller unmarshaller; + + public WebServiceMessageExtractor generateExtractor() { + return new WebServiceMessageExtractor() { + @Override + public Object extractData(WebServiceMessage message) throws IOException, TransformerException { + SoapMessage soapMessage = (SoapMessage) message; + SoapFault fault = soapMessage.getSoapBody().getFault(); + if (null != fault) { + logger.info("{}", fault.getFaultStringOrReason()); + } else { + return MarshallingUtils.unmarshal(unmarshaller, message); + } + return null; + } + }; + } + + public void setUnmarshaller(Unmarshaller unmarshaller) { + this.unmarshaller = unmarshaller; + } +} diff --git a/src/main/java/com/docus/soap/api/SoapAPISettings.java b/src/main/java/com/docus/soap/api/SoapAPISettings.java new file mode 100644 index 0000000..dd190ac --- /dev/null +++ b/src/main/java/com/docus/soap/api/SoapAPISettings.java @@ -0,0 +1,49 @@ +package com.docus.soap.api; + +public class SoapAPISettings { + private String action; + private String testAction; + private String uri; + private String systemCode; + private String password; + + public String getAction() { + return action; + } + + public void setAction(String action) { + this.action = action; + } + + public String getTestAction() { + return testAction; + } + + public void setTestAction(String testAction) { + this.testAction = testAction; + } + + public String getUri() { + return uri; + } + + public void setUri(String uri) { + this.uri = uri; + } + + public String getSystemCode() { + return systemCode; + } + + public void setSystemCode(String systemCode) { + this.systemCode = systemCode; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } +} diff --git a/src/main/java/com/docus/soap/api/SoapMessageEnvelope.java b/src/main/java/com/docus/soap/api/SoapMessageEnvelope.java new file mode 100644 index 0000000..17893cc --- /dev/null +++ b/src/main/java/com/docus/soap/api/SoapMessageEnvelope.java @@ -0,0 +1,24 @@ +package com.docus.soap.api; + +public class SoapMessageEnvelope { + + private Object soapBody; + + private String soapAction; + + public Object getSoapBody() { + return soapBody; + } + + public void setSoapBody(Object soapBody) { + this.soapBody = soapBody; + } + + public String getSoapAction() { + return soapAction; + } + + public void setSoapAction(String soapAction) { + this.soapAction = soapAction; + } +} diff --git a/src/main/java/com/docus/soap/api/request/complain/ComplaintProcessStatus.java b/src/main/java/com/docus/soap/api/request/complain/ComplaintProcessStatus.java new file mode 100644 index 0000000..94c95e1 --- /dev/null +++ b/src/main/java/com/docus/soap/api/request/complain/ComplaintProcessStatus.java @@ -0,0 +1,53 @@ +package com.docus.soap.api.request.complain; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public enum ComplaintProcessStatus { + + /*受理中*/ + RECEIVED(0), + /*网友已给出方案*/ + BUYER_GIVE_SOLUTION(1), + /*商家已给出方案*/ + SELLER_GIVE_SOLUTION(2), + /*安排监理上门*/ + SUPERVISOR_CALL(3), + /*双方达成协议*/ + REACH_AGREEMENT(4), + /*协调未果*/ + CONSULTATION_NO_RESULT(5), + /*无理投诉*/ + UNJUSTIFIABLE_COMPLAINT(6), + /*处理完成*/ + FINISH(7), + /*节后处理*/ + PROCESS_AFTER_HOLIDAY(8); + + private static final Logger LOGGER = LoggerFactory.getLogger(ComplaintProcessStatus.class); + + private int value; + + ComplaintProcessStatus(int value) { + this.value = value; + } + + @JsonValue + public int getValue() { + return value; + } + + @JsonCreator + public static ComplaintProcessStatus fromValue(int code) { + for (ComplaintProcessStatus status : ComplaintProcessStatus.values()) { + if (status.value == code) { + return status; + } + } + LOGGER.warn(ComplaintProcessStatus.class.getName() + " can not find value :" + code); + return null; + } + +} diff --git a/src/main/java/com/docus/soap/api/request/complain/GetTableByIdDateDataRequest.java b/src/main/java/com/docus/soap/api/request/complain/GetTableByIdDateDataRequest.java new file mode 100644 index 0000000..0479dad --- /dev/null +++ b/src/main/java/com/docus/soap/api/request/complain/GetTableByIdDateDataRequest.java @@ -0,0 +1,72 @@ +package com.docus.soap.api.request.complain; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name = "GetTableByIdDateDataRequest") +@XmlAccessorType(XmlAccessType.FIELD) +public class GetTableByIdDateDataRequest { + + @XmlElement(name = "store_id") + private int storeId; + @XmlElement(name = "startDate") + private String startDate; + @XmlElement(name = "endDate") + private String endDate; + @XmlElement(name = "complaintGrade") + private Integer complaintGrade; + @XmlElement(name = "currentpage") + private int currentpage; + @XmlElement(name = "pagesize") + private int pagesize; + + public int getStoreId() { + return storeId; + } + + public void setStoreId(int storeId) { + this.storeId = storeId; + } + + public String getStartDate() { + return startDate; + } + + public void setStartDate(String startDate) { + this.startDate = startDate; + } + + public String getEndDate() { + return endDate; + } + + public void setEndDate(String endDate) { + this.endDate = endDate; + } + + public Integer getComplaintGrade() { + return complaintGrade; + } + + public void setComplaintGrade(Integer complaintGrade) { + this.complaintGrade = complaintGrade; + } + + public int getCurrentpage() { + return currentpage; + } + + public void setCurrentpage(int currentpage) { + this.currentpage = currentpage; + } + + public int getPagesize() { + return pagesize; + } + + public void setPagesize(int pagesize) { + this.pagesize = pagesize; + } +} diff --git a/src/main/java/com/docus/soap/api/request/complain/GetTableByIdDateRequest.java b/src/main/java/com/docus/soap/api/request/complain/GetTableByIdDateRequest.java new file mode 100644 index 0000000..d82ce9d --- /dev/null +++ b/src/main/java/com/docus/soap/api/request/complain/GetTableByIdDateRequest.java @@ -0,0 +1,22 @@ +package com.docus.soap.api.request.complain; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name = "SOF_GetQRCodeBySys", namespace = "http://webservice.qrcode.pki.jhsec.com.cn/") +@XmlAccessorType(XmlAccessType.FIELD) +public class GetTableByIdDateRequest { + + @XmlElement(name = "sys") + private String sys; + + public String getSys() { + return sys; + } + + public void setSys(String sys) { + this.sys = sys; + } +} diff --git a/src/main/java/com/docus/soap/api/response/complain/ComplaintListResult.java b/src/main/java/com/docus/soap/api/response/complain/ComplaintListResult.java new file mode 100644 index 0000000..7847dbf --- /dev/null +++ b/src/main/java/com/docus/soap/api/response/complain/ComplaintListResult.java @@ -0,0 +1,41 @@ +package com.docus.soap.api.response.complain; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import java.util.ArrayList; +import java.util.List; + + +@XmlAccessorType(XmlAccessType.FIELD) +public class ComplaintListResult { + + @XmlElement(name = "DataItem") + private final List dataItem = new ArrayList<>(); + + @XmlElement(name = "totalpage") + private int totalPage; + + @XmlElement(name = "totalrecord") + private int totalRecord; + + public List getDataItem() { + return dataItem; + } + + public int getTotalPage() { + return totalPage; + } + + public void setTotalPage(int totalPage) { + this.totalPage = totalPage; + } + + public int getTotalRecord() { + return totalRecord; + } + + public void setTotalRecord(int totalRecord) { + this.totalRecord = totalRecord; + } +} diff --git a/src/main/java/com/docus/soap/api/response/complain/DataItem.java b/src/main/java/com/docus/soap/api/response/complain/DataItem.java new file mode 100644 index 0000000..a0adc6c --- /dev/null +++ b/src/main/java/com/docus/soap/api/response/complain/DataItem.java @@ -0,0 +1,28 @@ +package com.docus.soap.api.response.complain; + +import lombok.Data; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import java.io.Serializable; + +@Data +@XmlAccessorType(XmlAccessType.FIELD) +public class DataItem implements Serializable { + + private static final long serialVersionUID = 2657976429770220410L; + @XmlElement(name = "qrCodeImg") + private String qrCodeImg; + + @XmlElement(name = "qrCode") + private String qrCode; + + @XmlElement(name = "resultCode") + private String resultCode; + + @XmlElement(name = "resultMsg") + private String resultMsg; + + +} diff --git a/src/main/java/com/docus/soap/api/response/complain/GetComplaintListExResponse.java b/src/main/java/com/docus/soap/api/response/complain/GetComplaintListExResponse.java new file mode 100644 index 0000000..3edad76 --- /dev/null +++ b/src/main/java/com/docus/soap/api/response/complain/GetComplaintListExResponse.java @@ -0,0 +1,22 @@ +package com.docus.soap.api.response.complain; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name = "SOF_GetQRCodeBySysResponse", namespace = "http://webservice.qrcode.pki.jhsec.com.cn/") +@XmlAccessorType(XmlAccessType.FIELD) +public class GetComplaintListExResponse { + + @XmlElement(name = "return") + private String result; + + public String getResult() { + return result; + } + + public void setResult(String result) { + this.result = result; + } +} diff --git a/src/main/java/com/docus/soap/api/response/complain/GetComplaintListResponse.java b/src/main/java/com/docus/soap/api/response/complain/GetComplaintListResponse.java new file mode 100644 index 0000000..a2fa531 --- /dev/null +++ b/src/main/java/com/docus/soap/api/response/complain/GetComplaintListResponse.java @@ -0,0 +1,22 @@ +package com.docus.soap.api.response.complain; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name = "GetComplaintListResponse") +@XmlAccessorType(XmlAccessType.FIELD) +public class GetComplaintListResponse { + + @XmlElement(name = "GetComplaintListResult") + private String complaintListResult; + + public String getComplaintListResult() { + return complaintListResult; + } + + public void setComplaintListResult(String complaintListResult) { + this.complaintListResult = complaintListResult; + } +} diff --git a/src/main/java/com/docus/soap/api/response/complain/GetTableByIdDateResponse.java b/src/main/java/com/docus/soap/api/response/complain/GetTableByIdDateResponse.java new file mode 100644 index 0000000..1391a0d --- /dev/null +++ b/src/main/java/com/docus/soap/api/response/complain/GetTableByIdDateResponse.java @@ -0,0 +1,22 @@ +package com.docus.soap.api.response.complain; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name = "GetTableByIdDateResponse") +@XmlAccessorType(XmlAccessType.FIELD) +public class GetTableByIdDateResponse { + + @XmlElement(name = "GetTableByIdDateResult") + private String result; + + public String getResult() { + return result; + } + + public void setResult(String result) { + this.result = result; + } +} diff --git a/src/main/java/com/docus/soap/api/response/complain/GetTableByIdDateResult.java b/src/main/java/com/docus/soap/api/response/complain/GetTableByIdDateResult.java new file mode 100644 index 0000000..07b3956 --- /dev/null +++ b/src/main/java/com/docus/soap/api/response/complain/GetTableByIdDateResult.java @@ -0,0 +1,29 @@ +package com.docus.soap.api.response.complain; + +import lombok.Data; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; +import java.util.ArrayList; +import java.util.List; + +@Data +@XmlAccessorType(XmlAccessType.FIELD) +public class GetTableByIdDateResult { + + @XmlElementWrapper + @XmlElement(name = "data") + private final List results = new ArrayList<>(); + + @XmlElement(name = "msg") + private String msg; + + @XmlElement(name = "code") + private int code; + + @XmlElement(name = "return") + private String res; + +} diff --git a/src/main/java/com/docus/soap/api/response/complain/package-info.java b/src/main/java/com/docus/soap/api/response/complain/package-info.java new file mode 100644 index 0000000..3dd27b7 --- /dev/null +++ b/src/main/java/com/docus/soap/api/response/complain/package-info.java @@ -0,0 +1,5 @@ +@XmlSchema(namespace = "http://webservice.qrcode.pki.jhsec.com.cn/", elementFormDefault = XmlNsForm.QUALIFIED) +package com.docus.soap.api.response.complain; + +import javax.xml.bind.annotation.XmlNsForm; +import javax.xml.bind.annotation.XmlSchema; diff --git a/src/main/java/com/docus/soap/api/service/ComplaintAPIService.java b/src/main/java/com/docus/soap/api/service/ComplaintAPIService.java new file mode 100644 index 0000000..ffb47fc --- /dev/null +++ b/src/main/java/com/docus/soap/api/service/ComplaintAPIService.java @@ -0,0 +1,21 @@ +package com.docus.soap.api.service; + +import com.docus.soap.api.SoapAPIClient; +import com.docus.soap.api.SoapAPISettings; +import com.docus.soap.api.request.complain.GetTableByIdDateRequest; +import com.docus.soap.api.response.complain.GetComplaintListExResponse; +import com.docus.soap.api.response.complain.GetTableByIdDateResult; + +public class ComplaintAPIService { + private SoapAPIClient soapAPIClient; + + public GetTableByIdDateResult getTableByIdDate(GetTableByIdDateRequest targetRequest, SoapAPISettings soapAPISettings) { + GetComplaintListExResponse o = (GetComplaintListExResponse) soapAPIClient.soapCall(targetRequest, soapAPISettings.getAction(), soapAPISettings.getUri()); + System.out.println("1"); + return null; + } + + public void setWebServiceClient(SoapAPIClient webServiceClient) { + this.soapAPIClient = webServiceClient; + } +} diff --git a/src/main/java/com/docus/soap/api/service/a.java b/src/main/java/com/docus/soap/api/service/a.java new file mode 100644 index 0000000..ccfacf2 --- /dev/null +++ b/src/main/java/com/docus/soap/api/service/a.java @@ -0,0 +1,4 @@ +package com.docus.soap.api.service; + +public class a { +} diff --git a/src/main/java/com/docus/soap/api/util/NullObjectMapperBuilder.java b/src/main/java/com/docus/soap/api/util/NullObjectMapperBuilder.java new file mode 100644 index 0000000..fdb85c5 --- /dev/null +++ b/src/main/java/com/docus/soap/api/util/NullObjectMapperBuilder.java @@ -0,0 +1,26 @@ +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; +import com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector; + +public final class NullObjectMapperBuilder { + + private final ObjectMapperBuilder builder; + + private NullObjectMapperBuilder() { + this.builder = ObjectMapperBuilder.defaultObjectMapper(); + AnnotationIntrospector primary = new JacksonAnnotationIntrospector(); + AnnotationIntrospector secondary = new JaxbAnnotationIntrospector(TypeFactory.defaultInstance()); + this.builder.get().setAnnotationIntrospector(AnnotationIntrospector.pair(primary, secondary)); + this.builder.get().getSerializerProvider().setNullValueSerializer(NullSerializer.INSTANCE); + } + + private static final NullObjectMapperBuilder INSTANCE = new NullObjectMapperBuilder(); + + public static ObjectMapperBuilder get() { + return INSTANCE.builder; + } +} diff --git a/src/main/java/com/docus/soap/api/util/NullSerializer.java b/src/main/java/com/docus/soap/api/util/NullSerializer.java new file mode 100644 index 0000000..7b86f90 --- /dev/null +++ b/src/main/java/com/docus/soap/api/util/NullSerializer.java @@ -0,0 +1,36 @@ +package com.docus.soap.api.util; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JavaType; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatVisitorWrapper; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; + +import java.io.IOException; +import java.lang.reflect.Type; + +public final class NullSerializer extends StdSerializer { + + public static final NullSerializer INSTANCE = new NullSerializer(); + + private NullSerializer() { + super(Object.class); + } + + @Override + public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws IOException { + jgen.writeString(""); + } + + @Override + public JsonNode getSchema(SerializerProvider provider, Type typeHint) throws JsonMappingException { + return createSchemaNode("null"); + } + + @Override + public void acceptJsonFormatVisitor(JsonFormatVisitorWrapper visitor, JavaType typeHint) throws JsonMappingException { + visitor.expectNullFormat(typeHint); + } +} diff --git a/src/main/java/com/docus/soap/api/util/StringDateTimeAdapter.java b/src/main/java/com/docus/soap/api/util/StringDateTimeAdapter.java new file mode 100644 index 0000000..d5f749e --- /dev/null +++ b/src/main/java/com/docus/soap/api/util/StringDateTimeAdapter.java @@ -0,0 +1,34 @@ +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; + +public class StringDateTimeAdapter extends XmlAdapter { + + private static final String SIMPLE_ISO_FORMAT = "yyyy-MM-dd'T'HH:mm:ss"; + private static final String DATE_FORMAT_ISO_WITHOUT_TIMEZONE = "yyyy-MM-dd'T'HH:mm:ss.SSS"; + + @Override + public Date unmarshal(String v) throws Exception { + if (!StringUtils.hasText(v)) { + return null; + } + if (v.length() > SIMPLE_ISO_FORMAT.length()) { + return Convert.toDate(v, DATE_FORMAT_ISO_WITHOUT_TIMEZONE, null); + } else { + return Convert.toDate(v, SIMPLE_ISO_FORMAT, null); + } + } + + @Override + public String marshal(Date v) throws Exception { + if (v == null) { + return null; + } + return Convert.toString(v, SIMPLE_ISO_FORMAT); + } + +} diff --git a/src/main/java/com/docus/soap/api/util/XmlUtils.java b/src/main/java/com/docus/soap/api/util/XmlUtils.java new file mode 100644 index 0000000..9b889d5 --- /dev/null +++ b/src/main/java/com/docus/soap/api/util/XmlUtils.java @@ -0,0 +1,32 @@ +package com.docus.soap.api.util; + +import org.w3c.dom.Document; + +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Source; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import java.io.StringWriter; +import java.io.Writer; + +public final class XmlUtils { + + public static String pretty(Document xml) { + return pretty(new DOMSource(xml)); + } + + public static String pretty(Source source) { + try { + Transformer tf = TransformerFactory.newInstance().newTransformer(); + tf.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); + tf.setOutputProperty(OutputKeys.INDENT, "yes"); + Writer out = new StringWriter(); + tf.transform(source, new StreamResult(out)); + return out.toString(); + } catch (Exception e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..c0bc3f5 --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,3 @@ +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/main/resources/logback.xml b/src/main/resources/logback.xml new file mode 100644 index 0000000..9209420 --- /dev/null +++ b/src/main/resources/logback.xml @@ -0,0 +1,36 @@ + + + basicviewtaskcollect + + + + + [%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%contextName] [%thread] [%X{traceId}] %-5level %logger{36} - %msg%n + + + + + + + + [%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%C] [%t] [%X{traceId}] [%L] [%-5p] %m%n + utf-8 + + + + + ${log.path}%d.%i.log + + 500MB + + 30 + + + + + + + + + \ 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 new file mode 100644 index 0000000..2b63560 --- /dev/null +++ b/src/test/java/com/docus/soap/api/ComplaintAPIServiceTest.java @@ -0,0 +1,46 @@ +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.GetTableByIdDateResult; +import com.docus.soap.api.service.ComplaintAPIService; +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 javax.inject.Inject; + +@RunWith(SpringRunner.class) +@SpringBootTest(classes = DocusSoapApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) +public class ComplaintAPIServiceTest { + + 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 ComplaintAPIService complaintAPIService; + + + @Test + public void getTableByIdDateTest() { + GetTableByIdDateRequest request = new GetTableByIdDateRequest(); + request.setSys("JSScan"); + GetTableByIdDateResult result = complaintAPIService.getTableByIdDate(request, getTableByIdDateSettings()); + AssertUtils.assertNotNull(result, "not null"); + } + + private SoapAPISettings getTableByIdDateSettings() { + SoapAPISettings soapAPISettings = new SoapAPISettings(); + soapAPISettings.setAction(soapComplaintAction); + soapAPISettings.setUri(soapComplaintUrl); + return soapAPISettings; + } +} diff --git a/src/test/resources/application.yml b/src/test/resources/application.yml new file mode 100644 index 0000000..c0bc3f5 --- /dev/null +++ b/src/test/resources/application.yml @@ -0,0 +1,3 @@ +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/resources/logback.xml b/src/test/resources/logback.xml new file mode 100644 index 0000000..9209420 --- /dev/null +++ b/src/test/resources/logback.xml @@ -0,0 +1,36 @@ + + + basicviewtaskcollect + + + + + [%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%contextName] [%thread] [%X{traceId}] %-5level %logger{36} - %msg%n + + + + + + + + [%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%C] [%t] [%X{traceId}] [%L] [%-5p] %m%n + utf-8 + + + + + ${log.path}%d.%i.log + + 500MB + + 30 + + + + + + + + + \ No newline at end of file