Giter Club home page Giter Club logo

sardine-android's Introduction

sardine-android

Build Status Version number

A WebDAV client for Android, using OkHttp as HTTP client.

Getting started

  • Edit your app-level build.gradle (see top of this page for the latest version):

repositories {
  ...
  maven { url 'https://jitpack.io' }
}

dependencies {
  ...
  implementation 'com.github.thegrizzlylabs:sardine-android:<VERSION_NUMBER>'
}
  • Create a Sardine client:
Sardine sardine = new OkHttpSardine();
sardine.setCredentials("username", "password");
  • Use the client to make requests to your WebDAV server:
List<DavResource> resources = sardine.list("http://webdav.server.com");

Legacy

Originally forked from Sardine

Apache HTTP Client was replaced by OkHttp

JAXB was replaced by SimpleXml

Alternatives

See Awesome WebDAV: Java libraries

sardine-android's People

Contributors

3c71 avatar guillaume-tgl avatar kotori2 avatar rt1shnik avatar stokito avatar storytellerf avatar sung-eun avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sardine-android's Issues

jitpack No read access to repo

Hello, I am unable to add dependencies to the project and jitpack shows No read access to repo. Can you help me take a look?

image

image

Propfind returns 400 Bad request

Hi and thanks for the port.
I have been trying to implement it but there seems to be an issue with getResurces()

I have tested with 3 different servers, all return 400 when you call it
List<DavResource> list = getResources(url);

exists fails

You get com.thegrizzlylabs.sardineandroid.impl.SardineException: Unexpected response (403 Forbidden) you use request to check if resource exists on (at least Synology) some devices.
I don't know the reason but probably due to Preemptive authentication

Please provide alternative way to check if resource exists, such as

@Override public boolean exists(String url) throws IOException { List<DavResource> list = getResources(url); return list.size() > 0; }

Support for Android 4.x

I'm trying to use this library on an app with a minimum SDK of 14, and it appears to work fine, appart from one method in AuthenticationIntercepter, which only support API 19 and above:

To fix this I've added a special method to get UTF8 standard charset:

    @Override
    public Response intercept(Chain chain) throws IOException {
        Request request = chain.request()
            .newBuilder()
            .addHeader("Authorization", Credentials.basic(userName, password, standardUTF8()))
            .build();
        return chain.proceed(request);
    }

The method to get a standard charset is as follows:

    public static Charset standardUTF8()
    {
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT)
        {
            return StandardCharsets.UTF_8;
        }
        else
        {
            //noinspection CharsetObjectCanBeUsed
            return Charset.forName("UTF-8");
        }
    }

Error contacting, when using sardine.put() to upload files

I/System.out: Authenticating for response: Response{protocol=h2, code=401, message=, url=https://dav.jianguoyun.com/dav/Chatterboxxxx_backup/ChatterBoxxxx_backup_2020_02_07_10:45.csv} I/System.out: Challenges: [Basic authParams={realm=nutstore}] W/System.err: com.thegrizzlylabs.sardineandroid.impl.SardineException: Error contacting https://dav.jianguoyun.com/dav/Chatterboxxxx_backup/ChatterBoxxxx_backup_2020_02_07_10:45.csv (400 ) W/System.err: at com.thegrizzlylabs.sardineandroid.impl.handler.ValidatingResponseHandler.validateResponse(ValidatingResponseHandler.java:23) at com.thegrizzlylabs.sardineandroid.impl.handler.VoidResponseHandler.handleResponse(VoidResponseHandler.java:21) at com.thegrizzlylabs.sardineandroid.impl.handler.VoidResponseHandler.handleResponse(VoidResponseHandler.java:17) W/System.err: at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.execute(OkHttpSardine.java:595) at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.execute(OkHttpSardine.java:590) at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.put(OkHttpSardine.java:326) at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.put(OkHttpSardine.java:317) W/System.err: at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.put(OkHttpSardine.java:296) at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.put(OkHttpSardine.java:289) at com.rtk.chatterboxxxx.CloudSync$1$1.run(CloudSync.java:91) at java.lang.Thread.run(Thread.java:764)

Well-known fields is missed in DavResource

See at class Prop. It has all expected fields:

&lt;element ref="{DAV:}creationdate" minOccurs="0"/&gt;
&lt;element ref="{DAV:}displayname" minOccurs="0"/&gt;
&lt;element ref="{DAV:}getcontentlanguage" minOccurs="0"/&gt;
&lt;element ref="{DAV:}getcontentlength" minOccurs="0"/&gt;
&lt;element ref="{DAV:}getcontenttype" minOccurs="0"/&gt;
&lt;element ref="{DAV:}getetag" minOccurs="0"/&gt;
&lt;element ref="{DAV:}getlastmodified" minOccurs="0"/&gt;
&lt;element ref="{DAV:}lockdiscovery" minOccurs="0"/&gt;
&lt;element ref="{DAV:}resourcetype" minOccurs="0"/&gt;
&lt;element ref="{DAV:}supportedlock" minOccurs="0"/&gt;
&lt;element ref="{DAV:}quota-available-bytes" minOccurs="0"/&gt;
&lt;element ref="{DAV:}quota-used-bytes" minOccurs="0"/&gt;

But all this fields is missed in DavResource. So when I try to call some method that returns DavResource I can't access all this fields. For example, I want to get lockdiscovery or supportedlock. I can't find this data in DavResource. I am wonder why nobody noticed that.

Maybe I missed something, then tell me how to get lockdiscovery field.

Example of real response for sardine.list("http://192.168.100.16/ksync/boards/dabea1be-a895-4738-9ee0-d13175ed7ee2.ksync", 0, true);:

<?xml version="1.0" encoding="UTF-8"?>
<D:multistatus xmlns:D="DAV:">
   <D:response>
      <D:href>http://192.168.100.16/ksync/boards/dabea1be-a895-4738-9ee0-d13175ed7ee2.ksync</D:href>
      <D:propstat>
         <D:status>HTTP/1.1 200 OK</D:status>
         <D:prop>
            <D:getcontenttype>text/plain</D:getcontenttype>
            <D:getlastmodified>Sun, 02 Feb 2020 18:07:50 GMT</D:getlastmodified>
            <D:lockdiscovery>
               <D:activelock>
                  <D:locktype>
                     <D:write />
                  </D:locktype>
                  <D:lockscope>
                     <D:exclusive />
                  </D:lockscope>
                  <D:depth>0</D:depth>
                  <D:timeout>Infinite</D:timeout>
                  <D:locktoken>
                     <D:href>opaquelocktoken:acd45143-ba41-43e9-8938-e44880cae051.c61001d5da6af96e</D:href>
                  </D:locktoken>
                  <D:lockroot>
                     <D:href>http://192.168.100.16/ksync/boards/dabea1be-a895-4738-9ee0-d13175ed7ee2.ksync</D:href>
                  </D:lockroot>
               </D:activelock>
            </D:lockdiscovery>
            <D:ishidden>0</D:ishidden>
            <D:supportedlock>
               <D:lockentry>
                  <D:lockscope>
                     <D:exclusive />
                  </D:lockscope>
                  <D:locktype>
                     <D:write />
                  </D:locktype>
               </D:lockentry>
               <D:lockentry>
                  <D:lockscope>
                     <D:shared />
                  </D:lockscope>
                  <D:locktype>
                     <D:write />
                  </D:locktype>
               </D:lockentry>
            </D:supportedlock>
            <D:getetag>"b1d26baef3d9d51:0"</D:getetag>
            <D:displayname>dabea1be-a895-4738-9ee0-d13175ed7ee2.ksync</D:displayname>
            <D:getcontentlanguage />
            <D:getcontentlength>735517</D:getcontentlength>
            <D:iscollection>0</D:iscollection>
            <D:creationdate>2020-02-02T18:07:46.118Z</D:creationdate>
            <D:resourcetype />
         </D:prop>
      </D:propstat>
   </D:response>
</D:multistatus>

Support for Digest?

Hello,

As mentioned here:
#56
it seems that it is not possible to work with Digest.

final DigestAuthenticator authenticator = new DigestAuthenticator(new Credentials("username", "pass"));

I see how to use the library with Okhttp but not with sardine ??

Thanks

how to set timeuts for put??

Is there a way how to set timeout for put method for

val sardine = OkHttpSardine()?

otherwise it stucks at large files

OwnCloud Not Detected as WebDAV Client

Connecting to a OwnCloud gives me following Error:

This is the WebDAV interface. It can only be accessed by WebDAV clients such as the ownCloud desktop sync client.

Any Idea?

Ability to be notified about copy progress

When uploading large files to WebDav servers it would be nice if we could have progress callbacks so we can be notified about the progress.

I think this could be achieved if the developer is able to specify a modified version of the RequestBody class.
An idea would be to be able to specify a RequestBodyFactory class or let the user call the private methods that take the RequestBody param(s).
Any other ideas welcome :)

