📄 webruleset.java
字号:
throws Exception {
if (isSessionConfigSet){
throw new IllegalArgumentException(
"<session-config> element is limited to 1 occurance");
}
isSessionConfigSet = true;
}
}
/**
* A Rule that calls the <code>setAuthConstraint(true)</code> method of
* the top item on the stack, which must be of type
* <code>org.apache.catalina.deploy.SecurityConstraint</code>.
*/
final class SetAuthConstraintRule extends Rule {
public SetAuthConstraintRule() {
}
public void begin(String namespace, String name, Attributes attributes)
throws Exception {
SecurityConstraint securityConstraint =
(SecurityConstraint) digester.peek();
securityConstraint.setAuthConstraint(true);
if (digester.getLogger().isDebugEnabled()) {
digester.getLogger()
.debug("Calling SecurityConstraint.setAuthConstraint(true)");
}
}
}
/**
* Class that calls <code>setDistributable(true)</code> for the top object
* on the stack, which must be a <code>org.apache.catalina.Context</code>.
*/
final class SetDistributableRule extends Rule {
public SetDistributableRule() {
}
public void begin(String namespace, String name, Attributes attributes)
throws Exception {
Context context = (Context) digester.peek();
context.setDistributable(true);
if (digester.getLogger().isDebugEnabled()) {
digester.getLogger().debug
(context.getClass().getName() + ".setDistributable( true)");
}
}
}
/**
* Class that calls a property setter for the top object on the stack,
* passing the public ID of the entity we are currently processing.
*/
final class SetPublicIdRule extends Rule {
public SetPublicIdRule(String method) {
this.method = method;
}
private String method = null;
public void begin(String namespace, String name, Attributes attributes)
throws Exception {
Context context = (Context) digester.peek(digester.getCount() - 1);
Object top = digester.peek();
Class paramClasses[] = new Class[1];
paramClasses[0] = "String".getClass();
String paramValues[] = new String[1];
paramValues[0] = digester.getPublicId();
Method m = null;
try {
m = top.getClass().getMethod(method, paramClasses);
} catch (NoSuchMethodException e) {
digester.getLogger().error("Can't find method " + method + " in "
+ top + " CLASS " + top.getClass());
return;
}
m.invoke(top, (Object [])paramValues);
if (digester.getLogger().isDebugEnabled())
digester.getLogger().debug("" + top.getClass().getName() + "."
+ method + "(" + paramValues[0] + ")");
}
}
/**
* A Rule that calls the factory method on the specified Context to
* create the object that is to be added to the stack.
*/
final class WrapperCreateRule extends Rule {
public WrapperCreateRule() {
}
public void begin(String namespace, String name, Attributes attributes)
throws Exception {
Context context =
(Context) digester.peek(digester.getCount() - 1);
Wrapper wrapper = context.createWrapper();
digester.push(wrapper);
if (digester.getLogger().isDebugEnabled())
digester.getLogger().debug("new " + wrapper.getClass().getName());
}
public void end(String namespace, String name)
throws Exception {
Wrapper wrapper = (Wrapper) digester.pop();
if (digester.getLogger().isDebugEnabled())
digester.getLogger().debug("pop " + wrapper.getClass().getName());
}
}
/**
* A Rule that can be used to call multiple times a method as many times as needed
* (used for addServletMapping).
*/
final class CallParamMultiRule extends CallParamRule {
public CallParamMultiRule(int paramIndex) {
super(paramIndex);
}
public void end(String namespace, String name) {
if (bodyTextStack != null && !bodyTextStack.empty()) {
// what we do now is push one parameter onto the top set of parameters
Object parameters[] = (Object[]) digester.peekParams();
ArrayList params = (ArrayList) parameters[paramIndex];
if (params == null) {
params = new ArrayList();
parameters[paramIndex] = params;
}
params.add(bodyTextStack.pop());
}
}
}
/**
* A Rule that can be used to call multiple times a method as many times as needed
* (used for addServletMapping).
*/
final class CallMethodMultiRule extends CallMethodRule {
protected int multiParamIndex = 0;
public CallMethodMultiRule(String methodName, int paramCount, int multiParamIndex) {
super(methodName, paramCount);
this.multiParamIndex = multiParamIndex;
}
public void end() throws Exception {
// Retrieve or construct the parameter values array
Object parameters[] = null;
if (paramCount > 0) {
parameters = (Object[]) digester.popParams();
} else {
super.end();
}
ArrayList multiParams = (ArrayList) parameters[multiParamIndex];
// Construct the parameter values array we will need
// We only do the conversion if the param value is a String and
// the specified paramType is not String.
Object paramValues[] = new Object[paramTypes.length];
for (int i = 0; i < paramTypes.length; i++) {
if (i != multiParamIndex) {
// convert nulls and convert stringy parameters
// for non-stringy param types
if(parameters[i] == null || (parameters[i] instanceof String
&& !String.class.isAssignableFrom(paramTypes[i]))) {
paramValues[i] =
IntrospectionUtils.convert((String) parameters[i], paramTypes[i]);
} else {
paramValues[i] = parameters[i];
}
}
}
// Determine the target object for the method call
Object target;
if (targetOffset >= 0) {
target = digester.peek(targetOffset);
} else {
target = digester.peek(digester.getCount() + targetOffset);
}
if (target == null) {
StringBuffer sb = new StringBuffer();
sb.append("[CallMethodRule]{");
sb.append("");
sb.append("} Call target is null (");
sb.append("targetOffset=");
sb.append(targetOffset);
sb.append(",stackdepth=");
sb.append(digester.getCount());
sb.append(")");
throw new org.xml.sax.SAXException(sb.toString());
}
for (int j = 0; j < multiParams.size(); j++) {
Object param = multiParams.get(j);
if(param == null || (param instanceof String
&& !String.class.isAssignableFrom(paramTypes[multiParamIndex]))) {
paramValues[multiParamIndex] =
IntrospectionUtils.convert((String) param, paramTypes[multiParamIndex]);
} else {
paramValues[multiParamIndex] = param;
}
Object result = IntrospectionUtils.callMethodN(target, methodName,
paramValues, paramTypes);
}
}
}
/**
* A Rule that check if the annotations have to be loaded.
*
*/
final class IgnoreAnnotationsRule extends Rule {
public IgnoreAnnotationsRule() {
}
public void begin(String namespace, String name, Attributes attributes)
throws Exception {
Context context = (Context) digester.peek(digester.getCount() - 1);
String value = attributes.getValue("metadata-complete");
if ("true".equals(value)) {
context.setIgnoreAnnotations(true);
}
if (digester.getLogger().isDebugEnabled()) {
digester.getLogger().debug
(context.getClass().getName() + ".setIgnoreAnnotations( " +
context.getIgnoreAnnotations() + ")");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -