keycloak-federation
静的公開メンバ関数 | 静的関数 | 静的非公開変数類 | 全メンバ一覧
org.freedesktop.dbus.Marshalling クラス
org.freedesktop.dbus.Marshalling 連携図
Collaboration graph

静的公開メンバ関数

static String getDBusType (Type[] c) throws DBusException
 
static String [] getDBusType (Type c) throws DBusException
 
static String [] getDBusType (Type c, boolean basic) throws DBusException
 
static String [] recursiveGetDBusType (Type c, boolean basic, int level) throws DBusException
 
static int getJavaType (String dbus, List< Type > rv, int limit) throws DBusException
 
static Object [] convertParameters (Object[] parameters, Type[] types, AbstractConnection conn) throws DBusException
 

静的関数

static Object deSerializeParameter (Object parameter, Type type, AbstractConnection conn) throws Exception
 
static List< Object > deSerializeParameters (List< Object > parameters, Type type, AbstractConnection conn) throws Exception
 
static Object [] deSerializeParameters (Object[] parameters, Type[] types, AbstractConnection conn) throws Exception
 

静的非公開変数類

static Map< Type, String[]> typeCache = new HashMap<Type, String[]>()
 
static StringBuffer [] out = new StringBuffer[10]
 

詳解

Contains static methods for marshalling values.

関数詳解

◆ convertParameters()

static Object [] org.freedesktop.dbus.Marshalling.convertParameters ( Object []  parameters,
Type []  types,
AbstractConnection  conn 
) throws DBusException
inlinestatic

Recursively converts types for serialization onto DBus.

引数
parametersThe parameters to convert.
typesThe (possibly generic) types of the parameters.
戻り値
The converted parameters.
例外
DBusExceptionThrown if there is an error in converting the objects.
354  {
355  if (null == parameters) return null;
356  for (int i = 0; i < parameters.length; i++) {
357  if (Debug.debug)
358  Debug.print(Debug.VERBOSE, "Converting " + i + " from " + parameters[i] + " to " + types[i]);
359  if (null == parameters[i]) continue;
360 
361  if (parameters[i] instanceof DBusSerializable) {
362  for (Method m : parameters[i].getClass().getDeclaredMethods())
363  if (m.getName().equals("deserialize")) {
364  Type[] newtypes = m.getParameterTypes();
365  Type[] expand = new Type[types.length + newtypes.length - 1];
366  System.arraycopy(types, 0, expand, 0, i);
367  System.arraycopy(newtypes, 0, expand, i, newtypes.length);
368  System.arraycopy(types, i + 1, expand, i + newtypes.length, types.length - i - 1);
369  types = expand;
370  Object[] newparams = ((DBusSerializable) parameters[i]).serialize();
371  Object[] exparams = new Object[parameters.length + newparams.length - 1];
372  System.arraycopy(parameters, 0, exparams, 0, i);
373  System.arraycopy(newparams, 0, exparams, i, newparams.length);
374  System.arraycopy(parameters, i + 1, exparams, i + newparams.length, parameters.length - i - 1);
375  parameters = exparams;
376  }
377  i--;
378  } else if (parameters[i] instanceof Tuple) {
379  Type[] newtypes = ((ParameterizedType) types[i]).getActualTypeArguments();
380  Type[] expand = new Type[types.length + newtypes.length - 1];
381  System.arraycopy(types, 0, expand, 0, i);
382  System.arraycopy(newtypes, 0, expand, i, newtypes.length);
383  System.arraycopy(types, i + 1, expand, i + newtypes.length, types.length - i - 1);
384  types = expand;
385  Object[] newparams = ((Tuple) parameters[i]).getParameters();
386  Object[] exparams = new Object[parameters.length + newparams.length - 1];
387  System.arraycopy(parameters, 0, exparams, 0, i);
388  System.arraycopy(newparams, 0, exparams, i, newparams.length);
389  System.arraycopy(parameters, i + 1, exparams, i + newparams.length, parameters.length - i - 1);
390  parameters = exparams;
391  if (Debug.debug)
392  Debug.print(Debug.VERBOSE, "New params: " + Arrays.deepToString(parameters) + " new types: " + Arrays.deepToString(types));
393  i--;
394  } else if (types[i] instanceof TypeVariable &&
395  !(parameters[i] instanceof Variant))
396  // its an unwrapped variant, wrap it
397  parameters[i] = new Variant<Object>(parameters[i]);
398  else if (parameters[i] instanceof DBusInterface)
399  parameters[i] = conn.getExportedObject((DBusInterface) parameters[i]);
400  }
401  return parameters;
402  }

◆ deSerializeParameter()

static Object org.freedesktop.dbus.Marshalling.deSerializeParameter ( Object  parameter,
Type  type,
AbstractConnection  conn 
) throws Exception
inlinestaticpackage
405  {
406  if (Debug.debug)
407  Debug.print(Debug.VERBOSE, "Deserializing from " + parameter.getClass() + " to " + type.getClass());
408  if (null == parameter)
409  return null;
410 
411  // its a wrapped variant, unwrap it
412  if (type instanceof TypeVariable
413  && parameter instanceof Variant) {
414  parameter = ((Variant) parameter).getValue();
415  }
416 
417  // Turn a signature into a Type[]
418  if (type instanceof Class
419  && ((Class) type).isArray()
420  && ((Class) type).getComponentType().equals(Type.class)
421  && parameter instanceof String) {
422  Vector<Type> rv = new Vector<Type>();
423  getJavaType((String) parameter, rv, -1);
424  parameter = rv.toArray(new Type[0]);
425  }
426 
427  // its an object path, get/create the proxy
428  if (parameter instanceof ObjectPath) {
429  if (type instanceof Class && DBusInterface.class.isAssignableFrom((Class) type))
430  parameter = conn.getExportedObject(
431  ((ObjectPath) parameter).source,
432  ((ObjectPath) parameter).path);
433  else
434  parameter = new Path(((ObjectPath) parameter).path);
435  }
436 
437  // it should be a struct. create it
438  if (parameter instanceof Object[] &&
439  type instanceof Class &&
440  Struct.class.isAssignableFrom((Class) type)) {
441  if (Debug.debug) Debug.print(Debug.VERBOSE, "Creating Struct " + type + " from " + parameter);
442  Type[] ts = Container.getTypeCache(type);
443  if (null == ts) {
444  Field[] fs = ((Class) type).getDeclaredFields();
445  ts = new Type[fs.length];
446  for (Field f : fs) {
447  Position p = f.getAnnotation(Position.class);
448  if (null == p) continue;
449  ts[p.value()] = f.getGenericType();
450  }
451  Container.putTypeCache(type, ts);
452  }
453 
454  // recurse over struct contents
455  parameter = deSerializeParameters((Object[]) parameter, ts, conn);
456  for (Constructor con : ((Class) type).getDeclaredConstructors()) {
457  try {
458  parameter = con.newInstance((Object[]) parameter);
459  break;
460  } catch (IllegalArgumentException IAe) {
461  }
462  }
463  }
464 
465  // recurse over arrays
466  if (parameter instanceof Object[]) {
467  Type[] ts = new Type[((Object[]) parameter).length];
468  Arrays.fill(ts, parameter.getClass().getComponentType());
469  parameter = deSerializeParameters((Object[]) parameter,
470  ts, conn);
471  }
472  if (parameter instanceof List) {
473  Type type2;
474  if (type instanceof ParameterizedType)
475  type2 = ((ParameterizedType) type).getActualTypeArguments()[0];
476  else if (type instanceof GenericArrayType)
477  type2 = ((GenericArrayType) type).getGenericComponentType();
478  else if (type instanceof Class && ((Class) type).isArray())
479  type2 = ((Class) type).getComponentType();
480  else
481  type2 = null;
482  if (null != type2)
483  parameter = deSerializeParameters((List) parameter, type2, conn);
484  }
485 
486  // correct floats if appropriate
487  if (type.equals(Float.class) || type.equals(Float.TYPE))
488  if (!(parameter instanceof Float))
489  parameter = ((Number) parameter).floatValue();
490 
491  // make sure arrays are in the correct format
492  if (parameter instanceof Object[] ||
493  parameter instanceof List ||
494  parameter.getClass().isArray()) {
495  if (type instanceof ParameterizedType)
496  parameter = ArrayFrob.convert(parameter,
497  (Class<? extends Object>) ((ParameterizedType) type).getRawType());
498  else if (type instanceof GenericArrayType) {
499  Type ct = ((GenericArrayType) type).getGenericComponentType();
500  Class cc = null;
501  if (ct instanceof Class)
502  cc = (Class) ct;
503  if (ct instanceof ParameterizedType)
504  cc = (Class) ((ParameterizedType) ct).getRawType();
505  Object o = Array.newInstance(cc, 0);
506  parameter = ArrayFrob.convert(parameter,
507  o.getClass());
508  } else if (type instanceof Class &&
509  ((Class) type).isArray()) {
510  Class cc = ((Class) type).getComponentType();
511  if ((cc.equals(Float.class) || cc.equals(Float.TYPE))
512  && (parameter instanceof double[])) {
513  double[] tmp1 = (double[]) parameter;
514  float[] tmp2 = new float[tmp1.length];
515  for (int i = 0; i < tmp1.length; i++)
516  tmp2[i] = (float) tmp1[i];
517  parameter = tmp2;
518  }
519  Object o = Array.newInstance(cc, 0);
520  parameter = ArrayFrob.convert(parameter,
521  o.getClass());
522  }
523  }
524  if (parameter instanceof DBusMap) {
525  if (Debug.debug) Debug.print(Debug.VERBOSE, "Deserializing a Map");
526  DBusMap dmap = (DBusMap) parameter;
527  Type[] maptypes = ((ParameterizedType) type).getActualTypeArguments();
528  for (int i = 0; i < dmap.entries.length; i++) {
529  dmap.entries[i][0] = deSerializeParameter(dmap.entries[i][0], maptypes[0], conn);
530  dmap.entries[i][1] = deSerializeParameter(dmap.entries[i][1], maptypes[1], conn);
531  }
532  }
533  return parameter;
534  }
static int getJavaType(String dbus, List< Type > rv, int limit)
Definition: Marshalling.java:255
static List< Object > deSerializeParameters(List< Object > parameters, Type type, AbstractConnection conn)
Definition: Marshalling.java:536
static Object deSerializeParameter(Object parameter, Type type, AbstractConnection conn)
Definition: Marshalling.java:405

◆ deSerializeParameters() [1/2]

static List<Object> org.freedesktop.dbus.Marshalling.deSerializeParameters ( List< Object >  parameters,
Type  type,
AbstractConnection  conn 
) throws Exception
inlinestaticpackage
536  {
537  if (Debug.debug) Debug.print(Debug.VERBOSE, "Deserializing from " + parameters + " to " + type);
538  if (null == parameters) return null;
539  for (int i = 0; i < parameters.size(); i++) {
540  if (null == parameters.get(i)) continue;
541 
542  /* DO NOT DO THIS! IT'S REALLY NOT SUPPORTED!
543  * if (type instanceof Class &&
544  DBusSerializable.class.isAssignableFrom((Class) types[i])) {
545  for (Method m: ((Class) types[i]).getDeclaredMethods())
546  if (m.getName().equals("deserialize")) {
547  Type[] newtypes = m.getGenericParameterTypes();
548  try {
549  Object[] sub = new Object[newtypes.length];
550  System.arraycopy(parameters, i, sub, 0, newtypes.length);
551  sub = deSerializeParameters(sub, newtypes, conn);
552  DBusSerializable sz = (DBusSerializable) ((Class) types[i]).newInstance();
553  m.invoke(sz, sub);
554  Object[] compress = new Object[parameters.length - newtypes.length + 1];
555  System.arraycopy(parameters, 0, compress, 0, i);
556  compress[i] = sz;
557  System.arraycopy(parameters, i + newtypes.length, compress, i+1, parameters.length - i - newtypes.length);
558  parameters = compress;
559  } catch (ArrayIndexOutOfBoundsException AIOOBe) {
560  if (AbstractConnection.EXCEPTION_DEBUG && Debug.debug) Debug.print(Debug.ERR, AIOOBe);
561  throw new DBusException("Not enough elements to create custom object from serialized data ("+(parameters.size()-i)+" < "+(newtypes.length)+")");
562  }
563  }
564  } else*/
565  parameters.set(i, deSerializeParameter(parameters.get(i), type, conn));
566  }
567  return parameters;
568  }
static Object deSerializeParameter(Object parameter, Type type, AbstractConnection conn)
Definition: Marshalling.java:405

◆ deSerializeParameters() [2/2]

static Object [] org.freedesktop.dbus.Marshalling.deSerializeParameters ( Object []  parameters,
Type []  types,
AbstractConnection  conn 
) throws Exception
inlinestaticpackage
571  {
572  if (Debug.debug)
573  Debug.print(Debug.VERBOSE, "Deserializing from " + Arrays.deepToString(parameters) + " to " + Arrays.deepToString(types));
574  if (null == parameters) return null;
575 
576  if (types.length == 1 && types[0] instanceof ParameterizedType
577  && Tuple.class.isAssignableFrom((Class) ((ParameterizedType) types[0]).getRawType())) {
578  types = ((ParameterizedType) types[0]).getActualTypeArguments();
579  }
580 
581  for (int i = 0; i < parameters.length; i++) {
582  // CHECK IF ARRAYS HAVE THE SAME LENGTH <-- has to happen after expanding parameters
583  if (i >= types.length) {
584  if (Debug.debug) {
585  for (int j = 0; j < parameters.length; j++) {
586  Debug.print(Debug.ERR, String.format("Error, Parameters difference (%1d, '%2s')", j, parameters[j].toString()));
587  }
588  }
589  throw new DBusException(getString("errorDeserializingMessage"));
590  }
591  if (null == parameters[i]) continue;
592 
593  if ((types[i] instanceof Class &&
594  DBusSerializable.class.isAssignableFrom((Class<? extends Object>) types[i])) ||
595  (types[i] instanceof ParameterizedType &&
596  DBusSerializable.class.isAssignableFrom((Class<? extends Object>) ((ParameterizedType) types[i]).getRawType()))) {
597  Class<? extends DBusSerializable> dsc;
598  if (types[i] instanceof Class)
599  dsc = (Class<? extends DBusSerializable>) types[i];
600  else
601  dsc = (Class<? extends DBusSerializable>) ((ParameterizedType) types[i]).getRawType();
602  for (Method m : dsc.getDeclaredMethods())
603  if (m.getName().equals("deserialize")) {
604  Type[] newtypes = m.getGenericParameterTypes();
605  try {
606  Object[] sub = new Object[newtypes.length];
607  System.arraycopy(parameters, i, sub, 0, newtypes.length);
608  sub = deSerializeParameters(sub, newtypes, conn);
609  DBusSerializable sz = dsc.newInstance();
610  m.invoke(sz, sub);
611  Object[] compress = new Object[parameters.length - newtypes.length + 1];
612  System.arraycopy(parameters, 0, compress, 0, i);
613  compress[i] = sz;
614  System.arraycopy(parameters, i + newtypes.length, compress, i + 1, parameters.length - i - newtypes.length);
615  parameters = compress;
616  } catch (ArrayIndexOutOfBoundsException AIOOBe) {
617  if (AbstractConnection.EXCEPTION_DEBUG && Debug.debug) Debug.print(Debug.ERR, AIOOBe);
618  throw new DBusException(MessageFormat.format(getString("notEnoughElementsToCreateCustomObject"),
619  new Object[]{parameters.length - i, newtypes.length}));
620  }
621  }
622  } else
623  parameters[i] = deSerializeParameter(parameters[i], types[i], conn);
624  }
625  return parameters;
626  }
static List< Object > deSerializeParameters(List< Object > parameters, Type type, AbstractConnection conn)
Definition: Marshalling.java:536
static Object deSerializeParameter(Object parameter, Type type, AbstractConnection conn)
Definition: Marshalling.java:405

