У меня проблема с прокси-сервером WSO2 (ESB v5.0.0), который защищен политикой базовой аутентификации.Я создал упрощенный контрольный пример, который показывает проблему.Служба прокси с политикой безопасности вызывает служебную службу, которая не защищена.Когда время этого вызова истекает, диагностический ответ возвращается вызывающей стороне через последовательность «onError».Когда вызов внутренней службы выполняется из итератора, исходящий ответ завершается с ошибкой:
org.apache.axis2.AxisFault: пароль, предоставленный обработчиком обратного вызова для пользователя, отсутствует: "wso2carbon "в org.apache.rampart.handler.RampartSender.invoke (RampartSender.java:76) в org.apache.axis2.engine.Phase.invokeHandler (Phase.java:340) в org.apache.axis2.engine.Phase.invoke (Phase.java:313) в org.apache.axis2.engine.AxisEngine.invoke (AxisEngine.java:261) в org.apache.axis2.engine.AxisEngine.send (AxisEngine.java:426) в орг.apache.synapse.core.axis2.Axis2Sender.sendBack (Axis2Sender.java:222) в org.apache.synapse.mediators.builtin.RespondMediator.mediate (RespondMediator.java:35) в org.apache.synapse.mediistsediator.mediate (AbstractListMediator.java:97) в org.apache.synapse.mediators.AbstractListMediator.mediate (AbstractListMediator.java:59) в org.apache.synapse.mediators.base.SequenceMediator.mediate (SequenceMediator.javag: 15).apache.synapse.mediators.MediatorFaultHandler.onFault (MediatorFaultHandler.java:93) в org.apache.synapse.FaultHandler.698) в org.apache.synapse.endpoints.AbstractEndpoint.onFault (AbstractEndpoint.java:530) в org.apache.synapse.endpoints.WSDLEndpoint.onFault (WSDLEndpoint.java:58) в org.apache.synapse.FleFaultault.(FaultHandler.java:53) в org.apache.synapse.core.axis2.TimeoutHandler.processCallbacks (TimeoutHandler.java:178) в org.apache.synapse.core.axis2.TimeoutHandler.run (TimeoutHandler.java:89) вjava.util.TimerThread.mainLoop (Неизвестный источник) в java.util.TimerThread.run (Неизвестный источник) Причина: org.apache.rampart.RampartException: Нет пароля, предоставленного обработчиком обратного вызова для пользователя: "wso2carbon" в org.apache.rampart.builder.BindingBuilder.addUsernameToken (BindingBuilder.java:207) в org.apache.rampart.builder.TransportBindingBuilder.build (TransportBindingBuilder.java:95) в org.apache.rampart.MessageBuilder.build (MessageBuilder.java:140) в org.apache.rampart.handler.RampartSender.invoke (RampartSender.java:65)
Когда итератор удален, прокси-сервер завершает работу правильно, возвращая мое сообщение об ошибке, когда бэкэнд-сервис истекает.
Если я удаляю политику безопасности, она корректно работает как с итератором, так и без него.
У кого-нибудь есть предложения, в чем может быть проблема?Я упростил прокси-сервер до минимума, чтобы продемонстрировать ошибку:
<proxy name="Tester" startOnLoad="true" transports="https http" xmlns="http://ws.apache.org/ns/synapse">
<target>
<inSequence>
<enrich>
<source clone="true" type="body"/>
<target property="storeBody" type="property"/>
</enrich>
<payloadFactory media-type="xml">
<format>
<Root xmlns="">
<Child/>
</Root>
</format>
<args/>
</payloadFactory>
<iterate expression="//Root/Child">
<target>
<sequence>
<enrich>
<source clone="true" property="storeBody" type="property"/>
<target type="body"/>
</enrich>
<send>
<endpoint key="WSRTE_reg"/>
</send>
</sequence>
</target>
</iterate>
</inSequence>
<outSequence/>
<faultSequence>
<payloadFactory media-type="xml">
<format>
<Error xmlns="">Error</Error>
</format>
<args/>
</payloadFactory>
<header action="remove" name="wsse:Security" scope="default" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-
secext-1.0.xsd"/>
<respond/>
</faultSequence>
</target>
<policy key="gov:ihp360/AA/AA_security_policy.xml"/>
<enableSec/>
</proxy>
Что еще хуже, если однажды произошла ошибка, ESB выдает ту же ошибку, даже если бэкэнд не истекает инеобходимо перезапустить, прежде чем он снова заработает.
Есть предложения?