Exclude transitively xpp and stax

When including the library in my app as a Gradle dependency, I have to exclude again xpp and stax, even though they are excluded in the build.gradle of this library. Otherwise I have Proguard warnings that some library classes depend on program classes.
When I include this library directly as a submodule, I don't have this issue.

Does anybody using this library have the same issue?

Connection issue

I'm trying to connect to my webdav server with bigcommerce.com using your sardine-android library. I keep getting an error:
"Error contacting https://partslinkent.com/dav/content/IMAG5774.jpg (401 )".

I have double checked the username and the password and confirmed that it is correct by using other clients to connect. The server is using HTTPS/SSL. Any help would be appreciated!!

Stacktrace:
W/System.err: com.thegrizzlylabs.sardineandroid.impl.SardineException: Error contacting https://partslinkent.com/dav/content/IMAG5774.jpg (401 ) at com.thegrizzlylabs.sardineandroid.impl.handler.ValidatingResponseHandler.validateResponse(ValidatingResponseHandler.java:23) W/System.err: at com.thegrizzlylabs.sardineandroid.impl.handler.InputStreamResponseHandler.handleResponse(InputStreamResponseHandler.java:16) at com.thegrizzlylabs.sardineandroid.impl.handler.InputStreamResponseHandler.handleResponse(InputStreamResponseHandler.java:12) at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.execute(OkHttpSardine.java:595) at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.get(OkHttpSardine.java:284) at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.get(OkHttpSardine.java:274) at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.get(OkHttpSardine.java:269) at com.hollmanmedia.partslinkcamera.util.WebDavHelper$WebDavRequestTask.doInBackground(WebDavHelper.java:24) at com.hollmanmedia.partslinkcamera.util.WebDavHelper$WebDavRequestTask.doInBackground(WebDavHelper.java:16) at android.os.AsyncTask$2.call(AsyncTask.java:333) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) at java.lang.Thread.run(Thread.java:764)

Code:

`class WebDavRequestTask extends AsyncTask < String, Void, List < DavResource >> {

@OverRide
protected List < DavResource > doInBackground(String...strings) {
Sardine sardine = new OkHttpSardine();
sardine.setCredentials("the username", "the password", true);

try {
InputStream stream = sardine.get("https://partslinkent.com/dav/content/IMAG5774.jpg";);
} catch (Exception e) {
e.printStackTrace();
}

return null;
}
}`

The access of Sardine inner okHttpClient

Sardine contains a okhttpClient, but it is private. when i use a sington to reuse the sardine instance, if "isPreemptive "set TRUE, it will cause error at switch webdav server. i want to remove the interceptor, but i can not access the okhttpClient.

Fatal error when invalid credentials are set

Hello
i am struggling with a Fatal error happening when the credentials are wrong.
i use sardine-android:0.7

the error appears in sardine.list() when i set a wrong login
No issue if the credentials are correct

i would appreciate very much some help.

the exception stack is as below

E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #3
Process: com.alv.remotefs, PID: 6395
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:354)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)
at java.util.concurrent.FutureTask.setException(FutureTask.java:252)
at java.util.concurrent.FutureTask.run(FutureTask.java:271)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
Caused by: java.lang.NoSuchMethodError: No virtual method log(ILjava/lang/String;Ljava/lang/Throwable;)V in class Lokhttp3/internal/platform/Platform; or its super classes (declaration of 'okhttp3.internal.platform.Platform' appears in /data/app/com.alv.remotefs-wBpthQZGx3l6Nl2b4UdXPQ==/base.apk)
at com.burgstaller.okhttp.digest.DigestAuthenticator.authenticateWithState(DigestAuthenticator.java:227)
at com.burgstaller.okhttp.digest.DigestAuthenticator.authenticate(DigestAuthenticator.java:177)
at com.burgstaller.okhttp.DispatchingAuthenticator.authenticate(DispatchingAuthenticator.java:45)
at com.burgstaller.okhttp.CachingAuthenticatorDecorator.authenticate(CachingAuthenticatorDecorator.java:35)
at okhttp3.internal.http.RetryAndFollowUpInterceptor.followUpRequest(RetryAndFollowUpInterceptor.kt:223)
at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:108)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:100)
at com.burgstaller.okhttp.AuthenticationCacheInterceptor.intercept(AuthenticationCacheInterceptor.java:49)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:100)
at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:197)
at okhttp3.internal.connection.RealCall.execute(RealCall.kt:148)
at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.execute(OkHttpSardine.java:626)
at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.propfind(OkHttpSardine.java:180)
at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.list(OkHttpSardine.java:149)
at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.list(OkHttpSardine.java:125)
at com.alv.remotefs.MainActivity$TaskListDAV.doInBackground(MainActivity.java:794)
at com.alv.remotefs.MainActivity$TaskListDAV.doInBackground(MainActivity.java:747)
at android.os.AsyncTask$2.call(AsyncTask.java:333)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)ย 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)ย 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)ย 
at java.lang.Thread.run(Thread.java:764)ย 

Thanks a lot
best regards
Alex

Logs show a lot of connexions leaked

It seems response bodies are never closed and I get many of those similar logs:

A connection to xxxxxxxxx was leaked. Did you forget to close a response body?
2020-03-21 12:39:07.457 28144-29092/xxxx W/OkHttp: java.lang.Throwable: response.body().close()
2020-03-21 12:39:07.457 28144-29092/xxxx W/OkHttp: at okhttp3.internal.platform.Platform.getStackTraceForCloseable(Platform.kt:134)
2020-03-21 12:39:07.457 28144-29092/xxxx W/OkHttp: at okhttp3.internal.connection.RealCall.callStart(RealCall.kt:166)
2020-03-21 12:39:07.457 28144-29092/xxxx W/OkHttp: at okhttp3.internal.connection.RealCall.execute(RealCall.kt:145)

I've started fixing those, and will post a PR if I get time to test.

However I have a question for you, which one would be best:

response.body().close(); // <-- This leads to a warning that body() might be null.
or
response.close(); // <-- This does an assert that'll throw an exception if body() is null.

I'd rather change the last close() to be safe no matter what. We don't want a crash or an exception if the query has been processed and something goes wrong after, do we? I don't and rather see things go smooth without having to manage exceptions everywhere (or the bare minimum), IMHO.

Can I get/download vcf file with this library?

Hello,

I already use and connect to server and get the list resource from this library (Thank you). But right now I need to download the vcf file, is it possible to download it with this library?

ps: because if I want to download with retrofit I need to set the setCredentials (returns 401 when tried).

sardine.("") Not a valid DAV response

I test createDirectory is ok,but when I use list yo get all files will be that ,i don't know why

