2016-08-26 2 views
1

Я работаю над настраиваемым модулем axis2 для wso2 esb. Сейчас я использую код от https://docs.wso2.com/display/ESB490/Writing+an+Axis2+Module , и у меня есть проблема с входящими запросами. Не имеет значения, какой запрос я посылаю, потому что он всегда выглядит следующим образом:Пустой конверт мыла в модуле WSO2 axis2

<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body/></soapenv:Envelope> 

С другой стороны отток работает более или менее, как он должен - ответ выглядит нормально, но вместо того, чтобы «вне» его направления задаются как "в". Если я не ошибаюсь, метод invoke будет вызван для запросов и отменит ответы - я прав? В моем случае оба используют invoke. Любые идеи, что я делаю неправильно?

Edit: Мой код обработчика:

public class LogHandler extends AbstractHandler implements Handler { 
    private Logger log = Logger.getLogger(LogHandler.class.toString()); 

    @Override 
    public void init(HandlerDescription handlerDescription) { 
     super.init(handlerDescription); 
    } 

    public InvocationResponse invoke(MessageContext msgContext) throws AxisFault { 
     System.out.println("invoked: " + msgContext.getEnvelope().toString() + "\n"); 
     log.info("invoked: " + msgContext.getEnvelope().toString() + "\n"); 
     return InvocationResponse.CONTINUE; 
    } 

    public void revoke(MessageContext msgContext) { 
     log.info("revoked: " + msgContext.getEnvelope().toString() + "\n"); 
    } 

} 

Модуль:

public class LoggingModule implements Module { 
    private static final Log log = LogFactory.getLog(LoggingModule.class); 

    // initialize the module 
    public void init(ConfigurationContext configContext, AxisModule module) throws AxisFault { 
    } 

    public void engageNotify(AxisDescription axisDescription) throws AxisFault { 
    } 

    // shutdown the module 
    public void shutdown(ConfigurationContext configurationContext) throws AxisFault { 
    } 

    public String[] getPolicyNamespaces() { 
     return null; 
    } 

    public void applyPolicy(Policy policy, AxisDescription axisDescription) throws AxisFault { 
    } 

    public boolean canSupportAssertion(Assertion assertion) { 
     return true; 
    } 
} 

module.xml:

<module name="sample-logging" class="pl.wso2.logging.LoggingModule"> 
    <InFlow> 
     <handler name="InFlowLogHandler" class="pl.wso2.logging.LogHandler"> 
      <order phase="loggingPhase"/> 
     </handler> 
    </InFlow> 
    <OutFlow> 
     <handler name="OutFlowLogHandler" class="pl.wso2.logging.LogHandler"> 
      <order phase="loggingPhase"/> 
     </handler> 
    </OutFlow> 
</module> 

В моем WSO2 прокси я использую Payload Посредник для создания ответа и затем верните его с помощью посредника ответа. Для данного запроса:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Header/> 
    <soapenv:Body> 
    <aa>blahblah</aa> 
    </soapenv:Body> 
</soapenv:Envelope> 

есть две вещи вошли: запроса от притоке

invoked: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlso 
ap.org/soap/envelope/"><soapenv:Body/></soapenv:Envelope> 

и ответ от оттока

invoked: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlso 
ap.org/soap/envelope/"><soapenv:Body><m:checkpriceresponse xmlns:m="http://services.samples/xsd"><m: 
code>dsadsa</m:code></m:checkpriceresponse></soapenv:Body></soapenv:Envelope> 
+0

, пожалуйста, поделитесь своим кодом и тестом. –

ответ

0

После отладки всего, что я обнаружил, что, когда запрос был проанализирован в InFlow, вместо использования его мыльного сообщения, новый (пустой). К счастью, можно получить доступ к соответствующему запросу с помощью обработчика мыла (или только его кода).

0

Как на https://axis.apache.org/axis2/java/core/docs/modules.html#Step2_:_LogHandler ...

"public void invoke (MessageContext ctx);" это метод, называемый двигателем Axis2, когда управление передается обработчику. "public void revoke (MessageContext ctx);" вызывается, когда обработчики отозвана Axis2 двигателя «.

что означает, так как вы вызываете же обработчик как в притоке и оттоке метод же Invoke() должен быть получение срабатывает и для запроса и ответа Если вы хотите, чтобы разные логики выполнялись для запросов и ответов, возможно, вам следует написать отдельные обработчики для запроса и ответа.

+0

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