question: 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 ; }
target:  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.