InputStream, InputSource, File [RESOLVIDO]

Olá a todos!

Estou precisando ler uma String onde seu conteúdo é no formato de um arquivo XML e me é enviada via Socket.

O que eu precisaria fazer é:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse("meuArquivo.xml");

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.

Obrigado desde já.
Abraços.

É enviado via socket? Então passar como parâmetro para o método parse uma chamada a socket.getInputStream() não adianta?

Hhmm… vou testar aqui e já já aviso.
:slight_smile:

É… funcionou nao… :?

Executo o seguinte trecho

public void run() {
		try {
			BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			StringBuffer stringBuffer = new StringBuffer();
			char[] buffer = new char[64 * 1024];
			
			int length = bufferedReader.read(buffer);
			while (length != -1) {
				stringBuffer.append(buffer, 0, length);
				length = bufferedReader.read(buffer);
			}
			
			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
			DocumentBuilder builder = factory.newDocumentBuilder();
			
			@SuppressWarnings("unused")
			Document document = builder.parse(socket.getInputStream());
			
			callback.receive(stringBuffer.toString());
		} catch (Exception e) {
			callback.reportException(e);
		}
	}

e recebo a seguinte mensagem na linha do parse:

[Fatal Error] :-1:-1: Premature end of file.

Não, não :smiley:
Você não pode chamar o getInputStream() duas vezes. Tente isso:

[code]public void run() {
try {
// Aqui estão todos os dados que estão chegando via socket.
InputStream is = socket.getInputStream();

    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is));
    StringBuffer stringBuffer = new StringBuffer();
    char[] buffer = new char[64 * 1024];

    int length = bufferedReader.read(buffer);

    while (length != -1) {
        stringBuffer.append(buffer, 0, length);
        length = bufferedReader.read(buffer);
    }  

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();

    @SuppressWarnings("unused")  
    Document document = builder.parse(is);

    callback.receive(stringBuffer.toString());
} catch (Exception e) {
    callback.reportException(e);
}

}[/code]
Veja se você ainda precisa transformar tudo pra String. Caso não precise, seu código pode ficar simplesmente assim:

[code]public void run() {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();

    @SuppressWarnings("unused")  
    Document document = builder.parse(socket.getInputStream());
} catch (Exception e) {
    callback.reportException(e);
}

}[/code]
Abraços

Funcionou !!
:smiley: :smiley: :smiley: :smiley:

Obrigadão pela ajuda Tarso!