◆ getDBusType() [1/3]

static String org.freedesktop.dbus.Marshalling.getDBusType ( Type []  c) throws DBusException
inlinestatic

Will return the DBus type corresponding to the given Java type. Note, container type should have their ParameterizedType not their Class passed in here.

引数
cThe Java types.
戻り値
The DBus types.
例外
DBusExceptionIf the given type cannot be converted to a DBus type.
51  {
52  StringBuffer sb = new StringBuffer();
53  for (Type t : c)
54  for (String s : getDBusType(t))
55  sb.append(s);
56  return sb.toString();
57  }
static String getDBusType(Type[] c)
Definition: Marshalling.java:51

◆ getDBusType() [2/3]

static String [] org.freedesktop.dbus.Marshalling.getDBusType ( Type  c) throws DBusException
inlinestatic

Will return the DBus type corresponding to the given Java type. Note, container type should have their ParameterizedType not their Class passed in here.

引数
cThe Java type.
戻り値
The DBus type.
例外
DBusExceptionIf the given type cannot be converted to a DBus type.
68  {
69  String[] cached = typeCache.get(c);
70  if (null != cached) return cached;
71  cached = getDBusType(c, false);
72  typeCache.put(c, cached);
73  return cached;
74  }
static String getDBusType(Type[] c)
Definition: Marshalling.java:51
static Map< Type, String[]> typeCache
Definition: Marshalling.java:40

◆ getDBusType() [3/3]

static String [] org.freedesktop.dbus.Marshalling.getDBusType ( Type  c,
boolean  basic 
) throws DBusException
inlinestatic

Will return the DBus type corresponding to the given Java type. Note, container type should have their ParameterizedType not their Class passed in here.

引数
cThe Java type.
basicIf true enforces this to be a non-compound type. (compound types are Maps, Structs and Lists/arrays).
戻り値
The DBus type.
例外
DBusExceptionIf the given type cannot be converted to a DBus type.
86  {
87  return recursiveGetDBusType(c, basic, 0);
88  }
static String [] recursiveGetDBusType(Type c, boolean basic, int level)
Definition: Marshalling.java:93

◆ getJavaType()

static int org.freedesktop.dbus.Marshalling.getJavaType ( String  dbus,
List< Type >  rv,
int  limit 
) throws DBusException
inlinestatic

Converts a dbus type string into Java Type objects,