2022-01-22 09:44:11.847 22086-22362/com.attempt.Ainfuse W/System.err: java.io.IOException: Not a valid DAV response
2022-01-22 09:44:11.847 22086-22362/com.attempt.Ainfuse W/System.err: at com.thegrizzlylabs.sardineandroid.util.SardineUtil.unmarshal(SardineUtil.java:142)
2022-01-22 09:44:11.847 22086-22362/com.attempt.Ainfuse W/System.err: at com.thegrizzlylabs.sardineandroid.impl.handler.MultiStatusResponseHandler.getMultistatus(MultiStatusResponseHandler.java:38)
2022-01-22 09:44:11.847 22086-22362/com.attempt.Ainfuse W/System.err: at com.thegrizzlylabs.sardineandroid.impl.handler.MultiStatusResponseHandler.handleResponse(MultiStatusResponseHandler.java:27)
2022-01-22 09:44:11.847 22086-22362/com.attempt.Ainfuse W/System.err: at com.thegrizzlylabs.sardineandroid.impl.handler.ResourcesResponseHandler.handleResponse(ResourcesResponseHandler.java:25)
2022-01-22 09:44:11.847 22086-22362/com.attempt.Ainfuse W/System.err: at com.thegrizzlylabs.sardineandroid.impl.handler.ResourcesResponseHandler.handleResponse(ResourcesResponseHandler.java:19)
2022-01-22 09:44:11.847 22086-22362/com.attempt.Ainfuse W/System.err: at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.execute(OkHttpSardine.java:627)
2022-01-22 09:44:11.847 22086-22362/com.attempt.Ainfuse W/System.err: at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.propfind(OkHttpSardine.java:180)
2022-01-22 09:44:11.847 22086-22362/com.attempt.Ainfuse W/System.err: at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.list(OkHttpSardine.java:149)
2022-01-22 09:44:11.847 22086-22362/com.attempt.Ainfuse W/System.err: at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.list(OkHttpSardine.java:125)
2022-01-22 09:44:11.847 22086-22362/com.attempt.Ainfuse W/System.err: at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.list(OkHttpSardine.java:120)
2022-01-22 09:44:11.847 22086-22362/com.attempt.Ainfuse W/System.err: at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.getResources(OkHttpSardine.java:115)
2022-01-22 09:44:11.847 22086-22362/com.attempt.Ainfuse W/System.err: at com.attempt.Ainfuse.View.fragments.FileChildView.Add_resources.lambda$initView$5(Add_resources.java:226)
2022-01-22 09:44:11.847 22086-22362/com.attempt.Ainfuse W/System.err: at com.attempt.Ainfuse.View.fragments.FileChildView.Add_resources$$ExternalSyntheticLambda9.run(Unknown Source:0)
2022-01-22 09:44:11.847 22086-22362/com.attempt.Ainfuse W/System.err: at java.lang.Thread.run(Thread.java:923)
2022-01-22 09:44:11.847 22086-22362/com.attempt.Ainfuse W/System.err: Caused by: org.simpleframework.xml.core.ElementException: Element 'write' does not have a match in class com.thegrizzlylabs.sardineandroid.model.Lockscope at line 1
2022-01-22 09:44:11.847 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.readElement(Composite.java:527)
2022-01-22 09:44:11.847 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.readElements(Composite.java:445)
2022-01-22 09:44:11.847 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.access$400(Composite.java:59)
2022-01-22 09:44:11.847 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1383)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.read(Composite.java:201)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.read(Composite.java:148)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.readVariable(Composite.java:623)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.readInstance(Composite.java:573)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.readUnion(Composite.java:549)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.readElement(Composite.java:532)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.readElements(Composite.java:445)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.access$400(Composite.java:59)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1383)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.read(Composite.java:201)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.read(Composite.java:148)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Traverser.read(Traverser.java:92)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:190)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:167)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:124)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.readVariable(Composite.java:623)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.readInstance(Composite.java:573)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.readUnion(Composite.java:549)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.readElement(Composite.java:532)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.readElements(Composite.java:445)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.access$400(Composite.java:59)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1383)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.read(Composite.java:201)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.read(Composite.java:148)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Traverser.read(Traverser.java:92)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Persister.read(Persister.java:625)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Persister.read(Persister.java:606)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Persister.read(Persister.java:584)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Persister.read(Persister.java:480)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at com.thegrizzlylabs.sardineandroid.util.EntityWithAnyElementConverter.read(EntityWithAnyElementConverter.java:60)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at com.thegrizzlylabs.sardineandroid.util.EntityWithAnyElementConverter.read(EntityWithAnyElementConverter.java:17)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.convert.RegistryStrategy.read(RegistryStrategy.java:129)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.convert.RegistryStrategy.read(RegistryStrategy.java:108)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Source.getOverride(Source.java:360)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Factory.getConversion(Factory.java:207)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Factory.getOverride(Factory.java:139)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.ObjectFactory.getInstance(ObjectFactory.java:63)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.read(Composite.java:139)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.readVariable(Composite.java:623)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.readInstance(Composite.java:573)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.readUnion(Composite.java:549)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.readElement(Composite.java:532)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.readElements(Composite.java:445)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.access$400(Composite.java:59)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1383)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.read(Composite.java:201)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.read(Composite.java:148)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Traverser.read(Traverser.java:92)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:190)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:167)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:124)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.readVariable(Composite.java:623)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.readInstance(Composite.java:573)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.readUnion(Composite.java:549)
2022-01-22 09:44:11.848 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.readElement(Composite.java:532)
2022-01-22 09:44:11.849 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.readElements(Composite.java:445)
2022-01-22 09:44:11.849 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.access$400(Composite.java:59)
2022-01-22 09:44:11.849 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1383)
2022-01-22 09:44:11.849 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.read(Composite.java:201)
2022-01-22 09:44:11.849 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.read(Composite.java:148)
2022-01-22 09:44:11.849 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Traverser.read(Traverser.java:92)
2022-01-22 09:44:11.849 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:190)
2022-01-22 09:44:11.849 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:167)
2022-01-22 09:44:11.849 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:124)
2022-01-22 09:44:11.849 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.readVariable(Composite.java:623)
2022-01-22 09:44:11.849 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.readInstance(Composite.java:573)
2022-01-22 09:44:11.849 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.readUnion(Composite.java:549)
2022-01-22 09:44:11.849 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.readElement(Composite.java:532)
2022-01-22 09:44:11.849 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.readElements(Composite.java:445)
2022-01-22 09:44:11.849 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.access$400(Composite.java:59)
2022-01-22 09:44:11.849 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1383)
2022-01-22 09:44:11.849 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.read(Composite.java:201)
2022-01-22 09:44:11.849 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Composite.read(Composite.java:148)
2022-01-22 09:44:11.849 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Traverser.read(Traverser.java:92)
2022-01-22 09:44:11.849 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Persister.read(Persister.java:625)
2022-01-22 09:44:11.849 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Persister.read(Persister.java:606)
2022-01-22 09:44:11.849 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Persister.read(Persister.java:584)
2022-01-22 09:44:11.849 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Persister.read(Persister.java:543)
2022-01-22 09:44:11.849 22086-22362/com.attempt.Ainfuse W/System.err: at org.simpleframework.xml.core.Persister.read(Persister.java:444)
2022-01-22 09:44:11.849 22086-22362/com.attempt.Ainfuse W/System.err: at com.thegrizzlylabs.sardineandroid.util.SardineUtil.unmarshal(SardineUtil.java:137)
2022-01-22 09:44:11.849 22086-22362/com.attempt.Ainfuse W/System.err: ... 13 more

My proguard-rules.pro already have -keep class com.thegrizzlylabs.sardineandroid.** {*;}

following my request

header:

Accept-Encoding:ย gzip
Authorization:ย Basic MTY2MDU2MzczMDA6ZG1qMjQ5OTE0NzI3MQ==
Connection:ย Keep-Alive
Content-Length:ย 96
Content-Type:ย text/xml; charset=utf-8
Depth:ย 1
Host:ย 192.168.6.1:8081
User-Agent:ย okhttp/4.9.3

body

<D:propfind xmlns:D="DAV:">
<D:allprop />
</D:propfind>

response :

cache-control:ย no-cache
content-type:ย application/xml; charset=utf-8
date:ย Sat, 22 Jan 2022 01:48:49 GMT
pragma:ย no-cache
transfer-encoding:ย chunked

body(xml)
not availale

status code :207

Not a valid DAV response

I use Box. When I call LOCK I get crash "java.io.IOException: Not a valid DAV response". I'm using "sardine-android:0.4".

Response:

<?xml version="1.0" encoding="utf-8"?>
<d:prop xmlns:d="DAV:">
  <d:lockdiscovery>
    <d:activelock>
      <d:lockscope>
        <d:exclusive/>
      </d:lockscope>
      <d:locktype>
        <d:write/>
      </d:locktype>
      <d:lockroot>
        <d:href>/dav/ksync/boards/dabea1be-a895-4738-9ee0-d13175ed7ee2.ksync</d:href>
      </d:lockroot>
      <d:depth>infinity</d:depth>
      <d:timeout>Second-</d:timeout>
      <d:locktoken>
        <d:href>opaquelocktoken:c014b505-47e9-4444-93ed-46db4977b569</d:href>
      </d:locktoken>
      <d:owner></d:owner>
    </d:activelock>
  </d:lockdiscovery>
</d:prop>

Stack trace:

java.io.IOException: Not a valid DAV response
    at com.thegrizzlylabs.sardineandroid.util.SardineUtil.unmarshal(SardineUtil.java:140)
    at com.thegrizzlylabs.sardineandroid.impl.handler.LockResponseHandler.getToken(LockResponseHandler.java:38)
    at com.thegrizzlylabs.sardineandroid.impl.handler.LockResponseHandler.handleResponse(LockResponseHandler.java:27)
    at com.thegrizzlylabs.sardineandroid.impl.handler.LockResponseHandler.handleResponse(LockResponseHandler.java:17)
    at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.execute(OkHttpSardine.java:595)
    at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.lock(OkHttpSardine.java:406)
    at org.pdapps.kanbani.synclib.server.base.WebDAVServer.lock(WebDAVServer.java:125)
    at org.pdapps.kanbani.synclib.module.SyncModule.lockBoard(SyncModule.java:203)
    at org.pdapps.kanbani.synclib.module.SyncModule.syncBoard(SyncModule.java:164)
    at org.pdapps.kanbani.synclib.module.SyncModule.syncInternal(SyncModule.java:125)
    at org.pdapps.kanbani.synclib.module.SyncModule.access$000(SyncModule.java:36)
    at org.pdapps.kanbani.synclib.module.SyncModule$1.run(SyncModule.java:86)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
    at java.lang.Thread.run(Thread.java:818)
