package org.apache.cxf.phase.PhaseInterceptorChain
public synchronized boolean doIntercept(Message message) {
//循环遍历执行拦截器handleMessage(message);
while (state == State.EXECUTING && iterator.hasNext()) {
try {
Interceptor<Message> currentInterceptor = (Interceptor<Message>)iterator.next();
if (isFineLogging) {
LOG.fine("Invoking handleMessage on interceptor " + currentInterceptor);
}
//System.out.println("-----------" + currentInterceptor);
currentInterceptor.handleMessage(message);
if (state == State.SUSPENDED) {
// throw the exception to make sure thread exit without interrupt
throw new SuspendedInvocationException();
}
} catch (SuspendedInvocationException ex) {
// we need to resume from the same interceptor the exception got originated from
if (iterator.hasPrevious()) {
iterator.previous();
}
pause();
throw ex;
} catch (RuntimeException ex) {
.................
}
}
return state == State.COMPLETE;
} finally {
CURRENT_MESSAGE.set(oldMessage);
}
}
package org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor;
public void handleMessage(Message message) {
//message=org.apache.cxf.message.XMLMessage@9c494f43
try {
processRequest(message);
} catch (RuntimeException ex) {
..
}
}
package org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor;
private void processRequest(Message message) {
....................
OperationResourceInfo ori = null;
...........
MultivaluedMap<String, String> values = new MetadataMap<String, String>();
....................
//Process parameters
try {
//解析请求方法的参数列表。
List<Object> params = JAXRSUtils.processParameters(ori, values, message);
message.setContent(List.class, params);
} catch (Exception ex) {
..............
}
//Message contains following information: PATH, HTTP_REQUEST_METHOD, CONTENT_TYPE, InputStream.
package org.apache.cxf.jaxrs.utils.JAXRSUtils;
public static List<Object> processParameters(OperationResourceInfo ori,
MultivaluedMap<String, String> values,
Message message)
throws IOException, WebApplicationException {
//得到 请求处理的方法public com.ym.box.data.ReturnData //com.ym.box.LogBoxResource.mobileLog(com.ym.box.data.LogBoxRequest)
Method method = ori.getMethodToInvoke();
//得到请求方法参数类型[cla
cxf源码
最新推荐文章于 2024-05-13 07:38:25 发布