1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19 package org.apache.maven.buildcache;
20
21 /**
22 * This utility class is used to work around the classloading problem described
23 * in https://issues.apache.org/jira/browse/MNG-7160.
24 * The simple workaround described in MNG-7160 is not possible because this
25 * extension uses both the XPP3 classes and other utility classes. We thus rely on
26 * reflection for all access to plugin configuration.
27 */
28 public class Xpp3DomUtils {
29
30 public static Object[] getChildren(Object node) {
31 try {
32 return (Object[]) node.getClass().getMethod("getChildren").invoke(node);
33 } catch (Exception e) {
34 throw new RuntimeException("Error invoking Xpp3Dom.getChildren", e);
35 }
36 }
37
38 public static String getName(Object node) {
39 try {
40 return (String) node.getClass().getMethod("getName").invoke(node);
41 } catch (Exception e) {
42 throw new RuntimeException("Error invoking Xpp3Dom.getName", e);
43 }
44 }
45
46 public static String getValue(Object node) {
47 try {
48 return (String) node.getClass().getMethod("getValue").invoke(node);
49 } catch (Exception e) {
50 throw new RuntimeException("Error invoking Xpp3Dom.getValue", e);
51 }
52 }
53
54 public static void removeChild(Object node, int index) {
55 try {
56 node.getClass().getMethod("removeChild", int.class).invoke(node, index);
57 } catch (Exception e) {
58 throw new RuntimeException("Error invoking Xpp3Dom.removeChild", e);
59 }
60 }
61
62 public static String getAttribute(Object node, String attribute) {
63 try {
64 return (String)
65 node.getClass().getMethod("getAttribute", String.class).invoke(node, attribute);
66 } catch (Exception e) {
67 throw new RuntimeException("Error invoking Xpp3Dom.getAttribute", e);
68 }
69 }
70 }