Caused by: org.simpleframework.xml.core.ElementException: Element 'lockroot' does not have a match in class com.thegrizzlylabs.sardineandroid.model.Activelock at line -1
    at org.simpleframework.xml.core.Composite.readElement(Composite.java:527)
    at org.simpleframework.xml.core.Composite.readElements(Composite.java:445)
    at org.simpleframework.xml.core.Composite.access$400(Composite.java:59)
    at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1383)
    at org.simpleframework.xml.core.Composite.read(Composite.java:201)
    at org.simpleframework.xml.core.Composite.read(Composite.java:148)
    at org.simpleframework.xml.core.Traverser.read(Traverser.java:92)
    at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:190)
    at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:167)
    at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:124)
    at org.simpleframework.xml.core.Composite.readVariable(Composite.java:623)
    at org.simpleframework.xml.core.Composite.readInstance(Composite.java:573)
    at org.simpleframework.xml.core.Composite.readUnion(Composite.java:549)
    at org.simpleframework.xml.core.Composite.readElement(Composite.java:532)
    at org.simpleframework.xml.core.Composite.readElements(Composite.java:445)
    at org.simpleframework.xml.core.Composite.access$400(Composite.java:59)
    at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1383)
    at org.simpleframework.xml.core.Composite.read(Composite.java:201)
    at org.simpleframework.xml.core.Composite.read(Composite.java:148)
    at org.simpleframework.xml.core.Traverser.read(Traverser.java:92)
    at org.simpleframework.xml.core.Persister.read(Persister.java:625)
    at org.simpleframework.xml.core.Persister.read(Persister.java:606)
    at org.simpleframework.xml.core.Persister.read(Persister.java:584)
    at org.simpleframework.xml.core.Persister.read(Persister.java:480)
    at com.thegrizzlylabs.sardineandroid.util.EntityWithAnyElementConverter.read(EntityWithAnyElementConverter.java:60)
    at com.thegrizzlylabs.sardineandroid.util.EntityWithAnyElementConverter.read(EntityWithAnyElementConverter.java:17)
    at org.simpleframework.xml.convert.RegistryStrategy.read(RegistryStrategy.java:129)
    at org.simpleframework.xml.convert.RegistryStrategy.read(RegistryStrategy.java:108)
    at org.simpleframework.xml.core.Source.getOverride(Source.java:360)
    at org.simpleframework.xml.core.Factory.getConversion(Factory.java:207)
    at org.simpleframework.xml.core.Factory.getOverride(Factory.java:139)
    at org.simpleframework.xml.core.ObjectFactory.getInstance(ObjectFactory.java:63)
    at org.simpleframework.xml.core.Composite.read(Composite.java:139)
    at org.simpleframework.xml.core.Traverser.read(Traverser.java:92)
    at org.simpleframework.xml.core.Persister.read(Persister.java:625)
    at org.simpleframework.xml.core.Persister.read(Persister.java:606)
    at org.simpleframework.xml.core.Persister.read(Persister.java:584)
    at org.simpleframework.xml.core.Persister.read(Persister.java:543)
    at org.simpleframework.xml.core.Persister.read(Persister.java:444)
    at com.thegrizzlylabs.sardineandroid.util.SardineUtil.unmarshal(SardineUtil.java:135)
	... 14 more

android.os.NetworkOnMainThreadException when trying basic example

When trying your basic example from the README.md I'll get the following stackstrace:

FATAL EXCEPTION: main Process: hftl.beam_it, PID: 24346 java.lang.RuntimeException: Unable to start activity ComponentInfo{hftl.beam_it/hftl.beam_it.activities.Overview}: android.os.NetworkOnMainThreadException at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) at android.app.ActivityThread.-wrap11(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) at android.os.Handler.dispatchMessage(Handler.java:105) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6541) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) Caused by: android.os.NetworkOnMainThreadException at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1448) at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:102) at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:90) at java.net.InetAddress.getAllByName(InetAddress.java:787) at okhttp3.Dns$1.lookup(Dns.java:40) at okhttp3.internal.connection.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:185) at okhttp3.internal.connection.RouteSelector.nextProxy(RouteSelector.java:149) at okhttp3.internal.connection.RouteSelector.next(RouteSelector.java:84) at okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:213) at okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:134) at okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:113) at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121) at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121) at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147) at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:125) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147) at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121) at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:200) at okhttp3.RealCall.execute(RealCall.java:77) at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.execute(OkHttpSardine.java:606) at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.propfind(OkHttpSardine.java:157) at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.list(OkHttpSardine.java:126) at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.list(OkHttpSardine.java:102) at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.list(OkHttpSardine.java:97) at hftl.beam_it.activities.Overview.onCreate(Overview.java:110) at android.app.Activity.performCreate(Activity.java:6975) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1213) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2770) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)ย  at android.app.ActivityThread.-wrap11(Unknown Source:0)ย  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)ย  at android.os.Handler.dispatchMessage(Handler.java:105)ย  at android.os.Looper.loop(Looper.java:164)ย  at android.app.ActivityThread.main(ActivityThread.java:6541)ย  at java.lang.reflect.Method.invoke(Native Method)ย  at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)ย  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)ย 

I did use your exact code but it seems like it's complaining that the networking is done on the Main Thread instead of using an Async Task. Can I fix this on my end?

Thanks.

Providing methods to set timeouts

Would it be possible to provide methods to set timeouts in OkHttpSardine.java? Large files might fail on slow networks.

OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder(); clientBuilder.connectTimeout(10000, TimeUnit.MILLISECONDS); clientBuilder.readTimeout(10000, TimeUnit.MILLISECONDS); clientBuilder.writeTimeout(10000, TimeUnit.MILLISECONDS);

minifyEnabled

Hello, this project is very good, but a little problem
minifyEnabled false: no problem
minifyEnabled true: there is an inability to call Sardine.list(url)

W/System.err: java.io.IOException: Not a valid DAV response
at com.thegrizzlylabs.sardineandroid.util.SardineUtil.unmarshal(Unknown Source:14)
W/System.err:     at com.thegrizzlylabs.sardineandroid.impl.handler.MultiStatusResponseHandler.getMultistatus(Unknown Source:2)
at com.thegrizzlylabs.sardineandroid.impl.handler.MultiStatusResponseHandler.handleResponse(Unknown Source:29)
at com.thegrizzlylabs.sardineandroid.impl.handler.ResourcesResponseHandler.handleResponse(Unknown Source:5)
at com.thegrizzlylabs.sardineandroid.impl.handler.ResourcesResponseHandler.handleResponse(Unknown Source:0)
at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.execute(Unknown Source:10)
at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.propfind(Unknown Source:53)
at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.list(Unknown Source:15)
at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.list(Unknown Source:1)
at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.list(Unknown Source:1)
at com.hjq.md.webdav.WebDavHelper.getPathList(Unknown Source:78)
at com.hjq.md.ui.activity.BackupActivity$1.run(Unknown Source:18)
at java.lang.Thread.run(Thread.java:764)

Exception in Android R

OkHttpSardine() builder throw exception in Android R:

Process: site.leos.apps.lespas, PID: 5568
java.lang.ExceptionInInitializerError
    at okhttp3.OkHttpClient.<init>(OkHttpClient.kt:219)
    at okhttp3.OkHttpClient$Builder.build(OkHttpClient.kt:955)
    at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.<init>(OkHttpSardine.java:73)
    at site.leos.apps.lespas.sync.SyncAdapter.onPerformSync(SyncAdapter.kt:40)
    at android.content.AbstractThreadedSyncAdapter$SyncThread.run(AbstractThreadedSyncAdapter.java:334)
 Caused by: java.lang.IllegalStateException: Expected Android API level 21+ but was 30
    at okhttp3.internal.platform.AndroidPlatform$Companion.buildIfSupported(AndroidPlatform.kt:370)
    at okhttp3.internal.platform.Platform$Companion.findPlatform(Platform.kt:204)
    at okhttp3.internal.platform.Platform$Companion.access$findPlatform(Platform.kt:178)
    at okhttp3.internal.platform.Platform.<clinit>(Platform.kt:179)
    at okhttp3.OkHttpClient.<init>(OkHttpClient.kt:219)ย 
    at okhttp3.OkHttpClient$Builder.build(OkHttpClient.kt:955)ย 
    at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.<init>(OkHttpSardine.java:73)ย 
    at site.leos.apps.lespas.sync.SyncAdapter.onPerformSync(SyncAdapter.kt:40)ย 
    at android.content.AbstractThreadedSyncAdapter$SyncThread.run(AbstractThreadedSyncAdapter.java:334)ย 

