View Javadoc
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.wss4j.policy.stax;
20  
21  import org.apache.wss4j.policy.model.XPath;
22  
23  import javax.xml.namespace.QName;
24  import java.util.ArrayList;
25  import java.util.List;
26  
27  public final class PolicyUtils {
28  
29      private PolicyUtils() {
30          // complete
31      }
32  
33      public static List<QName> getElementPath(XPath xPath) {
34          List<QName> elements = new ArrayList<>();
35          String[] xPathElements = xPath.getXPath().split("/");
36          for (int j = 0; j < xPathElements.length; j++) {
37              String xPathElement = xPathElements[j];
38              if (xPathElement == null || xPathElement.length() == 0) {
39                  continue;
40              }
41              String[] elementParts = xPathElement.split(":");
42              if (elementParts.length == 2) {
43                  String ns = xPath.getPrefixNamespaceMap().get(elementParts[0]);
44                  if (ns == null) {
45                      throw new IllegalArgumentException("Namespace not declared");
46                  }
47                  elements.add(new QName(ns, elementParts[1]));
48              } else {
49                  elements.add(new QName(elementParts[0]));
50              }
51          }
52          return elements;
53      }
54  }