Используйте переменные для URI в WSDL-посредниках WSO2 - PullRequest
0 голосов
/ 14 апреля 2020

Я перефакторизовал проект wso2, и мне было интересно, как / могу ли я сделать следующее. Этот проект предназначен для отправки данных в SOAP Api. В каждой среде этот API предоставляет файл .wsdl, и URL-адрес и учетные данные - это единственное, что меняется от одной среды к другой. Таким образом, наиболее естественным является

  • создание тех, которые в Registry и
  • , загрузка в начале задания, например,
<propertyGroup>
  <property expression="get-property('registry', 'gov:/endpoints/sap_constructionSiteUser')" name="sap_constructionSiteUser" scope="default" type="STRING"/>
  <property expression="get-property('registry', 'gov:/endpoints/sap_constructionSitePassword')" name="sap_constructionSitePassword" scope="default" type="STRING"/>
  <property expression="get-property('registry', 'gov:/endpoints/sap_constructionSiteUrl')" name="uri.var.sap_constructionSiteUrl" scope="default" type="STRING"/>
</propertyGroup>

Но я не смог найти простой способ использовать этот uri.var.sap_constructionSiteUrl в определении конечной точки. Следующее не работает

<call>
  <endpoint>
     <wsdl optimize="mtom" uri="{uri.var.sap_constructionSiteUrl}" port="OUVERTURE_CHANTIER" service="OUVERTURE_CHANTIER" statistics="enable">
       <suspendOnFailure>
       <initialDuration>-1</initialDuration>
       <progressionFactor>-1</progressionFactor>
       <maximumDuration>0</maximumDuration>
       </suspendOnFailure>
       <markForSuspension>
       <retriesBeforeSuspension>0</retriesBeforeSuspension>
       </markForSuspension>
     </wsdl>
  </endpoint>
</call>

Похоже, uri= принимает только обычные значения. Есть ли способ, которым я мог бы сделать эту динамику c без записи всей конечной точки в Registry (суть в том, чтобы упростить задачу для клиентов)

[ Environment ]

  • wso2ei 6.5.0

=================== EDIT == ======================

Я только что создал шаблон:

<template name="crm4sap-constructionSiteTemplate" xmlns="http://ws.apache.org/ns/synapse">
    <axis2ns488:parameter name="port" xmlns:axis2ns488="http://ws.apache.org/ns/synapse"/>
    <axis2ns489:parameter name="service" xmlns:axis2ns489="http://ws.apache.org/ns/synapse"/>
    <axis2ns490:parameter name="uri" xmlns:axis2ns490="http://ws.apache.org/ns/synapse"/>
    <endpoint name="$name">
        <wsdl port="$port" service="$service" uri="$uri">
            <suspendOnFailure>
                <initialDuration>-1</initialDuration>
                <progressionFactor>1.0</progressionFactor>
            </suspendOnFailure>
            <markForSuspension>
                <retriesBeforeSuspension>0</retriesBeforeSuspension>
            </markForSuspension>
        </wsdl>
    </endpoint>
</template>

И я вызываю его с

<call>
  <endpoint name="constructionSiteEndpoint" template="crm4sap-constructionSiteTemplate">
    <axis2ns468:parameter name="port" value="OUVERTURE_CHANTIER" xmlns:axis2ns468="http://ws.apache.org/ns/synapse"/>
    <axis2ns469:parameter name="service" value="OUVERTURE_CHANTIER" xmlns:axis2ns469="http://ws.apache.org/ns/synapse"/>
    <axis2ns469:parameter name="uri" value="{$ctx:sap_constructionSiteUrl}" xmlns:axis2ns469="http://ws.apache.org/ns/synapse"/>
  </endpoint>
</call>

Замена переменных, кажется, не происходит:

[2020-04-15 12:30:54,032] []  WARN - TemplateEndpointFactory Could not read the WSDL endpoint {$ctx:sap_constructionSiteUrl}
java.net.MalformedURLException: no protocol: {$ctx:sap_constructionSiteUrl}
        at java.net.URL.<init>(URL.java:600)
        at java.net.URL.<init>(URL.java:497)
        at java.net.URL.<init>(URL.java:446)

Похоже, общая проблема

1 Ответ

0 голосов
/ 15 апреля 2020

Вы можете попробовать шаблонизировать эту конечную точку, а затем вызвать шаблон с параметрами. Вы можете передать динамические значения c в шаблон во время выполнения. https://docs.wso2.com/display/EI650/Endpoint+Template

...