How do I play video files

I have successfully obtained the file list, but how should I play the MP4 file?
I can't get the full real path to the player.

Using the Library Async

Hey,

because i want to use the Library in my Android App, it would be nice to have an async webdav client. Or how do you use the Library in Android? Do you build a wrapper on your own or is there a feature im missing?

android.os.NetworkOnMainThreadException with an AsyncTask

Hi, i can't run the basic example, i always have an android.os.NetworkOnMainThreadException even though i use an Asynctask. I've tried to run the following code on android 6.0 and android 8.0, with the same result. I also tried get and put methods but i get the same Exception.

import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;

import com.thegrizzlylabs.sardineandroid.DavResource;
import com.thegrizzlylabs.sardineandroid.Sardine;
import com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine;

import java.io.IOException;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    private final String url = "https://example.com/dav/";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        List<DavResource> resources = new DoList().doInBackground(url);
    }

    private class DoList extends AsyncTask<String, Integer, List<DavResource>> {
        @Override
        protected List<DavResource> doInBackground(String... urls) {
            Sardine server = new OkHttpSardine();
            server.setCredentials("username", "password");
            List<DavResource> resources = null;

            try {
                resources = server.list(url);
            } catch (IOException e) {
                e.printStackTrace();
            }

            return resources;
        }

        @Override
        protected void onPostExecute(List<DavResource> resources) {
            if (resources != null) {
                for (DavResource res : resources) {
                    Log.d("connectToDav", res.toString());
                }
            }
        }
    }
}

and here's the log

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.daniel.connecttodav, PID: 15662
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.daniel.connecttodav/com.example.daniel.connecttodav.MainActivity}: android.os.NetworkOnMainThreadException
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2451)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2511)
        at android.app.ActivityThread.access$900(ActivityThread.java:165)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1375)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:150)
        at android.app.ActivityThread.main(ActivityThread.java:5621)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)
     Caused by: android.os.NetworkOnMainThreadException
        at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1285)
        at java.net.InetAddress.lookupHostByName(InetAddress.java:431)
        at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
        at java.net.InetAddress.getAllByName(InetAddress.java:215)
        at okhttp3.Dns$1.lookup(Dns.java:40)
        at okhttp3.internal.connection.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:185)
        at okhttp3.internal.connection.RouteSelector.nextProxy(RouteSelector.java:149)
        at okhttp3.internal.connection.RouteSelector.next(RouteSelector.java:84)
        at okhttp3.internal.connection.StreamAllocation.findConnection(StreamAllocation.java:214)
        at okhttp3.internal.connection.StreamAllocation.findHealthyConnection(StreamAllocation.java:135)
        at okhttp3.internal.connection.StreamAllocation.newStream(StreamAllocation.java:114)
        at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:42)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
        at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
        at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
        at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:126)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
        at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:200)
        at okhttp3.RealCall.execute(RealCall.java:77)
        at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.execute(OkHttpSardine.java:594)
        at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.execute(OkHttpSardine.java:590)
        at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.put(OkHttpSardine.java:326)
        at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.put(OkHttpSardine.java:317)
        at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.put(OkHttpSardine.java:296)
        at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.put(OkHttpSardine.java:289)
        at com.example.daniel.connecttodav.MainActivity$DoList.doInBackground(MainActivity.java:38)
        at com.example.daniel.connecttodav.MainActivity.onCreate(MainActivity.java:25)
        at android.app.Activity.performCreate(Activity.java:6367)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1110)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2404)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2511)ย 
        at android.app.ActivityThread.access$900(ActivityThread.java:165)ย 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1375)ย 
        at android.os.Handler.dispatchMessage(Handler.java:102)ย 
        at android.os.Looper.loop(Looper.java:150)ย 
        at android.app.ActivityThread.main(ActivityThread.java:5621)ย 
        at java.lang.reflect.Method.invoke(Native Method)ย 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)ย 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)ย 

Any advices on how to fix this ?

add a "clearCredentials" method

we can use a singleton sardineClient to reuse and
i think we should add a "clear method" to clear the username-password info in memery when we destory a relative activity

Digest authentication not supported

Hello
i'm getting an authentication failure, HTTP 401 on the list() function.

my code:
Sardine sardine = new OkHttpSardine();
sardine.setCredentials("login","password");
List resources = sardine.list("https://mydomain.net/webdav/");

i'm sure the login password are correct, as it works with some other sardine wrapper

anyone would please have an idea ?
Thanks
brgds
alex

IOException: Not a valid DAV response - unmarshal(SardineUtil.java:140)

Hi, I am using this library, it is great, but I got an exception:

io.reactivex.exceptions.UndeliverableException: The exception could not be delivered to the consumer because it has already canceled/disposed the flow or the exception has nowhere to go to begin with. Further reading: https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#error-handling | Not a valid DAV response
    at io.reactivex.plugins.RxJavaPlugins.onError(RxJavaPlugins.java:367)
    at io.reactivex.internal.observers.ConsumerSingleObserver.onSuccess(ConsumerSingleObserver.java:65)
    at io.reactivex.internal.operators.single.SingleFromCallable.subscribeActual(SingleFromCallable.java:56)
    at io.reactivex.Single.subscribe(Single.java:3438)
    at io.reactivex.Single.subscribe(Single.java:3424)
    at com.drakeet.purewriter.AutoBackupService.onHandleIntent(AutoBackupService.kt:33)
    at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:68)
    at android.os.Handler.dispatchMessage(Handler.java:105)
    at android.os.Looper.loop(Looper.java:164)
    at android.os.HandlerThread.run(HandlerThread.java:65)
Caused by: java.io.IOException: Not a valid DAV response
    at com.thegrizzlylabs.sardineandroid.util.SardineUtil.unmarshal(SardineUtil.java:140)
    at com.thegrizzlylabs.sardineandroid.impl.handler.MultiStatusResponseHandler.getMultistatus(MultiStatusResponseHandler.java:38)
    at com.thegrizzlylabs.sardineandroid.impl.handler.MultiStatusResponseHandler.handleResponse(MultiStatusResponseHandler.java:27)
    at com.thegrizzlylabs.sardineandroid.impl.handler.ResourcesResponseHandler.handleResponse(ResourcesResponseHandler.java:25)
    at com.thegrizzlylabs.sardineandroid.impl.handler.ResourcesResponseHandler.handleResponse(ResourcesResponseHandler.java:19)
    at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.execute(OkHttpSardine.java:595)
    at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.propfind(OkHttpSardine.java:180)
    at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.list(OkHttpSardine.java:149)
    at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.list(OkHttpSardine.java:125)
    at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.list(OkHttpSardine.java:120)
    at com.drakeet.purewriter.AutoBackupService.backupToWebDav(AutoBackupService.kt:52)
    at com.drakeet.purewriter.AutoBackupService.access$backupToWebDav(AutoBackupService.kt:18)
    at com.drakeet.purewriter.AutoBackupService$onHandleIntent$1.accept(AutoBackupService.kt:35)
    at com.drakeet.purewriter.AutoBackupService$onHandleIntent$1.accept(AutoBackupService.kt:18)
    at io.reactivex.internal.observers.ConsumerSingleObserver.onSuccess(ConsumerSingleObserver.java:62)
	... 8 more
