Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

VCF to HTML conversion is throwing exception with partial conversion #16

Closed
GoogleCodeExporter opened this issue Mar 21, 2015 · 1 comment

Comments

@GoogleCodeExporter
Copy link

What steps will reproduce the problem?
            ParserChainTextReader reader = Ezvcard.parse(new File(fileName
                    + ".vcf"));
            List<VCard> cards = reader.all();
            Iterator<VCard> iter = cards.iterator();

            Ezvcard.writeHtml(cards).go(new File(fileName + "new.html"));


NOTE: No Error when converting to XML, JSON.


What is the expected output?
HTML file all the data

What is the actual output?
Partial HTML 

What version of ez-vcard are you using?
latest, just downloaded

What version of Java are you using?
1.6 and 1.7

Please provide any additional information below.

Apr 22, 2014 2:50:43 PM freemarker.log._JDK14LoggerFactory$JDK14Logger error
SEVERE: Error executing FreeMarker template
FreeMarker template error:
The following has evaluated to null or missing:
==> org  [in template "hcard-template.html" at line 407, column 107]

Tip: If the failing expression is known to be legally null/missing, either 
specify a default value with myOptionalVar!myDefault, or use <#if 
myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the 
last step of the expression; to cover the whole expression, use parenthessis: 
(myOptionVar.foo)!myDefault, (myOptionVar.foo)??

The failing instruction (FTL stack trace):
----------
==> ${org}  [in template "hcard-template.html" at line 407, column 105]
    #if org_index == 0  [in template "hcard-template.html" at line 406, column 65]
----------

Java stack trace (for programmers):
----------
freemarker.core.InvalidReferenceException: [... Exception message was already 
printed; see it above ...]
    at freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:98)
    at freemarker.core.EvalUtil.coerceModelToString(EvalUtil.java:382)
    at freemarker.core.Expression.evalAndCoerceToString(Expression.java:115)
    at freemarker.core.DollarVariable.accept(DollarVariable.java:76)
    at freemarker.core.Environment.visit(Environment.java:265)
    at freemarker.core.MixedContent.accept(MixedContent.java:93)
    at freemarker.core.Environment.visit(Environment.java:265)
    at freemarker.core.IfBlock.accept(IfBlock.java:84)
    at freemarker.core.Environment.visitByHiddingParent(Environment.java:286)
    at freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:193)
    at freemarker.core.Environment.visitIteratorBlock(Environment.java:509)
    at freemarker.core.IteratorBlock.accept(IteratorBlock.java:103)
    at freemarker.core.Environment.visit(Environment.java:265)
    at freemarker.core.MixedContent.accept(MixedContent.java:93)
    at freemarker.core.Environment.visitByHiddingParent(Environment.java:286)
    at freemarker.core.ConditionalBlock.accept(ConditionalBlock.java:86)
    at freemarker.core.Environment.visit(Environment.java:265)
    at freemarker.core.MixedContent.accept(MixedContent.java:93)
    at freemarker.core.Environment.visitByHiddingParent(Environment.java:286)
    at freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:193)
    at freemarker.core.Environment.visitIteratorBlock(Environment.java:509)
    at freemarker.core.IteratorBlock.accept(IteratorBlock.java:103)
    at freemarker.core.Environment.visit(Environment.java:265)
    at freemarker.core.MixedContent.accept(MixedContent.java:93)
    at freemarker.core.Environment.visit(Environment.java:265)
    at freemarker.core.Environment.process(Environment.java:243)
    at freemarker.template.Template.process(Template.java:277)
    at ezvcard.io.html.HCardPage.write(HCardPage.java:158)
    at ezvcard.Ezvcard$WriterChainHtml.go(Ezvcard.java:1691)
    at ezvcard.Ezvcard$WriterChainHtml.go(Ezvcard.java:1675)
    at MyVCard.main(MyVCard.java:25)

Exception in thread "main" java.lang.RuntimeException: 
freemarker.core.InvalidReferenceException: The following has evaluated to null 
or missing:
==> org  [in template "hcard-template.html" at line 407, column 107]

