use of jp.ossc.nimbus.beans.NoSuchPropertyException in project nimbus by nimbus-org.
the class DataSetServletRequestParameterConverter method convert.
/**
* 指定されたオブジェクトを変換する。<p>
*
* @param obj 変換対象のオブジェクト
* @return 変換後のオブジェクト
* @exception ConvertException 変換に失敗した場合
*/
public Object convert(Object obj) throws ConvertException {
if (!(obj instanceof ServletRequest)) {
return null;
}
ServletRequest request = (ServletRequest) obj;
final Map paramMap = request.getParameterMap();
if (paramMap == null || paramMap.size() == 0) {
return null;
}
String defaultDsName = request.getParameter(dataSetParameterName);
if ((defaultDsName == null || defaultDsName.length() == 0) && request instanceof HttpServletRequest) {
HttpServletRequest httpReq = (HttpServletRequest) request;
String path = httpReq.getServletPath();
if (httpReq.getPathInfo() != null) {
path = path + httpReq.getPathInfo();
}
if (path != null) {
int index = path.lastIndexOf('.');
if (index != -1) {
path = path.substring(0, index);
}
defaultDsName = dataSetPathPrefix + path;
}
}
final Map currentDsMap = new HashMap();
final Iterator entries = paramMap.entrySet().iterator();
while (entries.hasNext()) {
final Map.Entry entry = (Map.Entry) entries.next();
final String key = (String) entry.getKey();
final int index = key.indexOf(datasetDelimiter);
if (index == -1 || index == key.length() - 1) {
continue;
}
String dsName = null;
if (index == 0) {
dsName = defaultDsName;
} else {
dsName = key.substring(0, index);
}
if (dsName == null) {
continue;
}
DataSet ds = (DataSet) currentDsMap.get(dsName);
if (ds == null) {
if (dataSetMap.containsKey(dsName)) {
ds = ((DataSet) dataSetMap.get(dsName)).cloneSchema();
} else if (beanFlowInvokerFactory != null && beanFlowInvokerFactory.containsFlow(dsName)) {
final BeanFlowInvoker beanFlowInvoker = beanFlowInvokerFactory.createFlow(dsName);
Object ret = null;
try {
ret = beanFlowInvoker.invokeFlow(null);
} catch (Exception e) {
throw new ConvertException("Exception occured in BeanFlow '" + dsName + "'", e);
}
if (!(ret instanceof DataSet)) {
throw new ConvertException("Result of BeanFlow '" + dsName + "' is not DataSet.");
}
ds = (DataSet) ret;
} else {
if (isIgnoreUnknownParameter) {
continue;
} else {
throw new ConvertException("Unknown DataSet : " + dsName);
}
}
currentDsMap.put(dsName, ds);
}
final String propStr = key.substring(index + 1);
Property prop = (Property) propertyCache.get(propStr);
if (prop == null) {
try {
prop = PropertyFactory.createProperty(propStr);
if (isIgnoreUnknownParameter) {
prop.setIgnoreNullProperty(true);
}
} catch (IllegalArgumentException e) {
throw new ConvertException("Parameter '" + key + "' is illegal.", e);
}
Property old = (Property) propertyCache.putIfAbsent(propStr, prop);
if (old != null) {
prop = old;
}
}
final String[] vals = (String[]) entry.getValue();
try {
if (prop instanceof NestedProperty) {
Property thisProp = ((NestedProperty) prop).getThisProperty();
if (thisProp instanceof NestedProperty) {
Property nestedProp = ((NestedProperty) prop).getNestedProperty();
Property nestedProp2 = ((NestedProperty) thisProp).getNestedProperty();
if (nestedProp2 instanceof IndexedProperty) {
Property thisProp2 = ((NestedProperty) thisProp).getThisProperty();
Object thisObj = thisProp2.getProperty(ds);
if (thisObj == null) {
if (isIgnoreUnknownParameter) {
continue;
} else {
throw new ConvertException("Parameter '" + key + "' is illegal.");
}
}
if (thisObj instanceof RecordList) {
setRecordListProperty((RecordList) thisObj, nestedProp.getPropertyName(), ((IndexedProperty) nestedProp2).getIndex(), vals);
} else {
// ありえない
prop.setProperty(ds, vals[vals.length - 1]);
}
} else {
Object thisObj = thisProp.getProperty(ds);
if (thisObj == null) {
if (isIgnoreUnknownParameter) {
continue;
} else {
throw new ConvertException("Parameter '" + key + "' is illegal.");
}
}
if (thisObj instanceof RecordList) {
setRecordListProperty((RecordList) thisObj, nestedProp.getPropertyName(), vals);
} else if (thisObj instanceof Record) {
setRecordProperty((Record) thisObj, nestedProp.getPropertyName(), nestedProp.getPropertyType(thisObj), vals);
} else {
nestedProp.setProperty(thisObj, vals[vals.length - 1]);
}
}
} else {
Object thisObj = thisProp.getProperty(ds);
if (thisObj == null) {
if (isIgnoreUnknownParameter) {
continue;
} else {
throw new ConvertException("Parameter '" + key + "' is illegal.");
}
}
Property nestedProp = ((NestedProperty) prop).getNestedProperty();
if (thisObj instanceof RecordList) {
setRecordListProperty((RecordList) thisObj, nestedProp.getPropertyName(), vals);
} else if (thisObj instanceof Record) {
setRecordProperty((Record) thisObj, nestedProp.getPropertyName(), nestedProp.getPropertyType(thisObj), vals);
} else {
nestedProp.setProperty(thisObj, vals[vals.length - 1]);
}
}
} else {
throw new ConvertException("Parameter '" + key + "' is illegal.");
}
} catch (PropertySetException e) {
Throwable cause = e.getCause();
if (cause instanceof ConvertException) {
throw (ConvertException) cause;
}
if (isIgnoreUnknownParameter) {
continue;
} else {
throw new ConvertException("Parameter '" + key + "' is illegal.", e);
}
} catch (NoSuchPropertyException e) {
if (isIgnoreUnknownParameter) {
continue;
} else {
throw new ConvertException("Parameter '" + key + "' is illegal.", e);
}
} catch (InvocationTargetException e) {
throw new ConvertException("Parameter '" + key + "' is illegal.", e.getTargetException());
}
}
if (currentDsMap.size() == 0) {
return null;
} else if (currentDsMap.size() == 1) {
return currentDsMap.values().iterator().next();
} else {
return currentDsMap;
}
}
use of jp.ossc.nimbus.beans.NoSuchPropertyException in project nimbus by nimbus-org.
the class BeanExchangeConverter method convert.
private Object convert(Object input, Object output, boolean isClone) throws ConvertException {
if (output == null) {
throw new ConvertException("Output is null.");
}
if (isClone) {
if (!(output instanceof Cloneable)) {
throw new ConvertException("Output is not cloneable.");
}
if (output instanceof DataSet) {
output = ((DataSet) output).cloneSchema();
} else if (output instanceof RecordList) {
output = ((RecordList) output).cloneSchema();
} else if (output instanceof Record) {
output = ((Record) output).cloneSchema();
} else {
try {
output = output.getClass().getMethod("clone", (Class[]) null).invoke(output, (Object[]) null);
} catch (NoSuchMethodException e) {
throw new ConvertException(e);
} catch (IllegalAccessException e) {
throw new ConvertException(e);
} catch (InvocationTargetException e) {
throw new ConvertException(e);
}
}
}
if (input == null) {
return output;
}
Object[] inputs = null;
if (input instanceof Collection) {
inputs = ((Collection) input).toArray();
} else if (input.getClass().isArray()) {
inputs = (Object[]) input;
}
if (inputs != null) {
if (inputs.length == 0) {
return output;
}
if (output instanceof RecordList) {
RecordList list = (RecordList) output;
for (int i = 0; i < inputs.length; i++) {
Record record = list.createRecord();
list.add(convert(inputs[i], record, false));
}
return list;
} else if (output instanceof Collection) {
Object[] outputs = ((Collection) output).toArray();
if (outputs.length == 0) {
throw new ConvertException("Size of collection is 0.");
}
for (int i = 0, imax = Math.min(inputs.length, outputs.length); i < imax; i++) {
outputs[i] = convert(inputs[i], outputs[i], false);
}
return outputs;
} else if (output.getClass().isArray()) {
Object[] outputs = (Object[]) output;
final Class componentType = output.getClass().getComponentType();
if (outputs.length == 0) {
if (componentType.isInterface() || componentType.isPrimitive()) {
throw new ConvertException("Length of array is 0.");
}
outputs = (Object[]) Array.newInstance(componentType, inputs.length);
try {
for (int i = 0; i < outputs.length; i++) {
outputs[i] = componentType.newInstance();
}
} catch (IllegalAccessException e) {
throw new ConvertException("Length of array is 0.", e);
} catch (InstantiationException e) {
throw new ConvertException("Length of array is 0.", e);
}
}
for (int i = 0, imax = Math.min(inputs.length, outputs.length); i < imax; i++) {
if (outputs[i] == null) {
if (componentType.isInterface() || componentType.isPrimitive()) {
throw new ConvertException("Element of array is null.");
}
try {
outputs[i] = componentType.newInstance();
} catch (IllegalAccessException e) {
throw new ConvertException("Element of array is null.", e);
} catch (InstantiationException e) {
throw new ConvertException("Element of array is null.", e);
}
}
outputs[i] = convert(inputs[i], outputs[i], false);
}
return outputs;
}
}
Map propMapping = propertyMapping;
boolean isOutputAutoMapping = false;
boolean isInputAutoMapping = false;
if (propMapping == null || propMapping.size() == 0) {
if (propMapping == null) {
propMapping = new HashMap();
}
if (output instanceof Record) {
Record record = (Record) output;
RecordSchema schema = record.getRecordSchema();
if (schema != null) {
for (int i = 0, imax = schema.getPropertySize(); i < imax; i++) {
propMapping.put(schema.getPropertyName(i), schema.getPropertyName(i));
}
}
if (propMapping.size() != 0) {
isOutputAutoMapping = true;
}
} else {
final SimpleProperty[] props = isFieldOnly(output.getClass()) ? SimpleProperty.getFieldProperties(output) : SimpleProperty.getProperties(output, !isAccessorOnly(output.getClass()));
for (int i = 0; i < props.length; i++) {
if (isEnabledPropertyName(output.getClass(), props[i].getPropertyName()) && props[i].isWritable(output.getClass())) {
propMapping.put(props[i].getPropertyName(), props[i].getPropertyName());
}
}
if (propMapping.size() != 0) {
isOutputAutoMapping = true;
}
}
if (!isOutputAutoMapping) {
if (input instanceof Record) {
Record record = (Record) input;
RecordSchema schema = record.getRecordSchema();
if (schema != null) {
for (int i = 0, imax = schema.getPropertySize(); i < imax; i++) {
propMapping.put(schema.getPropertyName(i), schema.getPropertyName(i));
}
}
if (propMapping.size() != 0) {
isInputAutoMapping = true;
}
} else {
final SimpleProperty[] props = isFieldOnly(output.getClass()) ? SimpleProperty.getFieldProperties(input) : SimpleProperty.getProperties(input, !isAccessorOnly(output.getClass()));
for (int i = 0; i < props.length; i++) {
if (isEnabledPropertyName(output.getClass(), props[i].getPropertyName()) && props[i].isReadable(input.getClass())) {
propMapping.put(props[i].getPropertyName(), props[i].getPropertyName());
}
}
if (propMapping.size() != 0) {
isInputAutoMapping = true;
}
}
}
if (propMapping.size() == 0) {
throw new ConvertException("PropertyMapping is null.");
}
}
if (isMakeSchema && (output instanceof Record) && ((Record) output).getRecordSchema() == null) {
StringBuilder buf = new StringBuilder();
final Iterator entries = propMapping.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry entry = (Map.Entry) entries.next();
String inputProp = (String) entry.getKey();
Object outputProp = entry.getValue();
try {
Property prop = propertyAccess.getProperty(inputProp);
Class propType = prop.getPropertyType(input);
if (outputProp instanceof String) {
buf.append(':').append(outputProp);
buf.append(',').append(propType.getName()).append('\n');
} else {
List outputProps = (List) outputProp;
for (int i = 0, imax = outputProps.size(); i < imax; i++) {
buf.append(':').append((String) outputProps.get(i));
buf.append(',').append(propType.getName()).append('\n');
}
}
} catch (IllegalArgumentException e) {
throw new ConvertException("Input property parse error. property=" + inputProp, e);
} catch (NoSuchPropertyException e) {
if (isOutputAutoMapping) {
continue;
}
throw new ConvertException("Input property get error. input=" + input + ", property=" + inputProp, e);
} catch (InvocationTargetException e) {
throw new ConvertException("Input property get error. input=" + input + ", property=" + inputProp, e);
}
}
if (buf.length() != 0) {
try {
((Record) output).setSchema(buf.toString());
} catch (PropertySchemaDefineException e) {
// 起こらない
}
}
}
final Iterator entries = propMapping.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry entry = (Map.Entry) entries.next();
String inputProp = (String) entry.getKey();
Object value = null;
try {
value = propertyAccess.get(input, inputProp);
} catch (IllegalArgumentException e) {
throw new ConvertException("Input property get error. input=" + input + ", property=" + inputProp, e);
} catch (NoSuchPropertyException e) {
if (isOutputAutoMapping) {
continue;
}
throw new ConvertException("Input property get error. input=" + input + ", property=" + inputProp, e);
} catch (InvocationTargetException e) {
throw new ConvertException("Input property get error. input=" + input + ", property=" + inputProp, e);
}
Object outputProp = entry.getValue();
if (outputProp instanceof String) {
try {
propertyAccess.set(output, (String) outputProp, value);
} catch (IllegalArgumentException e) {
throw new ConvertException("Output property set error. output=" + output + ", property=" + outputProp + ", value=" + value, e);
} catch (NoSuchPropertyException e) {
if (isInputAutoMapping) {
continue;
}
throw new ConvertException("Output property set error. output=" + output + ", property=" + outputProp + ", value=" + value, e);
} catch (InvocationTargetException e) {
throw new ConvertException("Output property set error. output=" + output + ", property=" + outputProp + ", value=" + value, e);
}
} else {
List outputProps = (List) outputProp;
try {
for (int i = 0, imax = outputProps.size(); i < imax; i++) {
propertyAccess.set(output, (String) outputProps.get(i), value);
}
} catch (IllegalArgumentException e) {
throw new ConvertException("Output property set error. output=" + output + ", property=" + outputProp + ", value=" + value, e);
} catch (NoSuchPropertyException e) {
if (isInputAutoMapping) {
continue;
}
throw new ConvertException("Output property set error. output=" + output + ", property=" + outputProp + ", value=" + value, e);
} catch (InvocationTargetException e) {
throw new ConvertException("Output property set error. output=" + output + ", property=" + outputProp + ", value=" + value, e);
}
}
}
return output;
}
use of jp.ossc.nimbus.beans.NoSuchPropertyException in project nimbus by nimbus-org.
the class AuthenticateInterceptorService method checkAuthenticated.
protected Object checkAuthenticated(HttpServletRequest request) throws AuthenticateException {
Object requestObject = request.getAttribute(requestObjectAttributeName);
if (requestObject == null) {
if (threadContext != null) {
requestObject = threadContext.get(requestObjectContextKey);
}
if (requestObject == null) {
throw new IllegalAuthenticateException("RequestObject is null.");
}
}
Object authenticatedInfo = null;
HttpSession session = request.getSession(false);
if (session != null) {
authenticatedInfo = session.getAttribute(authenticatedInfoAttributeName);
if (authenticatedInfo != null && authenticatedInfo instanceof AuthenticatedInfo) {
authenticatedInfo = ((AuthenticatedInfo) authenticatedInfo).authenticatedInfo;
}
}
if (authenticatedInfo == null && authenticateStore != null) {
authenticatedInfo = authenticateStore.activate(request, requestObject);
if (session == null) {
session = request.getSession(true);
}
session.setAttribute(authenticatedInfoAttributeName, new AuthenticatedInfo(authenticatedInfo, authenticateStoreServiceName));
}
if (authenticatedInfo == null) {
throw new NoAuthenticateException("AuthenticatedInfo is null.");
}
Iterator entries = authenticatedInfoMapping.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry entry = (Map.Entry) entries.next();
Object requestValue = null;
try {
requestValue = propertyAccess.get(requestObject, (String) entry.getKey());
} catch (IllegalArgumentException e) {
throw new IllegalAuthenticateException("Authenticated value '" + entry.getKey() + "' cannot acquire from a request.", e);
} catch (NoSuchPropertyException e) {
throw new IllegalAuthenticateException("Authenticated value '" + entry.getKey() + "' cannot acquire from a request.", e);
} catch (InvocationTargetException e) {
throw new IllegalAuthenticateException("Authenticated value '" + entry.getKey() + "' cannot acquire from a request.", e.getTargetException());
}
if (requestValue == null) {
throw new IllegalAuthenticateException("Authenticated value '" + entry.getKey() + "' cannot acquire from a request. value=null");
}
Object authenticatedValue = null;
try {
authenticatedValue = propertyAccess.get(authenticatedInfo, (String) entry.getValue());
} catch (IllegalArgumentException e) {
throw new IllegalAuthenticateException("Authenticated value '" + entry.getValue() + "' cannot acquire from a session.", e);
} catch (NoSuchPropertyException e) {
throw new IllegalAuthenticateException("Authenticated value '" + entry.getValue() + "' cannot acquire from a session.", e);
} catch (InvocationTargetException e) {
throw new IllegalAuthenticateException("Authenticated value '" + entry.getValue() + "' cannot acquire from a session.", e.getTargetException());
}
if (authenticatedValue == null) {
throw new IllegalAuthenticateException("Authenticated value '" + entry.getValue() + "' cannot acquire from a session. value=null");
}
if (!requestValue.equals(authenticatedValue)) {
throw new IllegalAuthenticateException("Authenticated value '" + entry.getKey() + "' and '" + entry.getValue() + "' are not in agreement. requestValue=" + requestValue + ", authenticatedValue=" + authenticatedValue);
}
}
return authenticatedInfo;
}
use of jp.ossc.nimbus.beans.NoSuchPropertyException in project nimbus by nimbus-org.
the class BlockadeInterceptorService method isMatchBlockadeMapping.
private boolean isMatchBlockadeMapping(Map blockadeFilterMap, Object blockade) throws BlockadeProcessException {
boolean isMatch = true;
Iterator entries = blockadeFilterMap.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry entry = (Map.Entry) entries.next();
Object requestValue = entry.getValue();
Object blockadeValue = null;
try {
blockadeValue = propertyAccess.get(blockade, (String) entry.getKey());
} catch (IllegalArgumentException e) {
throw new BlockadeProcessException("BlockadeCodeMaster value '" + entry.getKey() + "' cannot acquire from a codemaster.", e);
} catch (NoSuchPropertyException e) {
throw new BlockadeProcessException("BlockadeCodeMaster value '" + entry.getKey() + "' cannot acquire from a codemaster.", e);
} catch (InvocationTargetException e) {
throw new BlockadeProcessException("BlockadeCodeMaster value '" + entry.getKey() + "' cannot acquire from a codemaster.", e.getTargetException());
}
if ((requestValue == null && blockadeValue != null) || (requestValue != null && !requestValue.equals(blockadeValue))) {
isMatch = false;
break;
}
}
return isMatch;
}
use of jp.ossc.nimbus.beans.NoSuchPropertyException in project nimbus by nimbus-org.
the class BlockadeInterceptorService method applySpecialUserMapping.
private Object applySpecialUserMapping(Object requestObject, Object primaryKey) throws BlockadeProcessException {
Iterator entries = specialUserMapping.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry entry = (Map.Entry) entries.next();
Object key = null;
try {
key = propertyAccess.get(requestObject, (String) entry.getKey());
} catch (IllegalArgumentException e) {
throw new BlockadeProcessException("SpecialUserCodeMaster value '" + entry.getKey() + "' cannot acquire from a request.", e);
} catch (NoSuchPropertyException e) {
throw new BlockadeProcessException("SpecialUserCodeMaster value '" + entry.getKey() + "' cannot acquire from a request.", e);
} catch (InvocationTargetException e) {
throw new BlockadeProcessException("SpecialUserCodeMaster value '" + entry.getKey() + "' cannot acquire from a request.", e.getTargetException());
}
try {
propertyAccess.set(primaryKey, (String) entry.getValue(), key);
} catch (IllegalArgumentException e) {
throw new BlockadeProcessException("SpecialUserCodeMaster value '" + entry.getKey() + "' cannot set to a record.", e);
} catch (NoSuchPropertyException e) {
throw new BlockadeProcessException("SpecialUserCodeMaster value '" + entry.getKey() + "' cannot set to a record.", e);
} catch (InvocationTargetException e) {
throw new BlockadeProcessException("SpecialUserCodeMaster value '" + entry.getKey() + "' cannot set to a record.", e.getTargetException());
}
}
return primaryKey;
}
Aggregations