Вопрос
У меня есть работающее приложение Mule, на котором я хочу настроить Jetty для ответа на запросы http. Следующая конфигурация:
<jetty:endpoint address="http://localhost:8080"
name="jettyEndpoint"
host="localhost"
port="8080" path="/"
synchronous="true" />
<service name="jettyUMO">
<inbound>
<jetty:inbound-endpoint ref="jettyEndpoint" />
</inbound>
<test:component appendString="Received" />
</service>
... работает, когда я запускаю приложение, и укажите браузеру http: // localhost: 8080 - все, что отображается, - "Получено", согласно тесту: компонент.
Я хочу обновить это, чтобы вместо просмотра "Получено" я хотел перейти туда, где я определил файл index.html. Я предполагаю, что мне нужно изменить тест: компонент для исходящей конечной точки - это правильно? Где бы я указал путь (относительный или абсолютный)?
Решение
Мне пришлось добавить экземпляр разъема причала:
<jetty:connector name="httpConnector"
configFile="conf/jettyConfig.xml"
useContinuations="true" />
Вот содержимое файла jettyConfig.xml, так как простой пример содержит ошибки:
<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://jetty.mortbay.org/configure.dtd">
<Configure id="Server" class="org.mortbay.jetty.Server">
<Call name="addConnector">
<Arg>
<New class="org.mortbay.jetty.nio.SelectChannelConnector">
<Set name="port">8080</Set>
</New>
</Arg>
</Call>
<Set name="handler">
<New id="Handlers" class="org.mortbay.jetty.handler.HandlerCollection">
<Set name="handlers">
<Array type="org.mortbay.jetty.Handler">
<Item>
<New id="Contexts" class="org.mortbay.jetty.handler.ContextHandlerCollection"/>
</Item>
<Item>
<New id="DefaultHandler" class="org.mortbay.jetty.handler.DefaultHandler"/>
</Item>
</Array>
</Set>
</New>
</Set>
<Call name="addLifeCycle">
<Arg>
<New class="org.mortbay.jetty.deployer.WebAppDeployer">
<Set name="contexts"><Ref id="Contexts"/></Set>
<Set name="webAppDir">path/webapps</Set>
</New>
</Arg>
</Call>
</Configure>
Другие советы
Это не сработало для меня.
> [04-22 17:25:22] WARN log [main]:
> failed SelectChannelConnector@0.0.0.0:8080
> java.net.BindException: Address already in use
> at sun.nio.ch.Net.bind(Native Method)
Я думаю, что происходит то, что один экземпляр создается на порте, определенном в jettyConfig, а затем другой через Mule. Изменение порта в jettyConfig приводит к двум идентично действующим экземплярам на двух разных портах.
Самое простое решение - удалить вызов addConnector из файла jettyConfig.xml и позволить Mule назначить порт.
Также нет необходимости указывать хост и порт на конечной точке. Этого достаточно:
<jetty:endpoint address="http://localhost:8080" name="serverEndpoint" path="services/Foo" synchronous="false" />