WebDAV com J2ME

votos
1

Existe uma maneira de usar WebDAV com J2ME (algumas bibliotecas ou codificação manual)?

Eu tentei:
- javax.microedition.io.HttpConnection , mas SEARCH método não suportado lá
- javax.microedition.io.SocketConnection com solicitação HTTP - nada retorna em resposta
Talvez algo de errado com meu código ou cabeçalho HTTP:

    String response = ;
    String query = <?xml version='1.0'?>  
            + <g:searchrequest xmlns:g='DAV:'> 
            + <g:sql> 
            + SELECT 'DAV:displayname' 
            + FROM 'http://exchangeserver.com/Public/' 
            + </g:sql> 
            + </g:searchrequest> ;
    String len = String.valueOf(query.length());
    SocketConnection hc = (SocketConnection) Connector
            .open(socket://exchangeserver.com:8080);
    DataOutputStream dout = 
            new DataOutputStream(hc.openOutputStream());
    DataInputStream din = new DataInputStream(hc.openInputStream());
    String userPass = username + : + password;
    byte[] encoded = 
            Base64OutputStream.encode(userPass.getBytes(), 0,
            userPass.length(), false, false);
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    String request = SEARCH /Public/ HTTP/1.1\r\n
            +Content-Type:text/xml\r\nContent-Length:
            + len
            + \r\nAuthorization:Basic 
            + new String(encoded)
            + \r\n\r\n;
    bos.write(request.getBytes());
    bos.write(query.getBytes());
    dout.write(bos.toByteArray());
    dout.flush();
    dout.close();
    byte[] bs = new byte[900];
    din.readFully(bs);
    bos = new ByteArrayOutputStream();
    bos.write(bs);
    din.close();
    hc.close();
    response = bos.toString();
Publicado 04/04/2009 em 08:08
fonte usuário
Em outras línguas...                            


3 respostas

votos
4

O que você quer dizer com "nada retorna"? No corpo da resposta? Nenhum código de status?

Eu recomendo para rastrear o que está acontecendo no "fio" ...

UPDATE: você já tentou adicionar um cabeçalho de host?

Respondeu 04/04/2009 em 09:07
fonte usuário

votos
2

Julian +1 você era certo para Host propriedade, QRSO +1, obrigado a todos! Então,
- eu encontrei o serviço WebDAV livre MyDisk.se (Search não é permitido, então eu usei PROPFIND)
- usado WFetch para brincar com pedido WebDAV
- usado Network Monitor para comparar pedidos de WFetch e meu aplicativo.
:) Finalmente ele está trabalhando! Código de resultado:

String response = "";
String query = "<?xml version='1.0' encoding='UTF-8'?>\r\n"
        + "<d:propfind xmlns:d='DAV:'>\r\n"
        + "<d:prop><d:getcontenttype/></d:prop>\r\n"
        + "<d:prop><d:getcontentlength/></d:prop>\r\n"
        + "</d:propfind>\r\n";

String len = String.valueOf(query.length());
SocketConnection hc = (SocketConnection) Connector
        .open("socket://79.99.7.153:80");
DataOutputStream dout = new DataOutputStream(hc.openOutputStream());
DataInputStream din = new DataInputStream(hc.openInputStream());
String userPass = "login" + ":" + "password";
byte[] encoded = Base64OutputStream.encode(userPass.getBytes(), 0,
        userPass.length(), false, false);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
String request = "PROPFIND /mgontar/ HTTP/1.1\r\n" 
        + "Depth: 1\r\n"
        + "Host: mydisk.se:80\r\n" 
        + "Accept: */*\r\n"
        + "Content-Type: text/xml\r\n" 
        + "Content-Length: " + len
        + "\r\nAuthorization: Basic " + new String(encoded)
        + "\r\n\r\n";
bos.write(request.getBytes());
bos.write(query.getBytes());
dout.write(bos.toByteArray());
dout.flush();
dout.close();
byte[] bs = new byte[900];
din.readFully(bs);
bos = new ByteArrayOutputStream();
bos.write(bs);
din.close();
hc.close();
response = bos.toString();
Respondeu 04/04/2009 em 17:48
fonte usuário

votos
1

FYI Se você estiver testando em um telefone celular real, então há uma chance justa a sua operadora de rede móvel pode estar bloqueando não-HTTP tráfego.

Você pode querer primeiro cheque que você pode fazer solicitações GET e POST para o servidor em primeiro lugar.

Respondeu 04/04/2009 em 13:47
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more