Как создать мыльную ошибку с Apache Camel Spring-WS

Следующий сценарий работал с верблюдом Apache 2.14.0, spring-ws 1.5.9 и аксиомой 1.2.9.

Сценарий. Когда вызывается наша служба мыла, она должна возвращать ошибку. Эта ошибка должна быть в ответе как ошибка мыла.

Обнаружение проблемы

Я уже обнаружил проблему: - org.springframework.ws.soap.axiom.AxiomHandler(2.3.0) из Spring-WS не создает объекты SOAPFault - org.apache.axiom.soap.impl.llom.SOAPBodyImpl (1.2.15) больше не проверяет локальное имя элемента

Вопрос: Есть ли лучший способ справиться с недостатками мыла с помощью Apache Camel?

  • Одна возможность - использовать throwException, но в моем журнале будет много стековых трасс в случае функциональной ошибки.

Ниже приведен фрагмент конфигурации верблюда

<camel:from uri="spring-ws:uri:/contextPath/soapServices?endpointMapping=#endpointMapping"/>
<camel:to uri="bean:someBean" />
<camel:choice>
<camel:when>
<camel:xpath>//error</camel:xpath>
<camel:to uri="xslt:transform_event_response_to_soapfault.xslt?saxon=true" />
</camel:when>
</camel:choice>
</camel:from>

1 ответ

Решение, которое мы используем no, заключается в следующем: сохраните исходное сообщение в заголовке и сгенерируйте исключение. Компонент spring-ws автоматически преобразует его в мыльную ошибку. Также добавьте CamelFailuerHandled, чтобы сообщение об ошибке отсутствовало в файлах журнала.

<camel:setHeader headerName="myErrorMessage">
  <camel:xpath>//error/text()</camel:xpath>
</camel:setHeader>                  

<camel:setProperty propertyName="CamelFailureHandled">
    <camel:constant>true</camel:constant>
</camel:setProperty>        

<camel:throwException exceptionType="java.lang.IllegalArgumentException" message="${header.myErrorMessage}"/>
Другие вопросы по тегам