可能的原因是在配置拦截器时出现了错误,需要仔细检查配置是否正确。如果确认配置无误,可以尝试使用以下代码:
public class AxisUrlTemplateInterceptor extends AbstractPhaseInterceptor {
public AxisUrlTemplateInterceptor() {
super(Phase.PRE_PROTOCOL);
}
@Override
public void handleMessage(Message message) throws Fault {
try {
AddressingProperties inProps = ContextUtils.retrieveMAPs(message, false, true);
if (inProps != null && inProps.getAction() != null) {
String action = inProps.getAction().getValue();
EndpointReferenceType to = inProps.getTo();
if (to != null && to.getAddress() != null) {
String toAddress = to.getAddress().getValue();
String wsdlURL = null; // set your WSDL url here
String portName = null; // set your port name here
String endPointName = null; // set your endpoint name here
String contextPath = null; // set your context path here
String urlTemplate = wsdlURL + "#" + portName + "#" + endPointName + "#" + action;
urlTemplate = URLDecoder.decode(urlTemplate, "UTF-8");
String fullURL = urlTemplate.replaceAll("\\{contextPath\\}", contextPath);
String[] pathSegments = fullURL.split("/");
String last = pathSegments[pathSegments.length - 1];
if (!last.contains("?")) {
fullURL += "?";
} else if (!last.endsWith("&")) {
fullURL += "&";
}
fullURL += URL_PARAM_CONTEXT_PATH + "=" + contextPath;
Map> parameterMap = new HashMap>();
Map readyMap = new HashMap();
this.getWsdl11Reader().readWsdl(wsdlURL).collectEndpointParamters(portName, readyMap, parameterMap);
Map paramtersFromAddress = getParamtersFromAddress(toAddress);
Iterator>> itr = parameterMap.entrySet().iterator();
while (itr.hasNext()) {
Entry> nxt = itr.next();
String key = nxt.getKey();
String value = null;
if (paramtersFromAddress.containsKey(key)) {
value = paramtersFromAddress.remove(key);
} else {
List vals = nxt.getValue();
if (vals.size() == 1) {
value = vals.iterator().next();
}
}
if (value != null) {
fullURL += "&" + key + "=" + value;
}
}
itr = paramtersFromAddress.entrySet().iterator();
while (itr.hasNext()) {
Entry nxt = itr.next();
String key = nxt.getKey();
String value = nxt.getValue();
fullURL += "&" + key + "=" + value;
}
int idx = fullURL.indexOf("}");
if (idx != -1 && fullURL.indexOf("{") == -1) {
fullURL = fullURL.substring(0, idx) + fullURL.substring(idx + 1);
}
fullURL = fullURL.replaceAll("&", "&");
message.put(Message.ENDPOINT_ADDRESS, fullURL);
}
}
} catch (Exception e) {
throw new Fault(e);
}
}
private Map getParamtersFromAddress(String toAddress) {
Map parameterMap = new HashMap();
StringBuffer buf = new StringBuffer(toAddress);
int idx = buf.indexOf("?");
if (idx != -1) {
String params = to