Как настроить службу контракта SOAP в Spring с разными пространствами имен? - PullRequest
0 голосов
/ 06 мая 2020

Я хочу обновить API, предоставляющий услуги SOAP. Он был написан на Java с использованием Spring и использует подход, основанный на контракте. После обновления приложения выяснилось, что некоторые клиенты отправляют запросы на основе более старых wsdls, которые используют другие пространства имен. Старое приложение может обрабатывать все эти запросы, а мое обновление - нет. В нем говорится, что нет конечных точек для SOAP запросов, которые не соответствуют строго wsdl, используемому приложением (старые и новые приложения используют один и тот же wsdl). Как я могу настроить службу SOAP с первым контрактом, которая принимает запросы с разными пространствами имен, но с одинаковой структурой?

Я думаю, что более старая версия API делает это с

class XTeeWsdlDefinition implements Wsdl11Definition, InitializingBean {...} 

, но у меня нет нового API для приема различных запросов SOAP, даже когда я использовал этот класс в

WebServiceConfig extends WsConfigurerAdapter { 
@Bean(name = "xtee")
    public XTeeWsdlDefinition xTeeWsdlDefinition(XsdSchema xRoadSchema) {
        XTeeWsdlDefinition xTeeWsdlDefinition = new XTeeWsdlDefinition();
        return xTeeWsdlDefinition;
}

Пример различных запросов:

<soapenv:Envelope 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xro="http://x-road.eu/xsd/xroad.xsd" 
xmlns:iden="http://x-road.eu/xsd/identifiers" 
xmlns:stat="http://stat-v6.x-road.eu">
   <soapenv:Header>
      <xro:userId>EE11111111111</xro:userId>
      <xro:protocolVersion>4.0</xro:protocolVersion>
      <xro:id>123456789</xro:id>
      <xro:service iden:objectType="SERVICE">
         <iden:xRoadInstance>ee-test</iden:xRoadInstance>
         <iden:memberClass>GOV</iden:memberClass>
         <iden:memberCode>70000332</iden:memberCode>
         <!--Optional:-->
         <iden:subsystemCode>estat</iden:subsystemCode>
         <iden:serviceCode>SubmitData</iden:serviceCode>
         <!--Optional:-->
         <iden:serviceVersion>v1</iden:serviceVersion>
      </xro:service>
      <xro:client iden:objectType="MEMBER">
         <iden:xRoadInstance>ee-test</iden:xRoadInstance>
         <iden:memberClass>GOV</iden:memberClass>
         <iden:memberCode>70000332</iden:memberCode>
         <!--Optional:-->
         <iden:subsystemCode>sa-client</iden:subsystemCode>
      </xro:client>
   </soapenv:Header>
   <soapenv:Body>
      <stat:SubmitDataRequest>
         <DataFile>cid:Report.xml</DataFile>
         <XSDValidationOnly>1</XSDValidationOnly>
      </stat:SubmitDataRequest>
   </soapenv:Body>
</soapenv:Envelope>

и

<soapenv:Envelope 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xtee="http://x-road.eu/xsd/xroad.xsd" 
xmlns:ident="http://x-road.eu/xsd/identifiers" 
xmlns:estat="http://producers.estat.xtee.riik.ee/producer/estat">
  <soapenv:Header>
    <xtee:service ident:objectType="SERVICE">
      <ident:xRoadInstance>ee-test</ident:xRoadInstance>
      <ident:memberClass>GOV</ident:memberClass>
      <ident:memberCode>70000332</ident:memberCode>
      <ident:subsystemCode>estat</ident:subsystemCode>
      <ident:serviceCode>SubmitData</ident:serviceCode>
      <ident:serviceVersion>v1</ident:serviceVersion>
    </xtee:service>
    <xtee:client ident:objectType="SUBSYSTEM">
      <ident:xRoadInstance>ee-test</ident:xRoadInstance>
      <ident:memberClass>GOV</ident:memberClass>
      <ident:memberCode>70000332</ident:memberCode>
      <ident:subsystemCode>sa-client</ident:subsystemCode>
    </xtee:client>
    <xtee:userId>EE11111111111</xtee:userId>
    <xtee:protocolVersion>4.0</xtee:protocolVersion>
    <xtee:id>34a545af-2bce-40b7-b20a-3c63650f622f</xtee:id>
  </soapenv:Header>
  <soapenv:Body>
    <estat:SubmitData>
      <DataFile>cid:Report.xml</DataFile>
      <XSDValidationOnly>0</XSDValidationOnly>
    </estat:SubmitData>
  </soapenv:Body>
</soapenv:Envelope>
...