引数
dbusThe DBus type or types.
rvVector to return the types in.
limitMaximum number of types to parse (-1 == nolimit).
戻り値
number of characters parsed from the type string.
255  {
256  if (null == dbus || "".equals(dbus) || 0 == limit) return 0;
257 
258  try {
259  int i = 0;
260  for (; i < dbus.length() && (-1 == limit || limit > rv.size()); i++)
261  switch (dbus.charAt(i)) {
262  case Message.ArgumentType.STRUCT1:
263  int j = i + 1;
264  for (int c = 1; c > 0; j++) {
265  if (')' == dbus.charAt(j)) c--;
266  else if (Message.ArgumentType.STRUCT1 == dbus.charAt(j)) c++;
267  }
268 
269  Vector<Type> contained = new Vector<Type>();
270  int c = getJavaType(dbus.substring(i + 1, j - 1), contained, -1);
271  rv.add(new DBusStructType(contained.toArray(new Type[0])));
272  i = j;
273  break;
274  case Message.ArgumentType.ARRAY:
275  if (Message.ArgumentType.DICT_ENTRY1 == dbus.charAt(i + 1)) {
276  contained = new Vector<Type>();
277  c = getJavaType(dbus.substring(i + 2), contained, 2);
278  rv.add(new DBusMapType(contained.get(0), contained.get(1)));
279  i += (c + 2);
280  } else {
281  contained = new Vector<Type>();
282  c = getJavaType(dbus.substring(i + 1), contained, 1);
283  rv.add(new DBusListType(contained.get(0)));
284  i += c;
285  }
286  break;
287  case Message.ArgumentType.VARIANT:
288  rv.add(Variant.class);
289  break;
290  case Message.ArgumentType.BOOLEAN:
291  rv.add(Boolean.class);
292  break;
293  case Message.ArgumentType.INT16:
294  rv.add(Short.class);
295  break;
296  case Message.ArgumentType.BYTE:
297  rv.add(Byte.class);
298  break;
299  case Message.ArgumentType.OBJECT_PATH:
300  rv.add(DBusInterface.class);
301  break;
302  case Message.ArgumentType.UINT16:
303  rv.add(UInt16.class);
304  break;
305  case Message.ArgumentType.INT32:
306  rv.add(Integer.class);
307  break;
308  case Message.ArgumentType.UINT32:
309  rv.add(UInt32.class);
310  break;
311  case Message.ArgumentType.INT64:
312  rv.add(Long.class);
313  break;
314  case Message.ArgumentType.UINT64:
315  rv.add(UInt64.class);
316  break;
317  case Message.ArgumentType.DOUBLE:
318  rv.add(Double.class);
319  break;
320  case Message.ArgumentType.FLOAT:
321  rv.add(Float.class);
322  break;
323  case Message.ArgumentType.STRING:
324  rv.add(String.class);
325  break;
326  case Message.ArgumentType.SIGNATURE:
327  rv.add(Type[].class);
328  break;
329  case Message.ArgumentType.DICT_ENTRY1:
330  rv.add(Map.Entry.class);
331  contained = new Vector<Type>();
332  c = getJavaType(dbus.substring(i + 1), contained, 2);
333  i += c + 1;
334  break;
335  default:
336  throw new DBusException(MessageFormat.format(getString("parseDBusSignatureFailure"), new Object[]{dbus, dbus.charAt(i)}));
337  }
338  return i;
339  } catch (IndexOutOfBoundsException IOOBe) {
340  if (AbstractConnection.EXCEPTION_DEBUG && Debug.debug) Debug.print(Debug.ERR, IOOBe);
341  throw new DBusException(getString("parseDBusTypeSignatureFailure") + dbus);
342  }
343  }
static int getJavaType(String dbus, List< Type > rv, int limit)
Definition: Marshalling.java:255

◆ recursiveGetDBusType()