Caused by: org.simpleframework.xml.core.ValueRequiredException: Unable to satisfy @org.simpleframework.xml.ElementListUnion(value=[@org.simpleframework.xml.ElementList(data=false, empty=true, entry=read, inline=true, name=, required=true, type=class com.thegrizzlylabs.sardineandroid.model.Read), @org.simpleframework.xml.ElementList(data=false, empty=true, entry=write, inline=true, name=, required=true, type=class com.thegrizzlylabs.sardineandroid.model.Write), @org.simpleframework.xml.ElementList(data=false, empty=true, entry=write-properties, inline=true, name=, required=true, type=class com.thegrizzlylabs.sardineandroid.model.WriteProperties), @org.simpleframework.xml.ElementList(data=false, empty=true, entry=write-content, inline=true, name=, required=true, type=class com.thegrizzlylabs.sardineandroid.model.WriteContent), @org.simpleframework.xml.ElementList(data=false, empty=true, entry=unlock, inline=true, name=, required=true, type=class com.thegrizzlylabs.sardineandroid.model.Unlock), @org.simpleframework.xml.ElementList(data=false, empty=true, entry=read-acl, inline=true, name=, required=true, type=class com.thegrizzlylabs.sardineandroid.model.ReadAcl), @org.simpleframework.xml.ElementList(data=false, empty=true, entry=bind, inline=true, name=, required=true, type=class com.thegrizzlylabs.sardineandroid.model.Bind), @org.simpleframework.xml.ElementList(data=false, empty=true, entry=unbind, inline=true, name=, required=true, type=class com.thegrizzlylabs.sardineandroid.model.UnBind), @org.simpleframework.xml.ElementList(data=false, empty=true, entry=read-current-user-privilege-set, inline=true, name=, required=true, type=class com.thegrizzlylabs.sardineandroid.model.ReadCurrentUserPrivilegeSet), @org.simpleframework.xml.ElementList(data=false, empty=true, entry=all, inline=true, name=, required=true, type=class com.thegrizzlylabs.sardineandroid.model.All)]) on field 'content' private java.util.List com.thegrizzlylabs.sardineandroid.model.Privilege.content for class com.thegrizzlylabs.sardineandroid.model.Privilege at line 1
    at org.simpleframework.xml.core.Composite.validate(Composite.java:644)
    at org.simpleframework.xml.core.Composite.readElements(Composite.java:449)
    at org.simpleframework.xml.core.Composite.access$400(Composite.java:59)
    at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1383)
    at org.simpleframework.xml.core.Composite.read(Composite.java:201)
    at org.simpleframework.xml.core.Composite.read(Composite.java:148)
    at org.simpleframework.xml.core.Traverser.read(Traverser.java:92)
    at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:190)
    at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:167)
    at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:124)
    at org.simpleframework.xml.core.Composite.readVariable(Composite.java:623)
    at org.simpleframework.xml.core.Composite.readInstance(Composite.java:573)
    at org.simpleframework.xml.core.Composite.readUnion(Composite.java:549)
    at org.simpleframework.xml.core.Composite.readElement(Composite.java:532)
    at org.simpleframework.xml.core.Composite.readElements(Composite.java:445)
    at org.simpleframework.xml.core.Composite.access$400(Composite.java:59)
    at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1383)
    at org.simpleframework.xml.core.Composite.read(Composite.java:201)
    at org.simpleframework.xml.core.Composite.read(Composite.java:148)
    at org.simpleframework.xml.core.Traverser.read(Traverser.java:92)
    at org.simpleframework.xml.core.Persister.read(Persister.java:625)
    at org.simpleframework.xml.core.Persister.read(Persister.java:606)
    at org.simpleframework.xml.core.Persister.read(Persister.java:584)
    at org.simpleframework.xml.core.Persister.read(Persister.java:480)
    at com.thegrizzlylabs.sardineandroid.util.EntityWithAnyElementConverter.read(EntityWithAnyElementConverter.java:60)
    at com.thegrizzlylabs.sardineandroid.util.EntityWithAnyElementConverter.read(EntityWithAnyElementConverter.java:17)
    at org.simpleframework.xml.convert.RegistryStrategy.read(RegistryStrategy.java:129)
    at org.simpleframework.xml.convert.RegistryStrategy.read(RegistryStrategy.java:108)
    at org.simpleframework.xml.core.Source.getOverride(Source.java:360)
    at org.simpleframework.xml.core.Factory.getConversion(Factory.java:207)
    at org.simpleframework.xml.core.Factory.getOverride(Factory.java:139)
    at org.simpleframework.xml.core.ObjectFactory.getInstance(ObjectFactory.java:63)
    at org.simpleframework.xml.core.Composite.read(Composite.java:139)
    at org.simpleframework.xml.core.Composite.readVariable(Composite.java:623)
    at org.simpleframework.xml.core.Composite.readInstance(Composite.java:573)
    at org.simpleframework.xml.core.Composite.readUnion(Composite.java:549)
    at org.simpleframework.xml.core.Composite.readElement(Composite.java:532)
    at org.simpleframework.xml.core.Composite.readElements(Composite.java:445)
    at org.simpleframework.xml.core.Composite.access$400(Composite.java:59)
    at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1383)
    at org.simpleframework.xml.core.Composite.read(Composite.java:201)
    at org.simpleframework.xml.core.Composite.read(Composite.java:148)
    at org.simpleframework.xml.core.Traverser.read(Traverser.java:92)
    at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:190)
    at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:167)
    at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:124)
    at org.simpleframework.xml.core.Composite.readVariable(Composite.java:623)
    at org.simpleframework.xml.core.Composite.readInstance(Composite.java:573)
    at org.simpleframework.xml.core.Composite.readUnion(Composite.java:549)
    at org.simpleframework.xml.core.Composite.readElement(Composite.java:532)
    at org.simpleframework.xml.core.Composite.readElements(Composite.java:445)
    at org.simpleframework.xml.core.Composite.access$400(Composite.java:59)
    at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1383)
    at org.simpleframework.xml.core.Composite.read(Composite.java:201)
    at org.simpleframework.xml.core.Composite.read(Composite.java:148)
    at org.simpleframework.xml.core.Traverser.read(Traverser.java:92)
    at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:190)
    at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:167)
    at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:124)
    at org.simpleframework.xml.core.Composite.readVariable(Composite.java:623)
    at org.simpleframework.xml.core.Composite.readInstance(Composite.java:573)
    at org.simpleframework.xml.core.Composite.readUnion(Composite.java:549)
    at org.simpleframework.xml.core.Composite.readElement(Composite.java:532)
    at org.simpleframework.xml.core.Composite.readElements(Composite.java:445)
    at org.simpleframework.xml.core.Composite.access$400(Composite.java:59)
    at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1383)
    at org.simpleframework.xml.core.Composite.read(Composite.java:201)
    at org.simpleframework.xml.core.Composite.read(Composite.java:148)
    at org.simpleframework.xml.core.Traverser.read(Traverser.java:92)
    at org.simpleframework.xml.core.Persister.read(Persister.java:625)
    at org.simpleframework.xml.core.Persister.read(Persister.java:606)
    at org.simpleframework.xml.core.Persister.read(Persister.java:584)
    at org.simpleframework.xml.core.Persister.read(Persister.java:543)
    at org.simpleframework.xml.core.Persister.read(Persister.java:444)
    at com.thegrizzlylabs.sardineandroid.util.SardineUtil.unmarshal(SardineUtil.java:135)
	... 22 more

I am using v0.2 and target 28:

implementation('com.thegrizzlylabs.sardine-android:sardine-android:0.2') {
  exclude module: 'stax'
  exclude module: 'stax-api'
  exclude module: 'xpp3'
}

Thank you for your help!

Request made using patch(String url, Map<QName, String> setProps) has always empty body

When trying to make a PROPPATCH request using any of the patch(...) methods, properties passed as parameter are never serialized into the request body, that results always being like this:

<?xml version="1.0" encoding="utf-8"?>
<D:propertyupdate xmlns:D="DAV:">
   <D:set/>
   <D:remove/>
</D:propertyupdate>

Inspecting the code, I noticed that either the Prop prop field in Set and Remove classes and the List<org.w3c.dom.Element> any parameter in Prop class are not annotated, that might be the problem. I tried to annotate them but when annotating the List<org.w3c.dom.Element> any parameter in Prop class I keep getting errors.
I'll try to fix this and make a PR when I'm done but I wanted to let you know about the issue in the meantime in case you have a solution ready before I do.

Thank you for the library, keep up the good work!

Cannot List Files "ValueRequiredException"

Hello,

i ran into a problem while showing data from a webdav Server. The Problem is related to the decoding of the xml. I get a "ValueRequiredException" where it says that "lockentry" is needed, but our server does not use locking at all. Because of that it logs "Not a valid DAV response".

Stacktrace:

Caused by: org.simpleframework.xml.core.ValueRequiredException: Unable to satisfy @org.simpleframework.xml.ElementList(data=false, empty=true, entry=, inline=true, name=, required=true, type=void) on field 'lockentry' private java.util.List com.thegrizzlylabs.sardineandroid.model.Supportedlock.lockentry for class com.thegrizzlylabs.sardineandroid.model.Supportedlock at line -1 at org.simpleframework.xml.core.Composite.validate(Composite.java:644) at org.simpleframework.xml.core.Composite.readElements(Composite.java:449) at org.simpleframework.xml.core.Composite.access$400(Composite.java:59) at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1383) at org.simpleframework.xml.core.Composite.read(Composite.java:201) at org.simpleframework.xml.core.Composite.read(Composite.java:148) at org.simpleframework.xml.core.Traverser.read(Traverser.java:92) at org.simpleframework.xml.core.Persister.read(Persister.java:625) at org.simpleframework.xml.core.Persister.read(Persister.java:606) at org.simpleframework.xml.core.Persister.read(Persister.java:584) at org.simpleframework.xml.core.Persister.read(Persister.java:480) at com.thegrizzlylabs.sardineandroid.util.EntityWithAnyElementConverter.read(EntityWithAnyElementConverter.java:60) at com.thegrizzlylabs.sardineandroid.util.EntityWithAnyElementConverter.read(EntityWithAnyElementConverter.java:17) at org.simpleframework.xml.convert.RegistryStrategy.read(RegistryStrategy.java:129) at org.simpleframework.xml.convert.RegistryStrategy.read(RegistryStrategy.java:108) at org.simpleframework.xml.core.Source.getOverride(Source.java:360) at org.simpleframework.xml.core.Factory.getConversion(Factory.java:207) at org.simpleframework.xml.core.Factory.getOverride(Factory.java:139) at org.simpleframework.xml.core.ObjectFactory.getInstance(ObjectFactory.java:63) at org.simpleframework.xml.core.Composite.read(Composite.java:139) at org.simpleframework.xml.core.Composite.readVariable(Composite.java:623) at org.simpleframework.xml.core.Composite.readInstance(Composite.java:573) at org.simpleframework.xml.core.Composite.readUnion(Composite.java:549) at org.simpleframework.xml.core.Composite.readElement(Composite.java:532) at org.simpleframework.xml.core.Composite.readElements(Composite.java:445) at org.simpleframework.xml.core.Composite.access$400(Composite.java:59) at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1383) at org.simpleframework.xml.core.Composite.read(Composite.java:201) W/System.err: at org.simpleframework.xml.core.Composite.read(Composite.java:148) at org.simpleframework.xml.core.Traverser.read(Traverser.java:92) at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:190) at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:167) at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:124) at org.simpleframework.xml.core.Composite.readVariable(Composite.java:623) at org.simpleframework.xml.core.Composite.readInstance(Composite.java:573) at org.simpleframework.xml.core.Composite.readUnion(Composite.java:549) at org.simpleframework.xml.core.Composite.readElement(Composite.java:532) at org.simpleframework.xml.core.Composite.readElements(Composite.java:445) at org.simpleframework.xml.core.Composite.access$400(Composite.java:59) at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1383) at org.simpleframework.xml.core.Composite.read(Composite.java:201) at org.simpleframework.xml.core.Composite.read(Composite.java:148) at org.simpleframework.xml.core.Traverser.read(Traverser.java:92) at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:190) at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:167) at org.simpleframework.xml.core.CompositeInlineList.read(CompositeInlineList.java:124) at org.simpleframework.xml.core.Composite.readVariable(Composite.java:623) at org.simpleframework.xml.core.Composite.readInstance(Composite.java:573) at org.simpleframework.xml.core.Composite.readUnion(Composite.java:549) at org.simpleframework.xml.core.Composite.readElement(Composite.java:532) at org.simpleframework.xml.core.Composite.readElements(Composite.java:445) at org.simpleframework.xml.core.Composite.access$400(Composite.java:59) at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1383) at org.simpleframework.xml.core.Composite.read(Composite.java:201) at org.simpleframework.xml.core.Composite.read(Composite.java:148) at org.simpleframework.xml.core.Traverser.read(Traverser.java:92) at org.simpleframework.xml.core.Persister.read(Persister.java:625) at org.simpleframework.xml.core.Persister.read(Persister.java:606) at org.simpleframework.xml.core.Persister.read(Persister.java:584) at org.simpleframework.xml.core.Persister.read(Persister.java:543) at org.simpleframework.xml.core.Persister.read(Persister.java:444) at com.thegrizzlylabs.sardineandroid.util.SardineUtil.unmarshal(SardineUtil.java:135) ... 10 more

java.io.IOException: Not a valid DAV response

2022-06-21 11:36:04.826 16423-16539/? W/System.err: java.io.IOException: Not a valid DAV response
2022-06-21 11:36:04.831 16423-16539/? W/System.err: at com.thegrizzlylabs.sardineandroid.util.SardineUtil.unmarshal(SardineUtil.java:142)
2022-06-21 11:36:04.836 16423-16539/? W/System.err: at com.thegrizzlylabs.sardineandroid.impl.handler.MultiStatusResponseHandler.getMultistatus(MultiStatusResponseHandler.java:38)
2022-06-21 11:36:04.839 16423-16539/? W/System.err: at com.thegrizzlylabs.sardineandroid.impl.handler.MultiStatusResponseHandler.handleResponse(MultiStatusResponseHandler.java:27)
2022-06-21 11:36:04.840 16423-16539/? W/System.err: at com.thegrizzlylabs.sardineandroid.impl.handler.ResourcesResponseHandler.handleResponse(ResourcesResponseHandler.java:25)
2022-06-21 11:36:04.841 16423-16539/? W/System.err: at com.thegrizzlylabs.sardineandroid.impl.handler.ResourcesResponseHandler.handleResponse(ResourcesResponseHandler.java:19)
2022-06-21 11:36:04.842 16423-16539/? W/System.err: at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.execute(OkHttpSardine.java:627)
2022-06-21 11:36:04.842 16423-16539/? W/System.err: at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.propfind(OkHttpSardine.java:180)
2022-06-21 11:36:04.843 16423-16539/? W/System.err: at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.list(OkHttpSardine.java:149)
2022-06-21 11:36:04.844 16423-16539/? W/System.err: at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.list(OkHttpSardine.java:125)
2022-06-21 11:36:04.845 16423-16539/? W/System.err: at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.list(OkHttpSardine.java:120)
2022-06-21 11:36:04.846 16423-16539/? W/System.err: at com.cxincx.xxjz.setting.backup.webdav.SyncManager.listAllFile(SyncManager.java:193)
2022-06-21 11:36:04.848 16423-16539/? W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
2022-06-21 11:36:04.849 16423-16539/? W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
2022-06-21 11:36:04.849 16423-16539/? W/System.err: at java.lang.Thread.run(Thread.java:920)
2022-06-21 11:36:04.850 16423-16539/? W/System.err: Caused by: org.simpleframework.xml.core.ElementException: Element 'extendFileList' does not have a match in class com.thegrizzlylabs.sardineandroid.model.Multistatus at line -1
2022-06-21 11:36:04.850 16423-16539/? W/System.err: at org.simpleframework.xml.core.Composite.readElement(Composite.java:527)
2022-06-21 11:36:04.851 16423-16539/? W/System.err: at org.simpleframework.xml.core.Composite.readElements(Composite.java:445)
2022-06-21 11:36:04.851 16423-16539/? W/System.err: at org.simpleframework.xml.core.Composite.access$400(Composite.java:59)
2022-06-21 11:36:04.851 16423-16539/? W/System.err: at org.simpleframework.xml.core.Composite$Builder.read(Composite.java:1383)
2022-06-21 11:36:04.851 16423-16539/? W/System.err: at org.simpleframework.xml.core.Composite.read(Composite.java:201)
2022-06-21 11:36:04.852 16423-16539/? W/System.err: at org.simpleframework.xml.core.Composite.read(Composite.java:148)
2022-06-21 11:36:04.852 16423-16539/? W/System.err: at org.simpleframework.xml.core.Traverser.read(Traverser.java:92)
2022-06-21 11:36:04.852 16423-16539/? W/System.err: at org.simpleframework.xml.core.Persister.read(Persister.java:625)
2022-06-21 11:36:04.852 16423-16539/? W/System.err: at org.simpleframework.xml.core.Persister.read(Persister.java:606)
2022-06-21 11:36:04.853 16423-16539/? W/System.err: at org.simpleframework.xml.core.Persister.read(Persister.java:584)
2022-06-21 11:36:04.853 16423-16539/? W/System.err: at org.simpleframework.xml.core.Persister.read(Persister.java:543)
2022-06-21 11:36:04.853 16423-16539/? W/System.err: at org.simpleframework.xml.core.Persister.read(Persister.java:444)
2022-06-21 11:36:04.853 16423-16539/? W/System.err: at com.thegrizzlylabs.sardineandroid.util.SardineUtil.unmarshal(SardineUtil.java:137)
2022-06-21 11:36:04.854 16423-16539/? W/System.err: ... 14 more

