2012-03-18 6 views
2

Я запускаю servicemix 4.4.1. Я пытаюсь сделать http-вызов веб-сайта с помощью camel-http4. Независимо от того, какой сайт я пытаюсь вызвать, я получаю эту ошибку: org.apache.camel.RuntimeCamelException: org.apache.camel.component.http.HttpOperationFailedException: HTTP операция не удалась вызова http://servicemix.apache.org/downloads/servicemix-4.4.0.html с StatusCode: 405Получение org.apache.camel.component.http.HttpOperationFailedException с кодом состояния 405

Здесь мой фрагмент кода:

<camelContext xmlns="http://camel.apache.org/schema/spring"> 
    <route> 
    <from uri="activemq://events1"/> 
<setHeader headerName="CamelHttpMethod"> 
    <constant>POST</constant> 
</setHeader> 
    <to uri="http://servicemix.apache.org/downloads/servicemix-4.4.0.html"/> 
    <to uri="log:events"/> 
    </route> 
</camelContext> 

Я пытался несколько сайтов и пытались использовать различные методы HTTP POST (против ГЭТ), и я получаю ту же ошибку. Есть идеи? Заранее спасибо.

ответ

1

Веб-сайт, который вы указали, не является объектом формы. Поэтому, скорее всего, это разрешит только запросы GET, а не POST. Поэтому попробуйте установить CamelHttpMethod в GET.

КПП. чего вы хотите достичь своим маршрутом? Если вы хотите отправить сообщение activeMQ на веб-сайт, тогда POST в порядке, но вы должны использовать веб-сайт, который принимает POST.

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

Затем вы можете отправить этот URL в первом маршруте.

+0

Благодарим за помощь. Странно то, что я думал, не определяя CamelHttpMethod, метод http будет считаться GET. Я попытался установить метод GET явно, а не POST, и это, похоже, сработало. Еще раз спасибо за вашу помощь по этому поводу. – emmitt1219

+0

Camel догадывается, какой метод http использовать, глядя на URL. Поэтому он не всегда использует get по умолчанию. См. Http://camel.apache.org/http.html в разделе «Вызов с использованием GET или POST» там описан алгоритм. –

1

Я проверил это; проблема решена с помощью опции set 'bridgeEndpoint'; Вы устанавливаете конечную точку http как точку BridgeEndpoint, что означает, что URL-адрес запроса будет обновлен с помощью URI запроса.

<route> 
    <from uri="-------"/> 
    <to uri="jetty://http://localhost:9090/my.html?bridgeEndpoint=true"/ 
    <to uri="log:events"/> 
</route> 
+0

Это была моя проблема. Спасибо за этот ответ (+1). – Luixv