Как создать мыльную ошибку с 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}"/>