You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@forrest.apache.org by Miguel Valencia <mi...@juntadeandalucia.es> on 2016/03/01 10:57:23 UTC

Error to resolve contract: Error Premature end of file.

Hi

 I have detected an error in my project with Apache Cocoon using dispatcher
plugin.

ERROR cocoon.access - Internal Cocoon Problem
Caused by: org.apache.forrest.dispatcher.exception.ContractException:
Could not invoke the transformation for the contract "meta". Error java:
javax.xml.transform.TransformerException: Premature end of file.

Error sequence is:
a) Ask some page of my project
b) Wait until expire jx cache
c) Ask again the same page

The web page of my project using forrest, so using structurer that are
composite with contracts and caching with jx tag. 

Example jx caching:

jx:cache-key=
"${Packages.org.apache.forrest.dispatcher.impl.helper.Key
(cocoon.request).toString()}"
jx:cache-validity=
"${Packages.org.apache.excalibur.source.impl.validity.
ExpiresValidity(300000)}">

Example call to contract:

<forrest:contract name="comun/meta"
dataURI="servlet:conector:/estatico/drupal/metadatos.xml">
  <forrest:property name="url">/${getRequest}/</forrest:property>
</forrest:contract>


Sometimes to resolve some contracts, dispatcher can not get XSLT of contract
and then appear this error.

Two things I have seen:
1) If not used jx cache this error not appear.
2) I have debug this problema until class:
org.apache.forrest.dispatcher.impl.CocoonResolver and if put synchronized
block here:

source = resolver.resolveURI(uri);      
stream = new BufferedInputStream(source.getInputStream());

then, it seems that error not show.

has anyone seen this error before?

Thanks


Re: Error to resolve contract: Error Premature end of file.

Posted by Thorsten Scherler <th...@apache.org>.
On 01/03/16 14:15, Miguel Valencia wrote:
> Thorsten Scherler <thorsten <at> apache.org> writes:
> 
>>
>> On 01/03/16 10:57, Miguel Valencia wrote:
>>> Hi
>>>
>>>  I have detected an error in my project with Apache Cocoon using dispatcher
>>> plugin.
>>>
>>> ERROR cocoon.access - Internal Cocoon Problem
>>> Caused by: org.apache.forrest.dispatcher.exception.ContractException:
>>> Could not invoke the transformation for the contract "meta". Error java:
>>> javax.xml.transform.TransformerException: Premature end of file.
>>>
>>> Error sequence is:
>>> a) Ask some page of my project
>>> b) Wait until expire jx cache
>>> c) Ask again the same page
>>>
>>> The web page of my project using forrest, so using structurer that are
>>> composite with contracts and caching with jx tag. 
>>>
>>> Example jx caching:
>>>
>>> jx:cache-key=
>>> "${Packages.org.apache.forrest.dispatcher.impl.helper.Key
>>> (cocoon.request).toString()}"
>>> jx:cache-validity=
>>> "${Packages.org.apache.excalibur.source.impl.validity.
>>> ExpiresValidity(300000)}">
>>>
>>> Example call to contract:
>>>
>>> <forrest:contract name="comun/meta"
>>> dataURI="servlet:conector:/estatico/drupal/metadatos.xml">
>>>   <forrest:property name="url">/${getRequest}/</forrest:property>
>>> </forrest:contract>
>>>
>>>
>>> Sometimes to resolve some contracts, dispatcher can not get XSLT of contract
>>> and then appear this error.
>>>
>>> Two things I have seen:
>>> 1) If not used jx cache this error not appear.
>>> 2) I have debug this problema until class:
>>> org.apache.forrest.dispatcher.impl.CocoonResolver and if put synchronized
>>> block here:
>>>
>>> source = resolver.resolveURI(uri);      
>>> stream = new BufferedInputStream(source.getInputStream());
>>>
>>> then, it seems that error not show.
>>>
>>> has anyone seen this error before?
>>>
>>> Thanks
>>>
>>
>> Hola Miguel, como estamos? ;)
>>
>> It looks like that either the data url of the contract or the
>> ${getRequest} is not resolved.
>>
>> ${getRequest} is a xml, coming from where?
>>
>> salu2
>>
> 
> Hi Thor
> 
> we are as always, same people same problems :-P
> 
> About this problema, the contract read a file on disk. At beginner whe
> though it was a problem with NFS system, but we changed the file to disk and
> the problem go on.
> 
> We deleted the contract and then, error appear in the next contract that it
> used dataURI parameter. 
> I think is a race condition because not happen always, and then any variable
> is lost or override. It's strange because dispatcher is configured like
> prototype bean.
> 
> Logs including messages in code seems that sometimes, when you try to
> terminate the contract for the XSLT to be used to get the HTML of the
> contract, an XML type is obtained:
> 
> 1 <? Xml version = "1.0" encoding = "utf-8"?>
> 2 <foo />
> 
> What causes the error when performing the processing SAX. Debug the
> application has reached the class:
> org.apache.forrest.dispatcher.impl.CocoonResolver that is where the
> information is obtained when a contract is terminated. Thinking it might be
> a bug type: race condition, which for some concurrency issue the value of
> the variable that obtains the data stream contract miss a synchronized block
> was applied to the following judgments of code
> 
> 1 synchronized (this) {
> 2   source = resolver.resolveURI (uri);
> 3   stream = new BufferedInputStream (source.getInputStream ());
> 4 }
> 
> and with this modification to the code, error not appear, but I think this
> change could affect to performance of application.
> 
> What do you think?
> 

Yeah, it will influence the performance a bit but it makes sense what
you are describing.

Can you provide a patch and we will apply it.

salu2


-- 
Thorsten Scherler <thorsten.at.apache.org>
codeBusters S.L. - web based systems
<consulting, training and solutions>
http://www.codebusters.es/


