Я использую Mule Community Edition 3.4. У меня проблема с компонентом UntilSuccessful. Теперь отображается сценарий: У меня поток, составленный компонентом UntilSuccessful, в котором есть SOAP-компонент, который делает запрос к веб-службе. В этом потоке также есть ExcpetionStrategy. Проблема в том, что когда исключение возникает внутри UntilSuccessful (т. Е. В компоненте SOAP), ExcpetionStrategy не может справиться с этим, потому что он (обработанное исключение) обрабатывается каким-то механизмом внутри компонента UntilSuccessful. Поскольку мне нужно обрабатывать Exception в ExcpetionStrategy, я решил создать настраиваемый исходящий перехватчик (внутри SOAP-компонента), который перехватывает ответ SOAP (исключение, если оно выбрано), и которое может генерировать исключение, чтобы вызвать ExcpetionStrategy. Может ли кто-нибудь помочь мне с этой проблемой? Я попытался прочитать документацию, но она разрежена и не очень хорошо объясняет, как создать настраиваемое исходящее исключение. Что бы я сделать, это сохранить где-то имя исключительной ситуации (например, если сервер кинул NumberFormatException, я бы сохранить его имя где-то для того, чтобы использовать его в ExceptionStrategy)Создание пользовательского перехватчика с помощью веб-службы SOAP MULE
Ниже вы можете увидеть фрагмент мула файл конфигурации:
<flow name="ProvaClient" doc:name="ProvaClient">
<quartz:inbound-endpoint jobName="TalendJob" repeatInterval="5000" repeatCount="0" responseTimeout="10000" doc:name="Quartz">
<quartz:event-generator-job>
<quartz:payload>error</quartz:payload>
</quartz:event-generator-job>
</quartz:inbound-endpoint>
<object-to-string-transformer doc:name="Object to String"/>
<until-successful objectStore-ref="OS_Bean" maxRetries="2" secondsBetweenRetries="2" doc:name="Until Successful" deadLetterQueue-ref="myQueue">
<processor-chain doc:name="Processor Chain: Wait For Web Service Response">
<processor-chain doc:name="Processor Chain: Web Service">
<cxf:jaxws-client operation="getCode" clientClass="it.aizoon.prova.client.ProvaService" port="ProvaPort" enableMuleSoapHeaders="true" doc:name="SOAP">
</cxf:jaxws-client>
<http:outbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" path="service/prova" method="POST" doc:name="HTTP"/>
</processor-chain>
<logger message="PAYLOAD: #[payload]" level="INFO" doc:name="Logger"/>
</processor-chain>
</until-successful>
<catch-exception-strategy doc:name="Catch Exception Strategy">
<!-- <processor ref="myExceptionHandler_id"/> -->
<logger message="EXCEPTION STRATEGY" level="INFO" doc:name="Logger"/>
</catch-exception-strategy>
</flow>
здесь вы можете увидеть сервер, который выставляет веб-службы:
<flow name="provaServer" doc:name="provaServer">
<http:inbound-endpoint exchange-pattern="request-response" doc:name="HTTP" host="localhost" path="service/prova" port="8081"/>
<logger message="SERVER" level="INFO" doc:name="Logger"/>
<cxf:jaxws-service serviceClass="it.aizoon.prova.Prova" doc:name="Process SOAP Request" />
<component class="it.aizoon.prova.ProvaImpl" doc:name="Java"/>
</flow>
И здесь есть ProvaImpl.java, реализация веб-службы. Как вы можете видеть, если строка передается в качестве аргумента в Получить код() функция ошибки, исключение в выброшен, и я бы, что он управляет стратегией исключения, определенной в клиенте
@WebService(endpointInterface = "it.aizoon.prova.Prova",
serviceName = "Prova")
public class ProvaImpl implements Prova{
@Override
public String getCode(String code) throws NumberFormatException{
// TODO Auto-generated method stub
if(code.equals("error")) throw new NumberFormatException();
String str = "Andato a buon fine!";
return str;
}
}
Прежде всего спасибо за ре sponse. Если getCode() возвращает исключение, например NumberFormatException, как я могу задать в качестве полезной нагрузки это имя исключения в сообщении в стратегии исключения? Моя цель - отправить почту с заброшенным исключением. Я не хочу получать SOAPFaultException, но NumberFormatException –
Обновлен ответ о том, как установить полезную нагрузку для исключения и т. Д. –
Извините Ryan, где обновление? –