[
https://issues.apache.org/jira/browse/JCR-3984?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Ankush Mishra updated JCR-3984:
-------------------------------
Description:
So, since, WebDAV-Sync Report Method RFC 6578 hasn't been included yet. I
decided to go along and make a method, which extends ReportMethod. I had to
override processResponseBody in DavMethodBase because RFC 6578 overrides the
MultiStatus element to include other than MultiStatusResponses but also a sync
token. For Example:
{quote}
<D:multistatus>
<D:response>...</D:response>
<D:response>...</D:response>
<D:sync-token> ... </D:sync-token>
</D:multistatus>
{quote}
To parse I need to getResponseBodyasDocument. But problem lies in the fact that
it can't be used more than once, by definition. Thus, I have to override the
Sync Method class to also include a private _multistatus_ variable, where as,
if this wasn't done and DavMethodBase.processResponseBody was used, then it
would yield a NullPointerException.
The solution to this, I found is that in the function
DavMethodBase.getResponseBodyasDocument has a check for responseDocument, but
responseDocument is never set after reading
{quote}
DavMethodBase.java
getResponseBodyasDocument(){
if (responseDocument != null) {
return responseDocument; // response has already been read
}
....
....
InputStream in = getResponseBodyAsStream();
if (in != null) {
// read response and try to build a xml document
try {
return DomUtil.parseDocument(in);
{quote}
which simply put returns the document without setting it. A minor update to
this solution would be:
{quote}
DavMethodBase.java
getResponseBodyasDocument(){
if (responseDocument != null) {
return responseDocument; // response has already been read
}
....
....
InputStream in = getResponseBodyAsStream();
if (in != null) {
// read response and try to build a xml document
try {
responseDocument = DomUtil.parseDocument(in);
return responseDocument;
{quote}
Hopefully, this makes sense and is updated. in
DavMethodBase#getResponseBodyasDocument
was:
So, since, WebDAV-Sync Report Method RFC 6578 hasn't been included yet. I
decided to go along and make a method, which extends ReportMethod. I had to
override processResponseBody in DavMethodBase because RFC 6578 overrides the
MultiStatus element to include other than MultiStatusResponses but also a sync
token. For Example:
{quote}
<D:multistatus>
<D:response>...</D:response>
<D:response>...</D:response>
<D:sync-token> ... </D:sync-token>
</D:multistatus>
{quote}
To parse I need to getResponseBodyasDocument. But problem lies in the fact that
it can't be used more than once, by definition. Thus, I have to override the
Sync Method class to also include a private _multistatus_ variable, where as if
this wasn't done and DavMethodBase.processResponseBody was used, then it would
yield a NullPointerException.
The solution to this, I found is that in the function
DavMethodBase.getResponseBodyasDocument has a check for responseDocument, but
responseDocument is never set after reading
{quote}
DavMethodBase.java
getResponseBodyasDocument(){
if (responseDocument != null) {
return responseDocument; // response has already been read
}
....
....
InputStream in = getResponseBodyAsStream();
if (in != null) {
// read response and try to build a xml document
try {
return DomUtil.parseDocument(in);
{quote}
which simply put returns the document without setting it. A minor update to
this solution would be:
{quote}
DavMethodBase.java
getResponseBodyasDocument(){
if (responseDocument != null) {
return responseDocument; // response has already been read
}
....
....
InputStream in = getResponseBodyAsStream();
if (in != null) {
// read response and try to build a xml document
try {
responseDocument = DomUtil.parseDocument(in);
return responseDocument;
{quote}
Hopefully, this makes sense and is updated. in
DavMethodBase#getResponseBodyasDocument
> Overriding of processResponseBody, and using getResponseBodyAsDocument(),
> causes a NullPointerException
> -------------------------------------------------------------------------------------------------------
>
> Key: JCR-3984
> URL: https://issues.apache.org/jira/browse/JCR-3984
> Project: Jackrabbit Content Repository
> Issue Type: Improvement
> Components: jackrabbit-webdav
> Affects Versions: 2.12.1
> Environment: Oracle_JVM 1.8.0_91, jackrabbit-webdav-2.12.1
> Reporter: Ankush Mishra
> Priority: Minor
>
> So, since, WebDAV-Sync Report Method RFC 6578 hasn't been included yet. I
> decided to go along and make a method, which extends ReportMethod. I had to
> override processResponseBody in DavMethodBase because RFC 6578 overrides the
> MultiStatus element to include other than MultiStatusResponses but also a
> sync token. For Example:
> {quote}
> <D:multistatus>
> <D:response>...</D:response>
> <D:response>...</D:response>
> <D:sync-token> ... </D:sync-token>
> </D:multistatus>
> {quote}
> To parse I need to getResponseBodyasDocument. But problem lies in the fact
> that it can't be used more than once, by definition. Thus, I have to override
> the Sync Method class to also include a private _multistatus_ variable, where
> as, if this wasn't done and DavMethodBase.processResponseBody was used, then
> it would yield a NullPointerException.
> The solution to this, I found is that in the function
> DavMethodBase.getResponseBodyasDocument has a check for responseDocument, but
> responseDocument is never set after reading
> {quote}
> DavMethodBase.java
> getResponseBodyasDocument(){
> if (responseDocument != null) {
> return responseDocument; // response has already been read
> }
> ....
> ....
> InputStream in = getResponseBodyAsStream();
> if (in != null) {
> // read response and try to build a xml document
> try {
> return DomUtil.parseDocument(in);
> {quote}
> which simply put returns the document without setting it. A minor update to
> this solution would be:
> {quote}
> DavMethodBase.java
> getResponseBodyasDocument(){
> if (responseDocument != null) {
> return responseDocument; // response has already been read
> }
> ....
> ....
> InputStream in = getResponseBodyAsStream();
> if (in != null) {
> // read response and try to build a xml document
> try {
> responseDocument = DomUtil.parseDocument(in);
> return responseDocument;
> {quote}
> Hopefully, this makes sense and is updated. in
> DavMethodBase#getResponseBodyasDocument
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)