Проблема обработки списка элементов в преобразовании BPEL 2.0 - PullRequest
0 голосов
/ 07 декабря 2018

Это разные версии моей рабочей среды:

Jdeveloper v 11.1.1.6.0

BPEL 2.0

Сервер Oracle SOA

У меня проблема при получении списка элементов на шаге преобразования BPEL.Это преобразование получает данные из полученного элемента SOAP (из входных данных предыдущего шага), и его цель состоит в том, чтобы сгенерировать новый элемент SOAP, используя его в качестве входных данных следующего шага, который связывается с другим веб-сервисом.

Это структура элемента SOAP, который принимается в преобразование:

<NameOfRequest  version="1.0"  lang="es">
<idConv>133</idConv>
<gTram>
    <ns2:tipo>TIPO1</ns2:tipo>
    <ns2:anyo>2018</ns2:anyo>
    <ns2:numero>1</ns2:numero>
</gTram>
<ns8:solicitud>
    <ns3:idSolicitud>2</ns3:idSolicitud>
</ns8:solicitud>
<ns8:solicitud>
    <ns3:idSolicitud>1</ns3:idSolicitud>
</ns8:solicitud>
</NameOfRequest>

Кроме того, следующая структура XSD следует за Запросом:

<xsd:complexType name="ComunicarAltaBdnsBySolicitudesRequestType_v1.0">
    <xsd:complexContent>
        <xsd:extension base="cm:RequestMessageBaseType_v1.0">
            <xsd:sequence>
                <xsd:element name="idConv" type="xsd:long" nillable="false"/>
                <xsd:element name="gTram" type="cgt:CodigoGrupoTramitacionType_v1.0" nillable="false" minOccurs="1"/>
                <xsd:element name="solicitud" type="cso:CodigoSolicitudType_v1.0" minOccurs="1" maxOccurs="unbounded"/>
            </xsd:sequence>
        </xsd:extension>
    </xsd:complexContent>
</xsd:complexType>

<xsd:complexType name="CodigoSolicitudType_v1.0">
        <xsd:sequence>
            <xsd:element name="idSolicitud" minOccurs="1" type="xsd:long"/>
        </xsd:sequence>
    </xsd:complexType>

Мне нужно скопировать все элементы, называемые solicitud , в другую структуру SOAP (для нового запроса после текущего преобразования).

Я пробовал разные процедуры на этапе преобразования (для каждого, copy, copyList, append и т. д.), но я не могу скопировать все повторения solicitud элементов.Я попытался даже скопировать содержимое в новую переменную, а затем присвоить эту переменную целевому списку.

Самый положительный результат, которого я достиг, - это скопировать только один из элементов solicitud в новыйSOAP-вызов ... но для моей цели этого недостаточно.

Есть идеи, как скопировать все элементы?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Я уверен, что используемый вами маппер предлагает аналогичное решение, но вот пример того, как я обычно отображаю файлы из одного места в другое, используя xslt.

<xsl:for-each select="randomPath/ns8:solicitud">
     <xsl:call-template name="exampleTemplateThatFilsYourValues"/>
</xsl:for-each>

<xsl:template name="exampleTemplateThatFilsYourValues">
      <xsl:for-each select="current()/ns:8:solicitud">
                <xsl:element name="targetNamespace:newElement">
                     <xsl:value-of select="current()"/>
                </xsl:element>
      </xsl:for-each>
</xsl:template>

Этот пример расширяемыйво многих отношениях, все из которых вы можете легко найти на: http://www.xsltfunctions.com/

сайте, который лично мне очень понравился, экспериментируя с функциями.Вам не обязательно использовать шаблон, вы можете просто использовать часть внутри второго для каждого шаблона внутри первого для каждого.Это бы сработало.Но поскольку xslts имеют тенденцию становиться больше, использование повторно используемых шаблонов может быть хорошей вещью.Особенно вы начинаете многократно использовать и импортировать большие xslts в нескольких проектах.

В любом случае, я надеюсь, что это поможет вам и удачи!

Приветствия, Джеспер

0 голосов
/ 19 декабря 2018

Я решил проблему, используя шаг Преобразование вместо шага Назначить.

Правильная процедура следующая:

  1. Вставкановое преобразование в процесс BPEL.

  2. Выберите вход (источники) и выход (цель) и создайте новый XSL-файл из правых кнопок (тот, который является зеленым +).

  3. Откройте новый XSL-файл и отобразите все элементы из источника (слева) и цели (справа).Это действие очень важно, если часть исходных данных или целевых данных не отображается, элементы не будут связаны, что приведет к неправильному отображению.

  4. Связать элементы изот источника до цели и выберите YES, если на экране появится сообщение автоматической карты.Это вставит элементы for-each в целевую часть, скопировав все элементы исходного списка в целевую.

Работа таким образом позволяет копировать элементы со списками, что неподдерживается с помощью операции Assing BPEL.

Надеюсь, это поможет!

...