code: @FFDCIgnore({ ClassCastException.class, NullPointerException.class })
      private ContextNode getTargetNode(WSName subname) throws InvalidNameException, NotContextException, NameNotFoundException {
          ContextNode target = this;
          int i = 0;
          try {
              for (/* int i = 0 */; i < subname.size() - 1; i++)
                  target = (ContextNode) target.children.get(subname.get(i));
              if (target == null)
                  throw new NullPointerException();
          } catch (ClassCastException e) {
              throw new NotContextException("Intermediate context name is bound to something other than a context: " + fullName.plus(subname.getPrefix(i + 1)));
          } catch (NullPointerException e) {
              throw new NameNotFoundException("Intermediate context does not exist: " + fullName.plus(subname.getPrefix(i + 1)));
          }
          return target;
      }
docs: Navigate to the penultimate node referred to by <code>subname</code>.
  This is the node within which <code>subname</code> itself can be found or bound.
  
  @param subname
  @return the target node
  @throws InvalidNameException if the target or any intermediate name is bound to something other than a context
  @throws NameNotFoundException if the target or any intermediate context does not exist