Tip: If the failing expression is known to be legally null/missing, either 
specify a default value with myOptionalVar!myDefault, or use <#if 
myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the 
last step of the expression; to cover the whole expression, use parenthessis: 
(myOptionVar.foo)!myDefault, (myOptionVar.foo)??

The failing instruction (print stack trace for 1 more):
==> ${org}  [in template "hcard-template.html" at line 407, column 105]
    at ezvcard.io.html.HCardPage.write(HCardPage.java:161)
    at ezvcard.Ezvcard$WriterChainHtml.go(Ezvcard.java:1691)
    at ezvcard.Ezvcard$WriterChainHtml.go(Ezvcard.java:1675)
    at MyVCard.main(MyVCard.java:25)
Caused by: freemarker.core.InvalidReferenceException: The following has 
evaluated to null or missing:
==> org  [in template "hcard-template.html" at line 407, column 107]

Tip: If the failing expression is known to be legally null/missing, either 
specify a default value with myOptionalVar!myDefault, or use <#if 
myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the 
last step of the expression; to cover the whole expression, use parenthessis: 
(myOptionVar.foo)!myDefault, (myOptionVar.foo)??

The failing instruction (print stack trace for 1 more):
==> ${org}  [in template "hcard-template.html" at line 407, column 105]
    at freemarker.core.InvalidReferenceException.getInstance(InvalidReferenceException.java:98)
    at freemarker.core.EvalUtil.coerceModelToString(EvalUtil.java:382)
    at freemarker.core.Expression.evalAndCoerceToString(Expression.java:115)
    at freemarker.core.DollarVariable.accept(DollarVariable.java:76)
    at freemarker.core.Environment.visit(Environment.java:265)
    at freemarker.core.MixedContent.accept(MixedContent.java:93)
    at freemarker.core.Environment.visit(Environment.java:265)
    at freemarker.core.IfBlock.accept(IfBlock.java:84)
    at freemarker.core.Environment.visitByHiddingParent(Environment.java:286)
    at freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:193)
    at freemarker.core.Environment.visitIteratorBlock(Environment.java:509)
    at freemarker.core.IteratorBlock.accept(IteratorBlock.java:103)
    at freemarker.core.Environment.visit(Environment.java:265)
    at freemarker.core.MixedContent.accept(MixedContent.java:93)
    at freemarker.core.Environment.visitByHiddingParent(Environment.java:286)
    at freemarker.core.ConditionalBlock.accept(ConditionalBlock.java:86)
    at freemarker.core.Environment.visit(Environment.java:265)
    at freemarker.core.MixedContent.accept(MixedContent.java:93)
    at freemarker.core.Environment.visitByHiddingParent(Environment.java:286)
    at freemarker.core.IteratorBlock$Context.runLoop(IteratorBlock.java:193)
    at freemarker.core.Environment.visitIteratorBlock(Environment.java:509)
    at freemarker.core.IteratorBlock.accept(IteratorBlock.java:103)
    at freemarker.core.Environment.visit(Environment.java:265)
    at freemarker.core.MixedContent.accept(MixedContent.java:93)
    at freemarker.core.Environment.visit(Environment.java:265)
    at freemarker.core.Environment.process(Environment.java:243)
    at freemarker.template.Template.process(Template.java:277)
    at ezvcard.io.html.HCardPage.write(HCardPage.java:158)
    ... 3 more

Original issue reported on code.google.com by amarna...@gmail.com on 22 Apr 2014 at 9:25

@GoogleCodeExporter
Copy link
Author

The problem is that empty elements in ORG properties are parsed as "null" 
values, and the HTML template can't handle nulls.

An example of an ORG property that will cause this error is below:

ORG:one;two;;four

Notice the two, consecutive semicolons after "two".  ez-vcard treats this as an 
empty element, and thus adds a "null" value to the parsed ORG.

I modified the parse logic so that empty elements are instead parsed as empty 
strings (r903).  This solves the problem.

Thanks for the report!

Original comment by mike.angstadt on 22 Apr 2014 at 2:44

  • Changed state: Fixed

Attachments:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant