Porém, não existe um arquivo XML físico, apenas uma String com seu conteúdo.
Vendo a API, percebi que o parâmetro do método parse pode ser um InputStream, um InputSource ou um File.
A minha dúvida está justamente em como transformar essa String que estou recebendo em um desses 3 objetos.
Não, não :D
Você não pode chamar o getInputStream() duas vezes. Tente isso:
publicvoidrun(){try{// Aqui estão todos os dados que estão chegando via socket.InputStreamis=socket.getInputStream();BufferedReaderbufferedReader=newBufferedReader(newInputStreamReader(is));StringBufferstringBuffer=newStringBuffer();char[]buffer=newchar[64*1024];intlength=bufferedReader.read(buffer);while(length!=-1){stringBuffer.append(buffer,0,length);length=bufferedReader.read(buffer);}DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();DocumentBuilderbuilder=factory.newDocumentBuilder();@SuppressWarnings("unused")Documentdocument=builder.parse(is);callback.receive(stringBuffer.toString());}catch(Exceptione){callback.reportException(e);}}
Veja se você ainda precisa transformar tudo pra String. Caso não precise, seu código pode ficar simplesmente assim: