public static URL appendQueryParameters(MessageContext messageContext,
URL url) throws AxisFault {
String urlString = url.toString();
OMElement firstElement;
String queryParameterSeparator = (String) messageContext
.getProperty(WSDL2Constants.ATTR_WHTTP_QUERY_PARAMETER_SEPARATOR);
// In case queryParameterSeparator is null we better use the default value
if (queryParameterSeparator == null) {
queryParameterSeparator = WSDL20DefaultValueHolder
.getDefaultValue(WSDL2Constants.ATTR_WHTTP_QUERY_PARAMETER_SEPARATOR);
}
firstElement = messageContext.getEnvelope().getBody().getFirstElement();
String params = "";
if (firstElement != null) {
Iterator iter = firstElement.getChildElements();
String legalCharacters = WSDL2Constants.LEGAL_CHARACTERS_IN_QUERY.replaceAll(queryParameterSeparator, "");
while (iter.hasNext()) {
OMElement element = (OMElement) iter.next();
try {
params = params + URIEncoderDecoder.quoteIllegal(element.getLocalName(), legalCharacters) + "=" + URIEncoderDecoder.quoteIllegal(element.getText(), legalCharacters) +
queryParameterSeparator;
} catch (UnsupportedEncodingException e) {
throw AxisFault.makeFault(e);
}
}
}
if (!"".equals(params)) {
int index = urlString.indexOf("?");
if (index == -1) {
urlString = urlString + "?" + params.substring(0, params.length() - 1);
} else if (index == urlString.length() - 1) {
urlString = urlString + params.substring(0, params.length() - 1);
} else {
urlString = urlString + queryParameterSeparator + params.substring(0, params.length() - 1);
}
try {
return new URL(urlString);
} catch (MalformedURLException e) {
throw AxisFault.makeFault(e);
}
}
return url;
}
Appends Query parameters to the URL |