Как назначить массив в BPEL-процессе - PullRequest
1 голос
/ 20 октября 2011

У меня есть простая строка в качестве ввода и после вызова веб-службы, которая добавляет строку в массив. Теперь я должен назначить массив для вывода (который я установил в виде массива строк в схеме). Предприятие Диспетчер выдает ошибку и говорит, что результат содержит несколько узлов для данного выражения XPath. Действие Assign отображается как ожидающее. Итак, в основном, как назначить массив или список выходной переменной, которая также установлена ​​как массив. wsdl Используемый файл:

<?xml version = '1.0' encoding = 'UTF-8'?>

<definitions
     name="ReturnTypeService"
     targetNamespace="http://examples2/"
     xmlns="http://schemas.xmlsoap.org/wsdl/"
     xmlns:tns="http://examples2/"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
     xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    >
    <types>
        <xsd:schema>
            <xsd:import namespace="http://examples2/" schemaLocation="http://localhost:7101/Examples2-Examples2-context-root/ReturnTypePort?xsd=1"/>
        </xsd:schema>
    </types>
    <message name="display">
        <part name="parameters" element="tns:display"/>
    </message>
    <message name="displayResponse">
        <part name="parameters" element="tns:displayResponse"/>
    </message>
    <portType name="ReturnType">
        <operation name="display">
            <input message="tns:display"/>
            <output name="displayResponse"
            message="tns:displayResponse"/>
        </operation>
    </portType>
    <binding name="ReturnTypePortBinding" type="tns:ReturnType">
        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
        <operation name="display">
            <soap:operation soapAction=""/>
            <input>
                <soap:body use="literal"/>
            </input>
            <output>
                <soap:body use="literal"/>
            </output>
        </operation>
    </binding>
    <service name="ReturnTypeService">
        <port name="ReturnTypePort" binding="tns:ReturnTypePortBinding">
            <soap:address location="http://localhost:7101/Examples2-Examples2-context-root/ReturnTypePort"/>
        </port>
    </service>
</definitions>

@ vanto Есть ли способ присвоить массив из входной переменной переменной invoke_input? Проблема в том, что в моем веб-сервисе есть несколько входов, поэтому я не могу скопировать элемент переноса во входной переменной в переменную переноса в переменной invoke .Скопируем фрагмент кода здесь:

<assign name="Assign1">
            <copy>
                <from variable="inputVariable" part="payload"
                      query="/ns2:process/ns2:dsaName"/>
                <to variable="Invoke1_processList_InputVariable"
                    part="parameters" query="/ns1:processList/dsaName"/>
            </copy>
            <copy>
                <from variable="inputVariable" part="payload"
                      query="/ns2:process/ns2:linesOfData"/>
                <to variable="Invoke1_processList_InputVariable"
                    part="parameters" query="/ns1:processList/linesOfData"/>
            </copy>
            <copy>
                <from variable="inputVariable" part="payload"
                      query="/ns2:process/ns2:description"/>
                <to variable="Invoke1_processList_InputVariable"
                    part="parameters" query="/ns1:processList/description"/>
            </copy>
            <copy>
                <from variable="inputVariable" part="payload"
                      query="/ns2:process/ns2:application"/>
                <to variable="Invoke1_processList_InputVariable"
                    part="parameters" query="/ns1:processList/application"/>
            </copy>
        </assign>

Проблема только в одном типе списка, все остальные имеют строковый тип. XML для этого:

<element name="process">
            <complexType>
                <sequence>
                     <element name="dsaName" type="string" minOccurs="0"/>
                    <element name="linesOfData" type="string" minOccurs="0" maxOccurs="unbounded"/>

                    <element name="description" type="string" minOccurs="0"/>
            </sequence>
    </complexType>
        </element>
    <element name="processResponse">
        <complexType>
            <sequence>
                <element name="result" type="string" minOccurs="0" maxOccurs="unbounded"/>
            </sequence>
        </complexType>
    </element>
</schema>

1 Ответ

1 голос
/ 20 октября 2011

Объекты from-spec и to-spec не должны выбирать более одного элемента или атрибута.В вашем случае кажется, что вы выбрали все элементы <return> в части вашей переменной (то есть элементы массива).Попробуйте скопировать элемент, который оборачивает элементы (то есть элемент ns1: displayResponse), и скопируйте этот элемент в ns2: processResponse (элемент обтекания в переменную to).

Поскольку исходные и целевые элементы кажутсябыть в разных пространствах имен и разных типов, вам, вероятно, потребуется запустить его через скрипт XSLT (используя doXSLTransform), чтобы перевести его из исходной схемы в целевую схему.

...