public class WMSRequests {
private static Log log = LogFactory.getLog(org.geowebcache.service.wms.WMSRequests.class);
public static void handleProxy(TileLayerDispatcher tld, ConveyorTile tile) throws GeoWebCacheException {
WMSLayer layer = null;
TileLayer tl = tld.getTileLayer(tile.getLayerId());
if(tl == null) {
throw new GeoWebCacheException(tile.getLayerId() + " is unknown.");
}
if (tl instanceof WMSLayer) {
layer = (WMSLayer) tl;
} else {
throw new GeoWebCacheException(tile.getLayerId()
+ " is not served by a WMS backend.");
}
String queryStr = tile.servletReq.getQueryString();
String serverStr = layer.getWMSurl()[0];
GetMethod getMethod = null;
try {
URL url;
if (serverStr.contains("?")) {
url = new URL(serverStr + "&" + queryStr);
} else {
url = new URL(serverStr + queryStr);
}
WMSSourceHelper helper = layer.getSourceHelper();
if(! (helper instanceof WMSHttpHelper)) {
throw new GeoWebCacheException("Can only proxy if WMS Layer is backed by an HTTP backend");
}
getMethod = ((WMSHttpHelper) helper).executeRequest(url, null, layer.getBackendTimeout());
InputStream is = getMethod.getResponseBodyAsStream();
HttpServletResponse response = tile.servletResp;
response.setCharacterEncoding(getMethod.getResponseCharSet());
response.setContentType(getMethod.getResponseHeader("Content-Type").getValue());