Я пытаюсь реализовать процессор пересылки сообщений из хранилища сообщений jms. Я следовал стандартному примеру. Я успешно заполняю хранилище JMS из своего API, но когда я активирую обработчик сообщений, я получаю следующую ошибку. Похоже, что URL-адрес конечной точки, на который я хочу переслать сообщение, имеет неверный формат и добавил часть URL-адреса, на который я первоначально отправил сообщение, чтобы поместить объект в хранилище JMS. На данный момент полезная нагрузка жестко запрограммирована в API.
ERROR - ForwardingService BlockingMessageSender of message processor
[TestStockMessageProcessor] failed to send message to the endpoint.
INFO - ForwardingService Pausing the service of the message processor
[TestStockMessageProcessor]
INFO - HTTPSender Unable to sendViaPost to
url[http://TestServer/Webservices.API/stock/stockReference/bookIn]
...Transport error : 404 Error: NOT Found
Я использую клиент Google REST и отправляю сообщения по следующему URL-адресу
"http://localhost:8280/dev_depot/stock/stockReference/bookIn"
Мой API называется dev_depot
Ниже моя конфигурация
Мой API
<resource methods="POST" uri-template="/stock/stockReference/bookIn">
<inSequence>
<payloadFactory media-type="json">
<format> { "AreaId": 1, "StockStatusId": 1, "AbsStockNo": 1, "StockNo":
"TestJMSMS", "SKU": "7", "CatalogueNo": "300", "BadPackaging": false} </format>
<args></args>
</payloadFactory>
<property name="OUT_ONLY" value="true"></property>
<property name="FORCE_SC_ACCEPTED" value="true" scope="axis2"></property>
<store messageStore="JMSMS"></store>
<log level="full"></log>
</inSequence>
<outSequence>
<log level="full"></log>
</outSequence>
</resource>
Процессор сообщений
<messageProcessor name="TestStockMessageProcessor" class="org.apache.synapse.message.processor.impl.forwarder.ScheduledMessageForwardingProcessor" targetEndpoint="TestEndpoint" messageStore="JMSMS" xmlns="http://ws.apache.org/ns/synapse">
<parameter name="interval">1000</parameter>
<parameter name="client.retry.interval">1000</parameter>
<parameter name="max.delivery.attempts">2</parameter>
<parameter name="is.active">false</parameter>
</messageProcessor>
Конечная точка
<endpoint xmlns="http://ws.apache.org/ns/synapse" name="TestEndpoint">
<address uri="http://TestServer/Webservices.API/stock">
<suspendOnFailure>
<progressionFactor>1.0</progressionFactor>
</suspendOnFailure>
<markForSuspension>
<retriesBeforeSuspension>0</retriesBeforeSuspension>
<retryDelay>0</retryDelay>
</markForSuspension>
</address>
</endpoint>
Я также попытался написать прокси-сервис и получил другую ошибку, как показано ниже:
INFO - HTTPSender Unable to send ViaPost to
url[http://TestServer/Webservices.API/stock] : No element was found to write:
java.lang.ArrayIndexOutOfBoundsException
Прокси-сервис
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="MessageProcessorTest"
transports="https,http"
statistics="disable"
trace="disable"
startOnLoad="true">
<target>
<inSequence>
<payloadFactory media-type="json">
<format> { "AreaId": 1, "StockStatusId": 1, "AbsStockNo": 1, "StockNo":
"TestProxyJMSMS", "SKU": "7", "CatalogueNo": "300", "BadPackaging": false}
</format>
<args/>
</payloadFactory>
<property name="FORCE_SC_ACCEPTED" value="true" scope="axis2"/>
<property name="OUT_ONLY" value="true"/>
<property name="target.endpoint" value="TestEndpoint"/>
<log level="full"/>
<store messageStore="JMSMS"/>
</inSequence>
</target>
<description/>
</proxy>
На этот раз URL-адрес конечной точки кажется правильным. Я использую тот же процессор сообщений, но разные способы заполнения хранилища сообщений JMS.
Буду признателен за любые подсказки о том, что я делаю неправильно.