lizw 3 yıl önce
ebeveyn
işleme
9c30a672ea

+ 94 - 0
soap-gateway/src/main/java/com/galaxis/soap/utils/InMemoryURLFactory.java

@@ -0,0 +1,94 @@
+package com.galaxis.soap.utils;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.net.URLStreamHandler;
+import java.nio.charset.StandardCharsets;
+import java.util.Map;
+import java.util.WeakHashMap;
+
+/**
+ * 作者:lizw <br/>
+ * 创建时间:2022/03/17 20:02 <br/>
+ */
+public class InMemoryURLFactory {
+    private final Map<URL, byte[]> contents = new WeakHashMap<>();
+    private final URLStreamHandler handler = new InMemoryStreamHandler();
+
+    private static InMemoryURLFactory instance = null;
+
+    public static synchronized InMemoryURLFactory getInstance() {
+        if (instance == null)
+            instance = new InMemoryURLFactory();
+        return instance;
+    }
+
+    private InMemoryURLFactory() {
+
+    }
+
+    public URL build(String path, String data) {
+        return build(path, data.getBytes(StandardCharsets.UTF_8));
+    }
+
+    public URL build(String path, byte[] data) {
+        try {
+            URL url = new URL("memory", "", -1, path, handler);
+            contents.put(url, data);
+            return url;
+        } catch (MalformedURLException ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+
+    private class InMemoryStreamHandler extends URLStreamHandler {
+
+        @Override
+        protected URLConnection openConnection(URL u) throws IOException {
+            if (!u.getProtocol().equals("memory")) {
+                throw new IOException("Cannot handle protocol: " + u.getProtocol());
+            }
+            return new URLConnection(u) {
+
+                private byte[] data = null;
+
+                @Override
+                public void connect() throws IOException {
+                    initDataIfNeeded();
+                    checkDataAvailability();
+                    // Protected field from superclass
+                    connected = true;
+                }
+
+                @Override
+                public long getContentLengthLong() {
+                    initDataIfNeeded();
+                    if (data == null)
+                        return 0;
+                    return data.length;
+                }
+
+                @Override
+                public InputStream getInputStream() throws IOException {
+                    initDataIfNeeded();
+                    checkDataAvailability();
+                    return new ByteArrayInputStream(data);
+                }
+
+                private void initDataIfNeeded() {
+                    if (data == null)
+                        data = contents.get(u);
+                }
+
+                private void checkDataAvailability() throws IOException {
+                    if (data == null)
+                        throw new IOException("In-memory data cannot be found for: " + u.getPath());
+                }
+            };
+        }
+    }
+}

+ 14 - 1
soap-gateway/src/main/java/com/galaxis/soap/wms/WMSServiceImpl.java

@@ -3,13 +3,18 @@ package com.galaxis.soap.wms;
 import com.galaxis.soap.wms.obj.*;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.util.Assert;
+import org.springframework.util.ResourceUtils;
 
 import javax.jws.WebService;
 import javax.xml.namespace.QName;
 import javax.xml.ws.Service;
+import java.io.File;
 import java.net.URL;
+import java.nio.charset.StandardCharsets;
 import java.util.*;
 import java.util.concurrent.*;
 
@@ -62,15 +67,23 @@ public class WMSServiceImpl implements WMSService {
 
     @SneakyThrows
     public WMSServiceImpl() {
+        final String wsdl = FileUtils.readFileToString(ResourceUtils.getFile("classpath:WMSService.xml"), StandardCharsets.UTF_8);
+        final String usrHome = System.getProperty("user.home");
+
         for (Map.Entry<String, String> entry : WMS_MAPPING.entrySet()) {
             String bwkey = entry.getKey();
             String host = entry.getValue();
             if (StringUtils.isBlank(host)) {
                 continue;
             }
-            URL url = new URL(host + API + "?wsdl");
+            // URL url = new URL(host + API + "?wsdl");
+            String location = host + API;
+            File file = new File(FilenameUtils.concat(usrHome, bwkey + ".wsdl.xml"));
+            FileUtils.writeStringToFile(file, StringUtils.replace(wsdl, "#{__location}", location), StandardCharsets.UTF_8);
+            URL url = file.toURI().toURL();
             QName qName = new QName("http://service.jztd.com", "WMSService");
             Service service = Service.create(url, qName);
+            service.setExecutor(EXECUTOR);
             WMSService wmsService = service.getPort(WMSService.class);
             SERVICE_MAPPING.put(bwkey, wmsService);
         }

+ 690 - 0
soap-gateway/src/main/resources/WMSService.xml

@@ -0,0 +1,690 @@
+<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://service.jztd.com" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="WMSService" targetNamespace="http://service.jztd.com">
+  <wsdl:types>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://service.jztd.com" elementFormDefault="unqualified" targetNamespace="http://service.jztd.com" version="1.0">
+
+  <xs:element name="MT_KUNNR_IN_WMS01" type="tns:MT_KUNNR_IN_WMS01"/>
+
+  <xs:element name="MT_KUNNR_IN_WMS01Response" type="tns:MT_KUNNR_IN_WMS01Response"/>
+
+  <xs:element name="MT_KUNNR_IN_WMS02" type="tns:MT_KUNNR_IN_WMS02"/>
+
+  <xs:element name="MT_KUNNR_IN_WMS02Response" type="tns:MT_KUNNR_IN_WMS02Response"/>
+
+  <xs:element name="MT_KUNNR_IN_WMS03" type="tns:MT_KUNNR_IN_WMS03"/>
+
+  <xs:element name="MT_KUNNR_IN_WMS03Response" type="tns:MT_KUNNR_IN_WMS03Response"/>
+
+  <xs:element name="MT_KUNNR_IN_WMS04" type="tns:MT_KUNNR_IN_WMS04"/>
+
+  <xs:element name="MT_KUNNR_IN_WMS04Response" type="tns:MT_KUNNR_IN_WMS04Response"/>
+
+  <xs:element name="MT_KUNNR_IN_WMS06" type="tns:MT_KUNNR_IN_WMS06"/>
+
+  <xs:element name="MT_KUNNR_IN_WMS06Response" type="tns:MT_KUNNR_IN_WMS06Response"/>
+
+  <xs:element name="MT_KUNNR_IN_WMS08" type="tns:MT_KUNNR_IN_WMS08"/>
+
+  <xs:element name="MT_KUNNR_IN_WMS08Response" type="tns:MT_KUNNR_IN_WMS08Response"/>
+
+  <xs:element name="MT_KUNNR_IN_WMS09" type="tns:MT_KUNNR_IN_WMS09"/>
+
+  <xs:element name="MT_KUNNR_IN_WMS09Response" type="tns:MT_KUNNR_IN_WMS09Response"/>
+
+  <xs:element name="MT_KUNNR_IN_WMS10_2" type="tns:MT_KUNNR_IN_WMS10_2"/>
+
+  <xs:element name="MT_KUNNR_IN_WMS10_2Response" type="tns:MT_KUNNR_IN_WMS10_2Response"/>
+
+  <xs:element name="MT_KUNNR_IN_WMS14" type="tns:MT_KUNNR_IN_WMS14"/>
+
+  <xs:element name="MT_KUNNR_IN_WMS14Response" type="tns:MT_KUNNR_IN_WMS14Response"/>
+
+  <xs:complexType name="MT_KUNNR_IN_WMS01">
+    <xs:sequence>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="arg0" type="tns:dtKUNNRIN01"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="dtKUNNRIN01">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="BEZEI" type="xs:string"/>
+      <xs:element minOccurs="0" name="BREIT" type="xs:string"/>
+      <xs:element minOccurs="0" name="BRGEW" type="xs:string"/>
+      <xs:element minOccurs="0" name="BUKRS" type="xs:string"/>
+      <xs:element minOccurs="0" name="BWKEY" type="xs:string"/>
+      <xs:element minOccurs="0" name="CONFD" type="xs:string"/>
+      <xs:element minOccurs="0" name="EAN11_CAR" type="xs:string"/>
+      <xs:element minOccurs="0" name="EAN11_EA" type="xs:string"/>
+      <xs:element minOccurs="0" name="EAN11_PCS" type="xs:string"/>
+      <xs:element minOccurs="0" name="EKGRP" type="xs:string"/>
+      <xs:element minOccurs="0" name="GROES" type="xs:string"/>
+      <xs:element minOccurs="0" name="HOEHE" type="xs:string"/>
+      <xs:element minOccurs="0" name="LAENG" type="xs:string"/>
+      <xs:element minOccurs="0" name="LANDX" type="xs:string"/>
+      <xs:element minOccurs="0" name="MAGRV" type="xs:string"/>
+      <xs:element minOccurs="0" name="MAKTX" type="xs:string"/>
+      <xs:element minOccurs="0" name="MATNR" type="xs:string"/>
+      <xs:element minOccurs="0" name="MEINS" type="xs:string"/>
+      <xs:element minOccurs="0" name="MHDHB" type="xs:string"/>
+      <xs:element minOccurs="0" name="MMSTA" type="xs:string"/>
+      <xs:element minOccurs="0" name="MSEHT_CAR" type="xs:string"/>
+      <xs:element minOccurs="0" name="MSEHT_PCS" type="xs:string"/>
+      <xs:element minOccurs="0" name="MTART" type="xs:string"/>
+      <xs:element minOccurs="0" name="NAME1" type="xs:string"/>
+      <xs:element minOccurs="0" name="NAME1_CYR" type="xs:string"/>
+      <xs:element minOccurs="0" name="NORMT" type="xs:string"/>
+      <xs:element minOccurs="0" name="RAUBE" type="xs:string"/>
+      <xs:element minOccurs="0" name="UMREZ_CAR" type="xs:string"/>
+      <xs:element minOccurs="0" name="UMREZ_PCS" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZIS_FC" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZIS_GZYP" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZIS_JKYP" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZIS_YP" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZIS_YS" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZIS_ZDYH" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZNEWS" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZOUNIT_MIN" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZPLI" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZPRESX" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZPROCESS" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZSUPCODE" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZUNIT_GTAX" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZZISDWPZ" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZZSRYS" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="MT_KUNNR_IN_WMS01Response">
+    <xs:sequence>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="return" type="tns:dtKUNNRINRT01"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="dtKUNNRINRT01">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="BUKRS" type="xs:string"/>
+      <xs:element minOccurs="0" name="BWKEY" type="xs:string"/>
+      <xs:element minOccurs="0" name="MATNR" type="xs:string"/>
+      <xs:element minOccurs="0" name="MSGTX" type="xs:string"/>
+      <xs:element minOccurs="0" name="MSGTY" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="MT_KUNNR_IN_WMS10_2">
+    <xs:sequence>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="arg0" type="tns:dtKUNNRIN102"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="dtKUNNRIN102">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="BWKEY" type="xs:string"/>
+      <xs:element minOccurs="0" name="MESSAGE" type="xs:string"/>
+      <xs:element minOccurs="0" name="STATUS" type="xs:string"/>
+      <xs:element minOccurs="0" name="VBELN" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZWMS_NO" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="MT_KUNNR_IN_WMS10_2Response">
+    <xs:sequence>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="return" type="tns:dtKUNNRINRT102"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="dtKUNNRINRT102">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="MSGTX" type="xs:string"/>
+      <xs:element minOccurs="0" name="MSGTY" type="xs:string"/>
+      <xs:element minOccurs="0" name="VBELN" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZWMS_NO" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="MT_KUNNR_IN_WMS04">
+    <xs:sequence>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="arg0" type="tns:dtKUNNRIN04"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="dtKUNNRIN04">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="BUKRS" type="xs:string"/>
+      <xs:element minOccurs="0" name="BWKEY" type="xs:string"/>
+      <xs:element minOccurs="0" name="EBELN" type="xs:string"/>
+      <xs:element minOccurs="0" name="EKNAM" type="xs:string"/>
+      <xs:element minOccurs="0" name="IS_DCSH" type="xs:string"/>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="items" nillable="true" type="tns:dtKUNNRIN04ITEM"/>
+      <xs:element minOccurs="0" name="LIFNR" type="xs:string"/>
+      <xs:element minOccurs="0" name="TELF1" type="xs:string"/>
+      <xs:element minOccurs="0" name="VERKF" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZAPPR_DAT" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZBUSI_TYP" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZSTOR_TYP" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZZCYDW" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZZCYFS" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZZFYDD" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZZYSFS" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="dtKUNNRIN04ITEM">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="CHARG" type="xs:string"/>
+      <xs:element minOccurs="0" name="EBELP" type="xs:string"/>
+      <xs:element minOccurs="0" name="EINDT" type="xs:string"/>
+      <xs:element minOccurs="0" name="LGORT" type="xs:string"/>
+      <xs:element minOccurs="0" name="MATNR" type="xs:string"/>
+      <xs:element minOccurs="0" name="MEINS" type="xs:string"/>
+      <xs:element minOccurs="0" name="MENGE" type="xs:string"/>
+      <xs:element minOccurs="0" name="NETPR" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="MT_KUNNR_IN_WMS04Response">
+    <xs:sequence>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="return" type="tns:dtKUNNRINRT04"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="dtKUNNRINRT04">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="EBELN" type="xs:string"/>
+      <xs:element minOccurs="0" name="MSGTX" type="xs:string"/>
+      <xs:element minOccurs="0" name="MSGTY" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="MT_KUNNR_IN_WMS02">
+    <xs:sequence>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="arg0" type="tns:dtKUNNRIN02"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="dtKUNNRIN02">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="BUKRS" type="xs:string"/>
+      <xs:element minOccurs="0" name="BWKEY" type="xs:string"/>
+      <xs:element minOccurs="0" name="LEIXING" type="xs:string"/>
+      <xs:element minOccurs="0" name="LIFNR" type="xs:string"/>
+      <xs:element minOccurs="0" name="NAME1" type="xs:string"/>
+      <xs:element minOccurs="0" name="POST_CODE1" type="xs:string"/>
+      <xs:element minOccurs="0" name="SORT1" type="xs:string"/>
+      <xs:element minOccurs="0" name="SORT2" type="xs:string"/>
+      <xs:element minOccurs="0" name="STREET" type="xs:string"/>
+      <xs:element minOccurs="0" name="TELF1" type="xs:string"/>
+      <xs:element minOccurs="0" name="VERKF" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="MT_KUNNR_IN_WMS02Response">
+    <xs:sequence>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="return" type="tns:dtKUNNRINRT02"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="dtKUNNRINRT02">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="BUKRS" type="xs:string"/>
+      <xs:element minOccurs="0" name="BWKEY" type="xs:string"/>
+      <xs:element minOccurs="0" name="LIFNR" type="xs:string"/>
+      <xs:element minOccurs="0" name="MSGTX" type="xs:string"/>
+      <xs:element minOccurs="0" name="MSGTY" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="MT_KUNNR_IN_WMS03">
+    <xs:sequence>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="arg0" type="tns:dtKUNNRIN03"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="dtKUNNRIN03">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="BUKRS" type="xs:string"/>
+      <xs:element minOccurs="0" name="BWKEY" type="xs:string"/>
+      <xs:element minOccurs="0" name="KUNNR" type="xs:string"/>
+      <xs:element minOccurs="0" name="LEIXING" type="xs:string"/>
+      <xs:element minOccurs="0" name="NAME1" type="xs:string"/>
+      <xs:element minOccurs="0" name="POST_CODE1" type="xs:string"/>
+      <xs:element minOccurs="0" name="SNAME" type="xs:string"/>
+      <xs:element minOccurs="0" name="SORT1" type="xs:string"/>
+      <xs:element minOccurs="0" name="SORT2" type="xs:string"/>
+      <xs:element minOccurs="0" name="TELF1" type="xs:string"/>
+      <xs:element minOccurs="0" name="YNSTORE" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZPICKER_K" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZSHDZ" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="MT_KUNNR_IN_WMS03Response">
+    <xs:sequence>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="return" type="tns:dtKUNNRINRT03"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="dtKUNNRINRT03">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="BUKRS" type="xs:string"/>
+      <xs:element minOccurs="0" name="BWKEY" type="xs:string"/>
+      <xs:element minOccurs="0" name="KUNNR" type="xs:string"/>
+      <xs:element minOccurs="0" name="MSGTX" type="xs:string"/>
+      <xs:element minOccurs="0" name="MSGTY" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="MT_KUNNR_IN_WMS14">
+    <xs:sequence>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="arg0" type="tns:dtKUNNRIN14"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="dtKUNNRIN14">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="BKTXT" type="xs:string"/>
+      <xs:element minOccurs="0" name="BLART" type="xs:string"/>
+      <xs:element minOccurs="0" name="BLDAT" type="xs:string"/>
+      <xs:element minOccurs="0" name="BUDAT" type="xs:string"/>
+      <xs:element minOccurs="0" name="BUKRS" type="xs:string"/>
+      <xs:element minOccurs="0" name="BWART" type="xs:string"/>
+      <xs:element minOccurs="0" name="BWKEY" type="xs:string"/>
+      <xs:element minOccurs="0" name="LGORT" type="xs:string"/>
+      <xs:element minOccurs="0" name="MATNR" type="xs:string"/>
+      <xs:element minOccurs="0" name="MBLNR" type="xs:string"/>
+      <xs:element minOccurs="0" name="MEINS" type="xs:string"/>
+      <xs:element minOccurs="0" name="MENGE" type="xs:string"/>
+      <xs:element minOccurs="0" name="MJAHR" type="xs:string"/>
+      <xs:element minOccurs="0" name="SGTXT" type="xs:string"/>
+      <xs:element minOccurs="0" name="UMWRK" type="xs:string"/>
+      <xs:element minOccurs="0" name="XBLNR" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZEILE" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZNAME1" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="MT_KUNNR_IN_WMS14Response">
+    <xs:sequence>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="return" type="tns:dtKUNNRINRT14"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="dtKUNNRINRT14">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="BWKEY" type="xs:string"/>
+      <xs:element minOccurs="0" name="MBLNR" type="xs:string"/>
+      <xs:element minOccurs="0" name="MJAHR" type="xs:string"/>
+      <xs:element minOccurs="0" name="MSGTX" type="xs:string"/>
+      <xs:element minOccurs="0" name="MSGTY" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="MT_KUNNR_IN_WMS08">
+    <xs:sequence>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="arg0" type="tns:dtKUNNRIN08"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="dtKUNNRIN08">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="BUKRS" type="xs:string"/>
+      <xs:element minOccurs="0" name="BWKEY" type="xs:string"/>
+      <xs:element minOccurs="0" name="ERDAT" type="xs:string"/>
+      <xs:element minOccurs="0" name="ERNAM" type="xs:string"/>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="items" nillable="true" type="tns:dtKUNNRIN08ITEM"/>
+      <xs:element minOccurs="0" name="KUNNR" type="xs:string"/>
+      <xs:element minOccurs="0" name="VBELN" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZBUSI_TYP" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZSTOR_TYP" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZZJHDH" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="dtKUNNRIN08ITEM">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="CHARG" type="xs:string"/>
+      <xs:element minOccurs="0" name="HSDAT" type="xs:string"/>
+      <xs:element minOccurs="0" name="LFIMG" type="xs:string"/>
+      <xs:element minOccurs="0" name="LGORT" type="xs:string"/>
+      <xs:element minOccurs="0" name="MATNR" type="xs:string"/>
+      <xs:element minOccurs="0" name="MEINS" type="xs:string"/>
+      <xs:element minOccurs="0" name="POSNR" type="xs:string"/>
+      <xs:element minOccurs="0" name="VFDAT" type="xs:string"/>
+      <xs:element minOccurs="0" name="WERKS" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZNAME1" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZRT_REAN" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="MT_KUNNR_IN_WMS08Response">
+    <xs:sequence>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="return" type="tns:dtKUNNRINRT08"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="dtKUNNRINRT08">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="MSGTX" type="xs:string"/>
+      <xs:element minOccurs="0" name="MSGTY" type="xs:string"/>
+      <xs:element minOccurs="0" name="VBELN" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="MT_KUNNR_IN_WMS09">
+    <xs:sequence>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="arg0" type="tns:dtKUNNRIN09"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="dtKUNNRIN09">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="BUKRS" type="xs:string"/>
+      <xs:element minOccurs="0" name="BWKEY" type="xs:string"/>
+      <xs:element minOccurs="0" name="ERDAT" type="xs:string"/>
+      <xs:element minOccurs="0" name="ERNAM" type="xs:string"/>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="items" nillable="true" type="tns:dtKUNNRIN09ITEM"/>
+      <xs:element minOccurs="0" name="KUNNR" type="xs:string"/>
+      <xs:element minOccurs="0" name="VBELN" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZBUSI_TYP" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZNOTE" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZPICKUP_WAY" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZSALE_TYP" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZZTHSQNO" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="dtKUNNRIN09ITEM">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="BRTWR" type="xs:string"/>
+      <xs:element minOccurs="0" name="CHARG" type="xs:string"/>
+      <xs:element minOccurs="0" name="LFIMG" type="xs:string"/>
+      <xs:element minOccurs="0" name="LGORT" type="xs:string"/>
+      <xs:element minOccurs="0" name="MATNR" type="xs:string"/>
+      <xs:element minOccurs="0" name="MEINS" type="xs:string"/>
+      <xs:element minOccurs="0" name="POSNR" type="xs:string"/>
+      <xs:element minOccurs="0" name="WERKS" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZPRICE_TAX" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="MT_KUNNR_IN_WMS09Response">
+    <xs:sequence>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="return" type="tns:dtKUNNRINRT09"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="dtKUNNRINRT09">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="MSGTX" type="xs:string"/>
+      <xs:element minOccurs="0" name="MSGTY" type="xs:string"/>
+      <xs:element minOccurs="0" name="VBELN" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="MT_KUNNR_IN_WMS06">
+    <xs:sequence>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="arg0" type="tns:dtKUNNRIN06"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="dtKUNNRIN06">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="BUKRS" type="xs:string"/>
+      <xs:element minOccurs="0" name="BWKEY" type="xs:string"/>
+      <xs:element minOccurs="0" name="EBELN" type="xs:string"/>
+      <xs:element minOccurs="0" name="EKNAM" type="xs:string"/>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="items" nillable="true" type="tns:dtKUNNRIN06ITEM"/>
+      <xs:element minOccurs="0" name="LIFNR" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZAPPR_DAT" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZBUSI_TYP" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZCATEG_RT" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZPICKUP_WAY" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZREASON_RT" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="dtKUNNRIN06ITEM">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="BRTWR" type="xs:string"/>
+      <xs:element minOccurs="0" name="CHARG" type="xs:string"/>
+      <xs:element minOccurs="0" name="EBELP" type="xs:string"/>
+      <xs:element minOccurs="0" name="LGORT" type="xs:string"/>
+      <xs:element minOccurs="0" name="MATNR" type="xs:string"/>
+      <xs:element minOccurs="0" name="MEINS" type="xs:string"/>
+      <xs:element minOccurs="0" name="MENGE" type="xs:string"/>
+      <xs:element minOccurs="0" name="ZPRICE_TAX" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="MT_KUNNR_IN_WMS06Response">
+    <xs:sequence>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="return" type="tns:dtKUNNRINRT06"/>
+    </xs:sequence>
+  </xs:complexType>
+
+  <xs:complexType name="dtKUNNRINRT06">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="EBELN" type="xs:string"/>
+      <xs:element minOccurs="0" name="MSGTX" type="xs:string"/>
+      <xs:element minOccurs="0" name="MSGTY" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+
+</xs:schema>
+  </wsdl:types>
+  <wsdl:message name="MT_KUNNR_IN_WMS14Response">
+    <wsdl:part element="tns:MT_KUNNR_IN_WMS14Response" name="parameters">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:message name="MT_KUNNR_IN_WMS06Response">
+    <wsdl:part element="tns:MT_KUNNR_IN_WMS06Response" name="parameters">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:message name="MT_KUNNR_IN_WMS01">
+    <wsdl:part element="tns:MT_KUNNR_IN_WMS01" name="parameters">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:message name="MT_KUNNR_IN_WMS10_2">
+    <wsdl:part element="tns:MT_KUNNR_IN_WMS10_2" name="parameters">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:message name="MT_KUNNR_IN_WMS03Response">
+    <wsdl:part element="tns:MT_KUNNR_IN_WMS03Response" name="parameters">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:message name="MT_KUNNR_IN_WMS04">
+    <wsdl:part element="tns:MT_KUNNR_IN_WMS04" name="parameters">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:message name="MT_KUNNR_IN_WMS08Response">
+    <wsdl:part element="tns:MT_KUNNR_IN_WMS08Response" name="parameters">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:message name="MT_KUNNR_IN_WMS04Response">
+    <wsdl:part element="tns:MT_KUNNR_IN_WMS04Response" name="parameters">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:message name="MT_KUNNR_IN_WMS02">
+    <wsdl:part element="tns:MT_KUNNR_IN_WMS02" name="parameters">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:message name="MT_KUNNR_IN_WMS03">
+    <wsdl:part element="tns:MT_KUNNR_IN_WMS03" name="parameters">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:message name="MT_KUNNR_IN_WMS14">
+    <wsdl:part element="tns:MT_KUNNR_IN_WMS14" name="parameters">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:message name="MT_KUNNR_IN_WMS09Response">
+    <wsdl:part element="tns:MT_KUNNR_IN_WMS09Response" name="parameters">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:message name="MT_KUNNR_IN_WMS01Response">
+    <wsdl:part element="tns:MT_KUNNR_IN_WMS01Response" name="parameters">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:message name="MT_KUNNR_IN_WMS08">
+    <wsdl:part element="tns:MT_KUNNR_IN_WMS08" name="parameters">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:message name="MT_KUNNR_IN_WMS09">
+    <wsdl:part element="tns:MT_KUNNR_IN_WMS09" name="parameters">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:message name="MT_KUNNR_IN_WMS06">
+    <wsdl:part element="tns:MT_KUNNR_IN_WMS06" name="parameters">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:message name="MT_KUNNR_IN_WMS02Response">
+    <wsdl:part element="tns:MT_KUNNR_IN_WMS02Response" name="parameters">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:message name="MT_KUNNR_IN_WMS10_2Response">
+    <wsdl:part element="tns:MT_KUNNR_IN_WMS10_2Response" name="parameters">
+    </wsdl:part>
+  </wsdl:message>
+  <wsdl:portType name="WMSService">
+    <wsdl:operation name="MT_KUNNR_IN_WMS01">
+      <wsdl:input message="tns:MT_KUNNR_IN_WMS01" name="MT_KUNNR_IN_WMS01">
+    </wsdl:input>
+      <wsdl:output message="tns:MT_KUNNR_IN_WMS01Response" name="MT_KUNNR_IN_WMS01Response">
+    </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="MT_KUNNR_IN_WMS10_2">
+      <wsdl:input message="tns:MT_KUNNR_IN_WMS10_2" name="MT_KUNNR_IN_WMS10_2">
+    </wsdl:input>
+      <wsdl:output message="tns:MT_KUNNR_IN_WMS10_2Response" name="MT_KUNNR_IN_WMS10_2Response">
+    </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="MT_KUNNR_IN_WMS04">
+      <wsdl:input message="tns:MT_KUNNR_IN_WMS04" name="MT_KUNNR_IN_WMS04">
+    </wsdl:input>
+      <wsdl:output message="tns:MT_KUNNR_IN_WMS04Response" name="MT_KUNNR_IN_WMS04Response">
+    </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="MT_KUNNR_IN_WMS02">
+      <wsdl:input message="tns:MT_KUNNR_IN_WMS02" name="MT_KUNNR_IN_WMS02">
+    </wsdl:input>
+      <wsdl:output message="tns:MT_KUNNR_IN_WMS02Response" name="MT_KUNNR_IN_WMS02Response">
+    </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="MT_KUNNR_IN_WMS03">
+      <wsdl:input message="tns:MT_KUNNR_IN_WMS03" name="MT_KUNNR_IN_WMS03">
+    </wsdl:input>
+      <wsdl:output message="tns:MT_KUNNR_IN_WMS03Response" name="MT_KUNNR_IN_WMS03Response">
+    </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="MT_KUNNR_IN_WMS14">
+      <wsdl:input message="tns:MT_KUNNR_IN_WMS14" name="MT_KUNNR_IN_WMS14">
+    </wsdl:input>
+      <wsdl:output message="tns:MT_KUNNR_IN_WMS14Response" name="MT_KUNNR_IN_WMS14Response">
+    </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="MT_KUNNR_IN_WMS08">
+      <wsdl:input message="tns:MT_KUNNR_IN_WMS08" name="MT_KUNNR_IN_WMS08">
+    </wsdl:input>
+      <wsdl:output message="tns:MT_KUNNR_IN_WMS08Response" name="MT_KUNNR_IN_WMS08Response">
+    </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="MT_KUNNR_IN_WMS09">
+      <wsdl:input message="tns:MT_KUNNR_IN_WMS09" name="MT_KUNNR_IN_WMS09">
+    </wsdl:input>
+      <wsdl:output message="tns:MT_KUNNR_IN_WMS09Response" name="MT_KUNNR_IN_WMS09Response">
+    </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="MT_KUNNR_IN_WMS06">
+      <wsdl:input message="tns:MT_KUNNR_IN_WMS06" name="MT_KUNNR_IN_WMS06">
+    </wsdl:input>
+      <wsdl:output message="tns:MT_KUNNR_IN_WMS06Response" name="MT_KUNNR_IN_WMS06Response">
+    </wsdl:output>
+    </wsdl:operation>
+  </wsdl:portType>
+  <wsdl:binding name="WMSServiceSoapBinding" type="tns:WMSService">
+    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
+    <wsdl:operation name="MT_KUNNR_IN_WMS01">
+      <soap:operation soapAction="wms01" style="document"/>
+      <wsdl:input name="MT_KUNNR_IN_WMS01">
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output name="MT_KUNNR_IN_WMS01Response">
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="MT_KUNNR_IN_WMS10_2">
+      <soap:operation soapAction="wms10_2" style="document"/>
+      <wsdl:input name="MT_KUNNR_IN_WMS10_2">
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output name="MT_KUNNR_IN_WMS10_2Response">
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="MT_KUNNR_IN_WMS04">
+      <soap:operation soapAction="wms04" style="document"/>
+      <wsdl:input name="MT_KUNNR_IN_WMS04">
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output name="MT_KUNNR_IN_WMS04Response">
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="MT_KUNNR_IN_WMS02">
+      <soap:operation soapAction="wms02" style="document"/>
+      <wsdl:input name="MT_KUNNR_IN_WMS02">
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output name="MT_KUNNR_IN_WMS02Response">
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="MT_KUNNR_IN_WMS03">
+      <soap:operation soapAction="wms03" style="document"/>
+      <wsdl:input name="MT_KUNNR_IN_WMS03">
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output name="MT_KUNNR_IN_WMS03Response">
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="MT_KUNNR_IN_WMS14">
+      <soap:operation soapAction="wms14" style="document"/>
+      <wsdl:input name="MT_KUNNR_IN_WMS14">
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output name="MT_KUNNR_IN_WMS14Response">
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="MT_KUNNR_IN_WMS08">
+      <soap:operation soapAction="wms08" style="document"/>
+      <wsdl:input name="MT_KUNNR_IN_WMS08">
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output name="MT_KUNNR_IN_WMS08Response">
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="MT_KUNNR_IN_WMS09">
+      <soap:operation soapAction="wms09" style="document"/>
+      <wsdl:input name="MT_KUNNR_IN_WMS09">
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output name="MT_KUNNR_IN_WMS09Response">
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+    <wsdl:operation name="MT_KUNNR_IN_WMS06">
+      <soap:operation soapAction="wms06" style="document"/>
+      <wsdl:input name="MT_KUNNR_IN_WMS06">
+        <soap:body use="literal"/>
+      </wsdl:input>
+      <wsdl:output name="MT_KUNNR_IN_WMS06Response">
+        <soap:body use="literal"/>
+      </wsdl:output>
+    </wsdl:operation>
+  </wsdl:binding>
+  <wsdl:service name="WMSService">
+    <wsdl:port binding="tns:WMSServiceSoapBinding" name="WMSServiceImplPort">
+      <soap:address location="#{__location}"/>
+    </wsdl:port>
+  </wsdl:service>
+</wsdl:definitions>

+ 25 - 0
soap-gateway/src/test/java/com/galaxis/soap/utils/InMemoryURLFactoryTest.java

@@ -0,0 +1,25 @@
+package com.galaxis.soap.utils;
+
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.IOUtils;
+import org.junit.jupiter.api.Test;
+
+import java.net.URL;
+
+/**
+ * 作者:lizw <br/>
+ * 创建时间:2022/03/17 20:11 <br/>
+ */
+@Slf4j
+public class InMemoryURLFactoryTest {
+
+    @SneakyThrows
+    @Test
+    public void t01() {
+        URL url = InMemoryURLFactory.getInstance().build("/D105?wsdl", "This is a test!");
+        byte[] data = IOUtils.toByteArray(url.openConnection().getInputStream());
+        // Prints out: This is a test!
+        System.out.println(new String(data));
+    }
+}