static String [] org.freedesktop.dbus.Marshalling.recursiveGetDBusType ( Type  c,
boolean  basic,
int  level 
) throws DBusException
inlinestatic
93  {
94  if (out.length <= level) {
95  StringBuffer[] newout = new StringBuffer[out.length];
96  System.arraycopy(out, 0, newout, 0, out.length);
97  out = newout;
98  }
99  if (null == out[level]) out[level] = new StringBuffer();
100  else out[level].delete(0, out[level].length());
101 
102  if (basic && !(c instanceof Class))
103  throw new DBusException(c + getString("notBasicType"));
104 
105  if (c instanceof TypeVariable) out[level].append((char) Message.ArgumentType.VARIANT);
106  else if (c instanceof GenericArrayType) {
107  out[level].append((char) Message.ArgumentType.ARRAY);
108  String[] s = recursiveGetDBusType(((GenericArrayType) c).getGenericComponentType(), false, level + 1);
109  if (s.length != 1) throw new DBusException(getString("multiValuedArrayNotPermitted"));
110  out[level].append(s[0]);
111  } else if ((c instanceof Class &&
112  DBusSerializable.class.isAssignableFrom((Class<? extends Object>) c)) ||
113  (c instanceof ParameterizedType &&
114  DBusSerializable.class.isAssignableFrom((Class<? extends Object>) ((ParameterizedType) c).getRawType()))) {
115  // it's a custom serializable type
116  Type[] newtypes = null;
117  if (c instanceof Class) {
118  for (Method m : ((Class<? extends Object>) c).getDeclaredMethods())
119  if (m.getName().equals("deserialize"))
120  newtypes = m.getGenericParameterTypes();
121  } else
122  for (Method m : ((Class<? extends Object>) ((ParameterizedType) c).getRawType()).getDeclaredMethods())
123  if (m.getName().equals("deserialize"))
124  newtypes = m.getGenericParameterTypes();
125 
126  if (null == newtypes) throw new DBusException(getString("mustImplementDeserializeMethod"));
127 
128  String[] sigs = new String[newtypes.length];
129  for (int j = 0; j < sigs.length; j++) {
130  String[] ss = recursiveGetDBusType(newtypes[j], false, level + 1);
131  if (1 != ss.length) throw new DBusException(getString("mustSerializeNativeDBusTypes"));
132  sigs[j] = ss[0];
133  }
134  return sigs;
135  } else if (c instanceof ParameterizedType) {
136  ParameterizedType p = (ParameterizedType) c;
137  if (p.getRawType().equals(Map.class)) {
138  out[level].append("a{");
139  Type[] t = p.getActualTypeArguments();
140  try {
141  String[] s = recursiveGetDBusType(t[0], true, level + 1);
142  if (s.length != 1) throw new DBusException(getString("multiValuedArrayNotPermitted"));
143  out[level].append(s[0]);
144  s = recursiveGetDBusType(t[1], false, level + 1);
145  if (s.length != 1) throw new DBusException(getString("multiValuedArrayNotPermitted"));
146  out[level].append(s[0]);
147  } catch (ArrayIndexOutOfBoundsException AIOOBe) {
148  if (AbstractConnection.EXCEPTION_DEBUG && Debug.debug) Debug.print(Debug.ERR, AIOOBe);
149  throw new DBusException(getString("mapParameters"));
150  }
151  out[level].append('}');
152  } else if (List.class.isAssignableFrom((Class<? extends Object>) p.getRawType())) {
153  for (Type t : p.getActualTypeArguments()) {
154  if (Type.class.equals(t))
155  out[level].append((char) Message.ArgumentType.SIGNATURE);
156  else {
157  String[] s = recursiveGetDBusType(t, false, level + 1);
158  if (s.length != 1) throw new DBusException(getString("multiValuedArrayNotPermitted"));
159  out[level].append((char) Message.ArgumentType.ARRAY);
160  out[level].append(s[0]);
161  }
162  }
163  } else if (p.getRawType().equals(Variant.class)) {
164  out[level].append((char) Message.ArgumentType.VARIANT);
165  } else if (DBusInterface.class.isAssignableFrom((Class<? extends Object>) p.getRawType())) {
166  out[level].append((char) Message.ArgumentType.OBJECT_PATH);
167  } else if (Tuple.class.isAssignableFrom((Class<? extends Object>) p.getRawType())) {
168  Type[] ts = p.getActualTypeArguments();
169  Vector<String> vs = new Vector<String>();
170  for (Type t : ts)
171  for (String s : recursiveGetDBusType(t, false, level + 1))
172  vs.add(s);
173  return vs.toArray(new String[0]);
174  } else
175  throw new DBusException(getString("nonExportableParameterizedType") + c);
176  } else if (c.equals(Byte.class)) out[level].append((char) Message.ArgumentType.BYTE);
177  else if (c.equals(Byte.TYPE)) out[level].append((char) Message.ArgumentType.BYTE);
178  else if (c.equals(Boolean.class)) out[level].append((char) Message.ArgumentType.BOOLEAN);
179  else if (c.equals(Boolean.TYPE)) out[level].append((char) Message.ArgumentType.BOOLEAN);
180  else if (c.equals(Short.class)) out[level].append((char) Message.ArgumentType.INT16);
181  else if (c.equals(Short.TYPE)) out[level].append((char) Message.ArgumentType.INT16);
182  else if (c.equals(UInt16.class)) out[level].append((char) Message.ArgumentType.UINT16);
183  else if (c.equals(Integer.class)) out[level].append((char) Message.ArgumentType.INT32);
184  else if (c.equals(Integer.TYPE)) out[level].append((char) Message.ArgumentType.INT32);
185  else if (c.equals(UInt32.class)) out[level].append((char) Message.ArgumentType.UINT32);
186  else if (c.equals(Long.class)) out[level].append((char) Message.ArgumentType.INT64);
187  else if (c.equals(Long.TYPE)) out[level].append((char) Message.ArgumentType.INT64);
188  else if (c.equals(UInt64.class)) out[level].append((char) Message.ArgumentType.UINT64);
189  else if (c.equals(Double.class)) out[level].append((char) Message.ArgumentType.DOUBLE);
190  else if (c.equals(Double.TYPE)) out[level].append((char) Message.ArgumentType.DOUBLE);
191  else if (c.equals(Float.class) && AbstractConnection.FLOAT_SUPPORT)
192  out[level].append((char) Message.ArgumentType.FLOAT);
193  else if (c.equals(Float.class)) out[level].append((char) Message.ArgumentType.DOUBLE);
194  else if (c.equals(Float.TYPE) && AbstractConnection.FLOAT_SUPPORT)
195  out[level].append((char) Message.ArgumentType.FLOAT);
196  else if (c.equals(Float.TYPE)) out[level].append((char) Message.ArgumentType.DOUBLE);
197  else if (c.equals(String.class)) out[level].append((char) Message.ArgumentType.STRING);
198  else if (c.equals(Variant.class)) out[level].append((char) Message.ArgumentType.VARIANT);
199  else if (c instanceof Class &&
200  DBusInterface.class.isAssignableFrom((Class<? extends Object>) c))
201  out[level].append((char) Message.ArgumentType.OBJECT_PATH);
202  else if (c instanceof Class &&
203  Path.class.equals((Class<? extends Object>) c))
204  out[level].append((char) Message.ArgumentType.OBJECT_PATH);
205  else if (c instanceof Class &&
206  ObjectPath.class.equals((Class<? extends Object>) c))
207  out[level].append((char) Message.ArgumentType.OBJECT_PATH);
208  else if (c instanceof Class &&
209  ((Class<? extends Object>) c).isArray()) {
210  if (Type.class.equals(((Class<? extends Object>) c).getComponentType()))
211  out[level].append((char) Message.ArgumentType.SIGNATURE);
212  else {
213  out[level].append((char) Message.ArgumentType.ARRAY);
214  String[] s = recursiveGetDBusType(((Class<? extends Object>) c).getComponentType(), false, level + 1);
215  if (s.length != 1) throw new DBusException(getString("multiValuedArrayNotPermitted"));
216  out[level].append(s[0]);
217  }
218  } else if (c instanceof Class &&
219  Struct.class.isAssignableFrom((Class<? extends Object>) c)) {
220  out[level].append((char) Message.ArgumentType.STRUCT1);
221  Type[] ts = Container.getTypeCache(c);
222  if (null == ts) {
223  Field[] fs = ((Class<? extends Object>) c).getDeclaredFields();
224  ts = new Type[fs.length];
225  for (Field f : fs) {
226  Position p = f.getAnnotation(Position.class);
227  if (null == p) continue;
228  ts[p.value()] = f.getGenericType();
229  }
230  Container.putTypeCache(c, ts);
231  }
232 
233  for (Type t : ts)
234  if (t != null)
235  for (String s : recursiveGetDBusType(t, false, level + 1))
236  out[level].append(s);
237  out[level].append(')');
238  } else {
239  throw new DBusException(getString("nonExportableType") + c);
240  }
241 
242  if (Debug.debug) Debug.print(Debug.VERBOSE, "Converted Java type: " + c + " to D-Bus Type: " + out[level]);
243 
244  return new String[]{out[level].toString()};
245  }
static String [] recursiveGetDBusType(Type c, boolean basic, int level)
Definition: Marshalling.java:93
static StringBuffer [] out
Definition: Marshalling.java:90

メンバ詳解

◆ out

StringBuffer [] org.freedesktop.dbus.Marshalling.out = new StringBuffer[10]
staticprivate

◆ typeCache

Map<Type, String[]> org.freedesktop.dbus.Marshalling.typeCache = new HashMap<Type, String[]>()
staticprivate

このクラス詳解は次のファイルから抽出されました: