Redo the deserialize params method

This commit is contained in:
Aria 2023-06-14 03:07:02 -07:00
parent 9d8d7740e6
commit 5d51c2e478

View file

@ -5,7 +5,9 @@ import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader; import javax.xml.stream.XMLStreamReader;
import java.io.InputStream; import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
public class XmlRpcStreamReader { public class XmlRpcStreamReader {
@ -53,24 +55,20 @@ public class XmlRpcStreamReader {
} }
private Object[] deserializeParams ( ) throws XMLStreamException { private Object[] deserializeParams ( ) throws XMLStreamException {
Object[] params = new Object[ 0 ]; List<Object> paramsList = new ArrayList<> ( );
boolean isValueElement = false;
while ( nextTag ( ) ) { while ( xmlStreamReader.hasNext ( ) ) {
if ( xmlStreamReader.getLocalName ( ).equals ( "value" ) ) { int event = xmlStreamReader.next ( );
isValueElement = true; if ( event == XMLStreamConstants.START_ELEMENT ) {
} String elementName = xmlStreamReader.getLocalName ( );
else if ( xmlStreamReader.getLocalName ( ).equals ( "param" ) ) { if ( elementName.equals ( "param" ) ) {
if ( isValueElement ) {
Object value = deserializeValue ( ); Object value = deserializeValue ( );
Object[] newParams = new Object[ params.length + 1 ]; paramsList.add ( value );
System.arraycopy ( params , 0 , newParams , 0 , params.length );
newParams[ params.length ] = value;
params = newParams;
isValueElement = false;
} }
} }
} }
return params;
return paramsList.toArray ( );
} }
public Object readMethodResponseResult ( ) throws XMLStreamException { public Object readMethodResponseResult ( ) throws XMLStreamException {