1つのエンドポイントを持つカスタムルーターを作成しました。カスタムルーターは、インバウンドURLのURLパラメーターに基づいてエンドポイントの宛先を検索します。私はこれを稼働させている例を持っており、ブラウザでテストしています。私はこれで最後の1つのことを解決しようとしています。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を表示してもらいたい。どうすればこれを達成できますか?私はJava1.6でMule2.2.1コミュニティエディションを使用しています。
これが私の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/";
}
}
}