protected ActionArgumentValue[] readArgumentValues(NodeList nodeList,ActionArgument[] args) throws ActionException {
  List<Node> nodes=getMatchingNodes(nodeList,args);
  ActionArgumentValue[] values=new ActionArgumentValue[args.length];
  for (int i=0; i < args.length; i++) {
    ActionArgument arg=args[i];
    Node node=findActionArgumentNode(nodes,arg);
    if (node == null) {
      throw new ActionException(ErrorCode.ARGUMENT_VALUE_INVALID,"Could not find argument '" + arg.getName() + "' node");
    }
    log.fine("Reading action argument: " + arg.getName());
    String value=XMLUtil.getTextContent(node);
    values[i]=createValue(arg,value);
  }
  return values;
}

protected ActionArgumentValue [ ] readArgumentValues ( NodeList nodeList , ActionArgument [ ] args ) throws ActionException { List < Node > nodes = getMatchingNodes ( nodeList , args ) ; ActionArgumentValue [ ] values = new ActionArgumentValue [ args . length ] ; for ( int i = 0 ; i < args . length ; i ++ ) { ActionArgument arg = args [ i ] ; Node node = findActionArgumentNode ( nodes , arg ) ; if ( node == null ) { throw new ActionException ( ErrorCode . ARGUMENT_VALUE_INVALID , "Could not find argument '" + arg . getName ( ) + "' node" ) ; } log . fine ( "Reading action argument: " + arg . getName ( ) ) ; String value = XMLUtil . getTextContent ( node ) ; values [ i ] = createValue ( arg , value ) ; } return values ; }
the upnp spec says that action arguments must be in the order as declared by the service . this method however is lenient , the action argument nodes in the xml can be in any order , as long as they are all there everything is ok .