Yandex Webdav

Hi, I am trying to figure it out what causing the following issues.
If a file is larger then about 500 KB you get the following error on Yandex Webdav (https://disk.yandex.com) service. You can test your self too. Simply register a test account at yandex.com and use https://webdav.yandex.com with your username and password

This does not happen with other webdav clients. For example CarrotDav from http://rei.to/

2018-08-23 22:03:04.991 28160-30453/com.sample W/System.err: javax.net.ssl.SSLException: Write error: ssl=0xc23ae620: I/O error during system call, Broken pipe 2018-08-23 22:03:04.999 28160-30453/com.sample W/System.err: at com.android.org.conscrypt.NativeCrypto.SSL_write(Native Method) 2018-08-23 22:03:04.999 28160-30453/com.sample W/System.err: at com.android.org.conscrypt.OpenSSLSocketImpl$SSLOutputStream.write(OpenSSLSocketImpl.java:832) 2018-08-23 22:03:04.999 28160-30453/com.sample W/System.err: at LHa.write(Okio.java:79) 2018-08-23 22:03:04.999 28160-30453/com.sample W/System.err: at wHa.write(AsyncTimeout.java:180) 2018-08-23 22:03:05.000 28160-30453/com.sample W/System.err: at PHa.h(RealBufferedSink.java:179) 2018-08-23 22:03:05.000 28160-30453/com.sample W/System.err: at PHa.write(RealBufferedSink.java:42) 2018-08-23 22:03:05.000 28160-30453/com.sample W/System.err: at MGa$d.write(Http1Codec.java:295) 2018-08-23 22:03:05.000 28160-30453/com.sample W/System.err: at GHa.write(ForwardingSink.java:35) 2018-08-23 22:03:05.000 28160-30453/com.sample W/System.err: at zGa$a.write(CallServerInterceptor.java:149) 2018-08-23 22:03:05.001 28160-30453/com.sample W/System.err: at PHa.h(RealBufferedSink.java:179) 2018-08-23 22:03:05.001 28160-30453/com.sample W/System.err: at PHa.a(RealBufferedSink.java:107) 2018-08-23 22:03:05.001 28160-30453/com.sample W/System.err: at ZFa.writeTo(RequestBody.java:120) 2018-08-23 22:03:05.001 28160-30453/com.sample W/System.err: at zGa.intercept(CallServerInterceptor.java:72) 2018-08-23 22:03:05.001 28160-30453/com.sample W/System.err: at FGa.a(RealInterceptorChain.java:147) 2018-08-23 22:03:05.001 28160-30453/com.sample W/System.err: at rGa.intercept(ConnectInterceptor.java:45) 2018-08-23 22:03:05.001 28160-30453/com.sample W/System.err: at FGa.a(RealInterceptorChain.java:147) 2018-08-23 22:03:05.001 28160-30453/com.sample W/System.err: at FGa.a(RealInterceptorChain.java:121) 2018-08-23 22:03:05.002 28160-30453/com.sample W/System.err: at nGa.intercept(CacheInterceptor.java:93) 2018-08-23 22:03:05.002 28160-30453/com.sample W/System.err: at FGa.a(RealInterceptorChain.java:147) 2018-08-23 22:03:05.002 28160-30453/com.sample W/System.err: at FGa.a(RealInterceptorChain.java:121) 2018-08-23 22:03:05.002 28160-30453/com.sample W/System.err: at yGa.intercept(BridgeInterceptor.java:93) 2018-08-23 22:03:05.002 28160-30453/com.sample W/System.err: at FGa.a(RealInterceptorChain.java:147) 2018-08-23 22:03:05.003 28160-30453/com.sample W/System.err: at IGa.intercept(RetryAndFollowUpInterceptor.java:126) 2018-08-23 22:03:05.003 28160-30453/com.sample W/System.err: at FGa.a(RealInterceptorChain.java:147) 2018-08-23 22:03:05.003 28160-30453/com.sample W/System.err: at FGa.a(RealInterceptorChain.java:121) 2018-08-23 22:03:05.003 28160-30453/com.sample W/System.err: at VFa.d(RealCall.java:200) 2018-08-23 22:03:05.003 28160-30453/com.sample W/System.err: at VFa.m(RealCall.java:77) 2018-08-23 22:03:05.004 28160-30453/com.sample W/System.err: at uDa.a(OkHttpSardine.java:596) 2018-08-23 22:03:05.004 28160-30453/com.sample W/System.err: at uDa.a(OkHttpSardine.java:592) 2018-08-23 22:03:05.004 28160-30453/com.sample W/System.err: at uDa.a(OkHttpSardine.java:302) 2018-08-23 22:03:05.004 28160-30453/com.sample W/System.err: at uDa.a(OkHttpSardine.java:289) 2018-08-23 22:03:05.005 28160-30453/com.sample W/System.err: at uDa.a(OkHttpSardine.java:278) 2018-08-23 22:03:05.005 28160-30453/com.sample W/System.err: at CBa.a(SardineWebDAV.java:101)

Collaborate with dav4jvm

The repo has a few open pull requests and seems like you don't have enough time to dedicate to the project.

There is another WebDAV library from DavX5 app
https://github.com/bitfireAT/dav4jvm
It's mainly used for CalDAV but I'm not sure if it can be used for files.

It's actively maintained so maybe you can merge this library into it? Then it would be easier for a new developer to peek a library to start using WebDAV.
The open source is great because it makes collaboration easier but a fragmentation makes it more difficult.

Or maybe there are some architectural design differences? If yes can you pleas explain pros and cons.

CC @rt1shnik @kotori2 @3c71 @sung-eun

using DAV on local network through https fails

Hi
i couldn't succeed yet to use the client locally, behind my home router using SSL

i solved my previous issues, but realize that i can't connect to my server (RPi connected to my home router), if i am connected with the home WiFi.
i can almost understand because the domain name is resolved to an external IP that the android client then cannot reach.

i tried to connect with the android client to the local address directly (https://192.168.xxxxx), but it doesn't work (SSLPeerUnverifiedException: Hostname 192.168.xxxx). Then I read that SSL certificates cannot be generated for IP addresses...

On the other hand, mapping a webDAV from a Windows explorer works fine to connect to my local Apache server ... (ie even using a domain name https://domain.net, and over the local WiFi...)

is there a configuration of the client to overcome this local network access issue ?

Thanks!

sardine.put over https

Hi
i can authenticate successfully through Digest authentication and list the remote DAV folder.

However, i'm having an issue to put some files there, using the put(String, byte[]) method (url being of the form https://xxxxxxxxxxxxxxxx )

unfortunately it fails, with the following stacktrace. Any help more than welcome.

Server side is :
Apache2 on Ubuntu 16.04, with timeout default (300s)
Let's encrypt SSL certificate

W/System.err: javax.net.ssl.SSLException: Read error: ssl=0xae1327c0: I/O error during system call, Connection reset by peer
W/System.err: at com.android.org.conscrypt.NativeCrypto.SSL_read(Native Method)
at com.android.org.conscrypt.SslWrapper.read(SslWrapper.java:384)
at com.android.org.conscrypt.ConscryptFileDescriptorSocket$SSLInputStream.read(ConscryptFileDescriptorSocket.java:541)
at okio.Okio$2.read(Okio.java:140)
at okio.AsyncTimeout$2.read(AsyncTimeout.java:237)
W/System.err: at okio.RealBufferedSource.indexOf(RealBufferedSource.java:355)
at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:227)
at okhttp3.internal.http1.Http1Codec.readHeaderLine(Http1Codec.java:215)
at okhttp3.internal.http1.Http1Codec.readResponseHeaders(Http1Codec.java:189)
W/System.err: at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:88)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:45)
W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
W/System.err: at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
W/System.err: at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:126)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
W/System.err: at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:200)
at okhttp3.RealCall.execute(RealCall.java:77)
at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.execute(OkHttpSardine.java:597)
W/System.err: at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.execute(OkHttpSardine.java:593)
at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.put(OkHttpSardine.java:329)
at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.put(OkHttpSardine.java:320)
W/System.err: at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.put(OkHttpSardine.java:299)
at com.thegrizzlylabs.sardineandroid.impl.OkHttpSardine.put(OkHttpSardine.java:292)
at com.PublishJob.processFiles(PublishJob.java:70)
at com.MainActivity$7.run(MainActivity.java:275)
W/System.err: at java.lang.Thread.run(Thread.java:764)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.