Re: Error to resolve contract: Error Premature end of file.

Posted by Miguel Valencia <mi...@juntadeandalucia.es>.
Thorsten Scherler <thorsten <at> apache.org> writes:

> 
> On 01/03/16 10:57, Miguel Valencia wrote:
> > Hi
> > 
> >  I have detected an error in my project with Apache Cocoon using dispatcher
> > plugin.
> > 
> > ERROR cocoon.access - Internal Cocoon Problem
> > Caused by: org.apache.forrest.dispatcher.exception.ContractException:
> > Could not invoke the transformation for the contract "meta". Error java:
> > javax.xml.transform.TransformerException: Premature end of file.
> > 
> > Error sequence is:
> > a) Ask some page of my project
> > b) Wait until expire jx cache
> > c) Ask again the same page
> > 
> > The web page of my project using forrest, so using structurer that are
> > composite with contracts and caching with jx tag. 
> > 
> > Example jx caching:
> > 
> > jx:cache-key=
> > "${Packages.org.apache.forrest.dispatcher.impl.helper.Key
> > (cocoon.request).toString()}"
> > jx:cache-validity=
> > "${Packages.org.apache.excalibur.source.impl.validity.
> > ExpiresValidity(300000)}">
> > 
> > Example call to contract:
> > 
> > <forrest:contract name="comun/meta"
> > dataURI="servlet:conector:/estatico/drupal/metadatos.xml">
> >   <forrest:property name="url">/${getRequest}/</forrest:property>
> > </forrest:contract>
> > 
> > 
> > Sometimes to resolve some contracts, dispatcher can not get XSLT of contract
> > and then appear this error.
> > 
> > Two things I have seen:
> > 1) If not used jx cache this error not appear.
> > 2) I have debug this problema until class:
> > org.apache.forrest.dispatcher.impl.CocoonResolver and if put synchronized
> > block here:
> > 
> > source = resolver.resolveURI(uri);      
> > stream = new BufferedInputStream(source.getInputStream());
> > 
> > then, it seems that error not show.
> > 
> > has anyone seen this error before?
> > 
> > Thanks
> > 
> 
> Hola Miguel, como estamos? ;)
> 
> It looks like that either the data url of the contract or the
> ${getRequest} is not resolved.
> 
> ${getRequest} is a xml, coming from where?
> 
> salu2
> 

Hi Thor

we are as always, same people same problems :-P

About this problema, the contract read a file on disk. At beginner whe
though it was a problem with NFS system, but we changed the file to disk and
the problem go on.

We deleted the contract and then, error appear in the next contract that it
used dataURI parameter. 
I think is a race condition because not happen always, and then any variable
is lost or override. It's strange because dispatcher is configured like
prototype bean.

Logs including messages in code seems that sometimes, when you try to
terminate the contract for the XSLT to be used to get the HTML of the
contract, an XML type is obtained:

1 <? Xml version = "1.0" encoding = "utf-8"?>
2 <foo />

What causes the error when performing the processing SAX. Debug the
application has reached the class:
org.apache.forrest.dispatcher.impl.CocoonResolver that is where the
information is obtained when a contract is terminated. Thinking it might be
a bug type: race condition, which for some concurrency issue the value of
the variable that obtains the data stream contract miss a synchronized block
was applied to the following judgments of code

1 synchronized (this) {
2   source = resolver.resolveURI (uri);
3   stream = new BufferedInputStream (source.getInputStream ());
4 }

and with this modification to the code, error not appear, but I think this
change could affect to performance of application.

What do you think?



Re: Error to resolve contract: Error Premature end of file.

Posted by Thorsten Scherler <th...@apache.org>.
On 01/03/16 10:57, Miguel Valencia wrote:
> Hi
> 
>  I have detected an error in my project with Apache Cocoon using dispatcher
> plugin.
> 
> ERROR cocoon.access - Internal Cocoon Problem
> Caused by: org.apache.forrest.dispatcher.exception.ContractException:
> Could not invoke the transformation for the contract "meta". Error java:
> javax.xml.transform.TransformerException: Premature end of file.
> 
> Error sequence is:
> a) Ask some page of my project
> b) Wait until expire jx cache
> c) Ask again the same page
> 
> The web page of my project using forrest, so using structurer that are
> composite with contracts and caching with jx tag. 
> 
> Example jx caching:
> 
> jx:cache-key=
> "${Packages.org.apache.forrest.dispatcher.impl.helper.Key
> (cocoon.request).toString()}"
> jx:cache-validity=
> "${Packages.org.apache.excalibur.source.impl.validity.
> ExpiresValidity(300000)}">
> 
> Example call to contract:
> 
> <forrest:contract name="comun/meta"
> dataURI="servlet:conector:/estatico/drupal/metadatos.xml">
>   <forrest:property name="url">/${getRequest}/</forrest:property>
> </forrest:contract>
> 
> 
> Sometimes to resolve some contracts, dispatcher can not get XSLT of contract
> and then appear this error.
> 
> Two things I have seen:
> 1) If not used jx cache this error not appear.
> 2) I have debug this problema until class:
> org.apache.forrest.dispatcher.impl.CocoonResolver and if put synchronized
> block here:
> 
> source = resolver.resolveURI(uri);      
> stream = new BufferedInputStream(source.getInputStream());
> 
> then, it seems that error not show.
> 
> has anyone seen this error before?
> 
> Thanks
> 


Hola Miguel, como estamos? ;)

It looks like that either the data url of the contract or the
${getRequest} is not resolved.

${getRequest} is a xml, coming from where?

salu2

-- 
Thorsten Scherler <thorsten.at.apache.org>
codeBusters S.L. - web based systems
<consulting, training and solutions>
http://www.codebusters.es/