bpws: getVariableData () вызывает ошибку, если соответствие xpath не найдено - PullRequest
0 голосов
/ 20 мая 2011

Я хотел использовать «bpws: getVariableData ()» для присвоения значения, только если выражение xpath находит совпадение. Если нет, ничего не должно произойти. К сожалению, обработка bpel останавливается с ошибкой, если выражение xpath не находит соответствия. Есть ли способ добиться такого поведения?

Спасибо за вашу помощь.

Ответы [ 3 ]

3 голосов
/ 23 мая 2011

Я обнаружил, что движок Oracle Oracle BPEL позволяет игнорировать пропущенные данные.Этот флаг можно добавить к элементу копирования следующим образом:

<copy bpelx:ignoreMissingFromData="yes|no"/>

Дополнительная информация о том, как установить его в JDeveloper: http://download.oracle.com/docs/cd/E17904_01/integration.1111/e10224/bp_manipdoc.htm#SOASE87087

Это решает проблему с сообщением об ошибке, котороеброшенОднако это все еще не показывает желаемое поведение.Мое намерение состояло в том, что никакое назначение не сделано, если выражение xpath не может быть оценено.Однако с помощью флага bpelx: ignoreMissingFromData назначается целевая пустая строка "".

В моем случае я хочу объединить два XML-документа.Я хочу назначить новое значение для элемента в document1, только если этот элемент отображается в document2.Если нет, оставьте элемент в document1 без изменений.

Я решил проблему, используя преобразование вместо назначения BPEL.В xsl я использую следующее утверждение.Преобразование получает два XML-документа на вход.На Document1 ссылается параметр $ parameter_referenceDocument1.

<elementName>
  <xsl:if test="xpathInDocument2">
    <xsl:value-of select="xpathInDocument2"/>
  </xsl:if>
  <xsl:if test="not(xpathInDocument2)">
    <xsl:value-of select="$parameter_referenceDocument1.xpathInDocument1"/>
  </xsl:if>
</elementName>

Я знаю, это ужасно, но решает проблему.Если у кого-то есть лучшее решение, пожалуйста, дайте мне знать.

0 голосов
/ 22 мая 2011

Вы можете создать область вокруг действия назначения и с помощью обработчика исключений в области перехватить selectionFailure, элемент, который затем продолжит обработку.

В обработчике исключений вы можете назначить значение по умолчанию, если это необходимо.

Чтобы пояснить утверждение Ванто, механизм Oracle BPEL поддерживает пользовательские функции XPath, которые позволяют вам это делать.

0 голосов
/ 22 мая 2011

Нет, стандарт BPEL требует, чтобы в этом случае двигатель выдавал отказ выбора.Чтобы избежать таких ситуаций, убедитесь, что вы правильно инициализировали переменные и / или проверяете переменную по схеме.Также вы можете охранять действие присваивания с помощью действия if / switch, чтобы проверять наличие элемента перед доступом к нему.Вы также можете рассмотреть возможность написания пользовательской функции XPath, которая возвращает значение по умолчанию в случае, если требуемый элемент не существует в переменной.Однако я не уверен, поддерживает ли это движок Oracle BPEL.

...