Как сохранить входящий хост с пользовательским маршрутизатором Mule ESB - PullRequest
3 голосов
/ 21 января 2010

Я создал собственный маршрутизатор с одной конечной точкой. Пользовательский маршрутизатор ищет конечную точку на основе параметров URL-адреса входящего URL-адреса. У меня есть пример этого и работает, и я проверяю это в браузере. Я пытаюсь решить одну последнюю вещь с этим. Когда я выполняю вызов в браузере, используя http://localhost:8787/my-site,, вызов выполняет перенаправление, и URL-адрес в браузере меняется на http://server2.xyz.com:8080/my-site.. Я не хочу, чтобы пользователь когда-либо видел http://server2.xyz.com:8080/my-site. Я хочу, чтобы пользователь всегда видел http://localhost:8787/my-site. Как мне этого добиться? Я использую Mule 2.2.1 Community Edition с Java 1.6.

Вот мой конфигурационный файл Mule:

<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns="http://www.mulesource.org/schema/mule/core/2.2"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:spring="http://www.springframework.org/schema/beans"
    xmlns:http="http://www.mulesource.org/schema/mule/http/2.2"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
        http://www.mulesource.org/schema/mule/core/2.2 http://www.mulesource.org/schema/mule/core/2.2/mule.xsd
        http://www.mulesource.org/schema/mule/http/2.2 http://www.mulesource.org/schema/mule/http/2.2/mule-http.xsd">

    <model name="ProxyService">
        <service name="HttpProxyService">
            <inbound>
                <http:inbound-endpoint address="http://localhost:8787" synchronous="true"/>
            </inbound>
            <outbound>
                <custom-outbound-router class="com.abc.xyz.routing.LookupOutboundRouter">
                    <outbound-endpoint name="custom" address="http://nonexistant.server.com:8080" synchronous="true"/>
                </custom-outbound-router>
            </outbound>
        </service>
    </model>
</mule>

Вот мой пользовательский роутер:

public class LookupOutboundRouter extends AbstractOutboundRouter {
 Logger logger = Logger.getLogger(LookupOutboundRouter.class);

 @Override
 public boolean isMatch(MuleMessage message) throws MessagingException {
  return true;
 }

 @Override
 public MuleMessage route(MuleMessage message, MuleSession session) throws MessagingException {
  String[] urlValues = StringUtils.split(message.getProperty("http.request").toString(), "/");

  String newUri = lookupServiceUri(urlValues[0]) + urlValues[1];
  logger.info("newUri=" + newUri);

  DynamicURIOutboundEndpoint ep;

  try {
   ep = new DynamicURIOutboundEndpoint((OutboundEndpoint) getEndpoints().get(0), new MuleEndpointURI(newUri));

   MuleMessage message2 = send(session, message, ep);

   return message2;
  } catch (EndpointException e1) {
   e1.printStackTrace();
  } catch (MuleException e) {
   e.printStackTrace();
  }

  return null;
 }

 /**
  * This will call the service registry.
  * @param id
  * @return
  */
 private String lookupServiceUri(String id) {
  if(id.equalsIgnoreCase("12345")) {
   return "http://server.xyz.com:8080/";
  } else {
   return "http://server2.xyz.com:8080/";
  }
 }
}

1 Ответ

1 голос
/ 22 января 2010

Мне удалось добиться этого в браузере, установив для followRedirects значение true в коннекторе HTTP. Единственная проблема с этим сейчас заключается в том, что он не работает для перенаправлений POST. Сейчас я делаю SOAP-вызов из SoapUI вместо использования браузера.

Entity enclosing requests cannot be redirected without user intervention

Message               : Failed to route event via endpoint: org.mule.endpoint.DynamicURIOutboundEndpoint@fd285ee0. Message payload is of type: PostMethod
Type                  : org.mule.api.transport.DispatchException
Code                  : MULE_ERROR-42999
Payload               : org.apache.commons.httpclient.methods.PostMethod@9fa8f
JavaDoc               : http://www.mulesource.org/docs/site/current2/apidocs/org/mule/api/transport/DispatchException.html
...