Looking at your schema. I see several outputValueCalc="{.}" That's a cycle 
immediately.

Ah! That's a mistake that I find myself repeatedly making. In XPath the dot ( . 
) means here/self, so I mistakenly interpret outputValueCalc="{.}" to mean 
"Output the value of here/self" which I now realize (remember) is not correct.

Thanks Mike.

/Roger

From: Beckerle, Mike <[email protected]>
Sent: Tuesday, February 5, 2019 11:31 AM
To: [email protected]
Subject: [EXT] Re: Strange error message on unparsing ... element does not have 
a value

This bad message is from the deadlock detector in the unparser. It means you 
have a cycle in calculations so the unparser cant continue.

Looking at your schema. I see several outputValueCalc="{.}" That's a cycle 
immediately.
Get Outlook for Android<https://aka.ms/ghei36>

________________________________
From: Costello, Roger L. <[email protected]<mailto:[email protected]>>
Sent: Tuesday, February 5, 2019 11:18:54 AM
To: [email protected]<mailto:[email protected]>
Subject: Strange error message on unparsing ... element does not have a value

Hello DFDL community,

My input file is binary, in little endian format. It contains two 2-byte 
values. Each value represents a hex address. My schema reverses the order of 
the bytes in each address. For example, with this hex input:

80 00 10 00

This is the XML that is output:


<input>
    <address1>0080</address1>
    <address2>0010</address2>
</input>

Note that the two bytes in each address are reversed.

Parsing works as desired. However, unparsing generates a strange error:

[warning] BLOCKED
exc=One(org.apache.daffodil.infoset.OutputValueCalcEvaluationException: 
Expression Evaluation Error: Element {}Hidden_address1_byte1 does not have a 
value.
Schema context: Hidden_address1_byte1
node=One(DISimple(name='Hidden_address1_byte1' contentLen(One(0)unk, One(8)unk) 
valueLen(One(0)unk, One(0)DOS(id=0.1))))
info=One(DPathElementCompileInfo(Hidden_address1_byte1))
index=MaybeInt(0)

Below is my schema. What am I doing wrong, please?  /Roger

<xs:element name="two-addresses">
    <xs:complexType>
        <xs:sequence>
            <xs:sequence dfdl:hiddenGroupRef="hidden_address1_Group" />
            <xs:element name="address1" type="xs:string" dfdl:inputValueCalc='{
                fn:concat(xs:string(../Hidden_address1_byte2), 
xs:string(../Hidden_address1_byte1))}'/>
            <xs:sequence dfdl:hiddenGroupRef="hidden_address2_Group" />
            <xs:element name="address2" type="xs:string" dfdl:inputValueCalc='{
                fn:concat(xs:string(../Hidden_address2_byte2), 
xs:string(../Hidden_address2_byte1))}'/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

<xs:simpleType name="hexBinary1" dfdl:length="1" dfdl:lengthKind="explicit" 
dfdl:lengthUnits="bytes">
    <xs:restriction base="xs:hexBinary"/>
</xs:simpleType>

<xs:group name="hidden_address1_Group">
    <xs:sequence>
        <xs:element name="Hidden_address1_byte1" type="hexBinary1" 
dfdl:outputValueCalc='{ . }' />
        <xs:element name="Hidden_address1_byte2" type="hexBinary1" 
dfdl:outputValueCalc='{ . }' />
    </xs:sequence>
</xs:group>

<xs:group name="hidden_address2_Group">
    <xs:sequence>
        <xs:element name="Hidden_address2_byte1" type="hexBinary1" 
dfdl:outputValueCalc='{ . }' />
        <xs:element name="Hidden_address2_byte2" type="hexBinary1" 
dfdl:outputValueCalc='{ . }' />
    </xs:sequence>
</xs:group>


Reply via email to