class WFS_1_1_0_Protocol implements WFSProtocol {

    public WFSResponse issueGetFeaturePOST(final GetFeature request) throws IOException {
        if (!supportsOperation(WFSOperationType.GET_FEATURE, true)) {
            throw new UnsupportedOperationException(
                    "The server does not support GetFeature for HTTP method POST");
        }
        URL postURL = getOperationURL(WFSOperationType.GET_FEATURE, true);
        
        // support vendor parameters, GeoServer way
        if(request instanceof GetFeatureQueryAdapter) {
            GetFeatureQueryAdapter adapter = (GetFeatureQueryAdapter) request;
            if(adapter.getVendorParameter() != null) {
                String url = postURL.toString();
                if ((url == null) || !url.endsWith("?")) {
                    url += "?";
                }
                
                boolean first = true;
                for (Map.Entry<String, String> entry : adapter.getVendorParameter().entrySet()) {
                    if(first) {
                        first = false;
                    } else {
                        url += "&";
                    }
                    url += entry.getKey() + "=" + URLEncoder.encode(entry.getValue(), "UTF-8");
                }
                
                postURL = new URL(url);
            }
        }

        RequestComponents reqParts = strategy.createGetFeatureRequest(this, request);
        GetFeatureType serverRequest = reqParts.getServerRequest();

        Encoder encoder = new Encoder(strategy.getWfsConfiguration());

        // If the typeName is of the form prefix:typeName we better declare the namespace since we
        // don't know how picky the server parser will be
        String typeName = reqParts.getKvpParameters().get("TYPENAME");
        QName fullName = getFeatureTypeName(typeName);
        String prefix = fullName.getPrefix();
        String namespace = fullName.getNamespaceURI();
        if (!XMLConstants.DEFAULT_NS_PREFIX.equals(prefix)) {
            encoder.getNamespaces().declarePrefix(prefix, namespace);
        }
        WFSResponse response = issuePostRequest(serverRequest, postURL, encoder);

        return response;
    }

    public  WFS_1_1_0_Protocol(InputStream capabilitiesReader, HTTPClient http,
            Charset defaultEncoding, WFSStrategy strategy);

}