#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 для обработки сообщения.