Опрос конечной точки HTTP, за которой следует джерси REST WS, не работает в Mule 3.5

#java #web-services #mule

#java #веб-сервисы #mule

Вопрос:

У меня есть требование, при котором мне нужно опросить службу rest, а затем передать ответ от этой веб-службы на веб-службу REST.

Я использую Mule 3.5, и мой поток выглядит следующим образом. введите описание изображения здесь

Я получаю приведенное ниже исключение, при котором вызывается служба REST

 ********************************************************************************
Message               : Failed to invoke JerseyResourcesComponent{TestFlow.component.1106552446}. Component that caused exception is: JerseyResourcesComponent{TestFlow.component.1106552446}. Message payload is of type: String
Code                  : MULE_ERROR--2
--------------------------------------------------------------------------------
Exception stack is:
1. null (java.lang.NullPointerException)
  org.mule.module.jersey.JerseyResourcesComponent:192 (null)
2. Failed to invoke JerseyResourcesComponent{TestFlow.component.1106552446}. Component that caused exception is: JerseyResourcesComponent{TestFlow.component.1106552446}. Message payload is of type: String (org.mule.component.ComponentException)
  org.mule.component.AbstractComponent:144 (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/component/ComponentException.html)
--------------------------------------------------------------------------------
Root Exception stack trace:
java.lang.NullPointerException
    at org.mule.module.jersey.JerseyResourcesComponent.getBaseUri(JerseyResourcesComponent.java:192)
    at org.mule.module.jersey.JerseyResourcesComponent.doInvoke(JerseyResourcesComponent.java:146)
    at org.mule.component.AbstractComponent.invokeInternal(AbstractComponent.java:122)
      3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
********************************************************************************
  

После отладки я понял, что это связано с тем, что Mule ожидает, что входящее свойство MuleMessage для ContextPath будет заполнено, однако в этом случае оно равно null.

В JerseyResourcesComponent строка 117 возвращается как null, и, следовательно, строка 195 выдает NPE.

Я хотел знать, является ли такое требование / шаблон недопустимым или это какое-то ограничение в том, как Mule обрабатывает свою инфраструктуру обмена сообщениями?

Поток xml на всякий случай, если вы захотите его проверить.

 <flow name="TestFlow" doc:name="TestFlow">

        <poll doc:name="Poll">
            <fixed-frequency-scheduler frequency="10" timeUnit="SECONDS" startDelay="10"/>
            <http:outbound-endpoint exchange-pattern="request-response" host="localhost" port="8080" doc:name="Order Generator" method="GET" contentType="application/json" path="order"/>
        </poll>
        <object-to-string-transformer doc:name="Object to String"/>
        <jersey:resources doc:name="Tax Calculator">
            <component class="org.nthdimenzion.TaxCalculator"/>
        </jersey:resources>

        <logger level="INFO" doc:name="Logger"/>

    </flow>
  

PS: Работа, которую я получил, заключалась в использовании компонента java / spring вместо REST WS, а затем вызове REST WS из компонента Java.

Комментарии:

1. Это недопустимый шаблон, чтобы иметь его за подобным опросом. Он должен находиться за входящей конечной точкой, чтобы сопоставить uri с правильными ресурсами. Если вы этого не делаете, вам следует просто использовать стандартный компонент java / spring для обработки сообщения.