2010-01-21 7 views
3

Я создал настраиваемый маршрутизатор с одной конечной точкой. Пользовательский маршрутизатор просматривает назначение конечной точки на основе параметров 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 с Java 1.6.Как сохранить входящий хост с пользовательским маршрутизатором Mule ESB

Вот мой 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

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

Entity enclosing requests cannot be redirected without user intervention 

Message    : Failed to route event via endpoint: [email protected] Message payload is of type: PostMethod 
Type     : org.mule.api.transport.DispatchException 
Code     : MULE_ERROR-42999 
Payload    : [email protected] 
JavaDoc    : http://www.mulesource.org/docs/site/current2/apidocs/org/mule/api/transport/DispatchException.html 

 Смежные вопросы

  • Нет связанных вопросов^_^