zorba-coders team mailing list archive
-
zorba-coders team
-
Mailing list archive
-
Message #14055
[Merge] lp:~zorba-coders/zorba/bug-1034990 into lp:zorba
Matthias Brantner has proposed merging lp:~zorba-coders/zorba/bug-1034990 into lp:zorba.
Requested reviews:
Matthias Brantner (matthias-brantner)
Related bugs:
Bug #1034990 in Zorba: "text serialization with jsoniq fails"
https://bugs.launchpad.net/zorba/+bug/1034990
For more details, see:
https://code.launchpad.net/~zorba-coders/zorba/bug-1034990/+merge/123610
--
https://code.launchpad.net/~zorba-coders/zorba/bug-1034990/+merge/123610
Your team Zorba Coders is subscribed to branch lp:zorba.
=== modified file 'ChangeLog'
--- ChangeLog 2012-09-10 16:34:17 +0000
+++ ChangeLog 2012-09-10 17:57:19 +0000
@@ -16,6 +16,7 @@
* Fixed bug #867227 (Improved error message for missing commas)
* Fixed bug #1024033 and #1023170 (segfaults in parse-xml:parse())
* Fixed bug #898792 (Dynamically computed strings can now be cast to xs:QName)
+ * Fixed bug #1034990 (text serialization with jsoniq fails)
* Fixed bugs #899364 and 899363 (throw XQST0103 in case of non-distinct window
variables)
* Fixed bug #899366 (enforce the type declaration of a window variable)
=== modified file 'include/zorba/pregenerated/diagnostic_list.h'
--- include/zorba/pregenerated/diagnostic_list.h 2012-09-10 16:34:17 +0000
+++ include/zorba/pregenerated/diagnostic_list.h 2012-09-10 17:57:19 +0000
@@ -839,6 +839,8 @@
extern ZORBA_DLL_PUBLIC JSONiqErrorCode JNSE0014;
+extern ZORBA_DLL_PUBLIC JSONiqErrorCode JNSE0022;
+
extern ZORBA_DLL_PUBLIC JSONiqErrorCode JNUP0016;
extern ZORBA_DLL_PUBLIC JSONiqErrorCode JNUP0017;
=== modified file 'modules/org/jsoniq/www/pregenerated/errors.xq'
--- modules/org/jsoniq/www/pregenerated/errors.xq 2012-09-10 16:34:17 +0000
+++ modules/org/jsoniq/www/pregenerated/errors.xq 2012-09-10 17:57:19 +0000
@@ -119,6 +119,13 @@
declare variable $jerr:JNSE0014 as xs:QName := fn:QName($jerr:NS, "jerr:JNSE0014");
(:~
+ :It is a dynamic error to serialize a sequence that does
+ : not exist of exactly one document node with XML, HTML, XHTML, Text.
+ :
+:)
+declare variable $jerr:JNSE0022 as xs:QName := fn:QName($jerr:NS, "jerr:JNSE0022");
+
+(:~
:It is a dynamic error if it is attempted to create a replace, delete or rename update primitive with a selector that cannot be resolved against the target array or object.
:)
declare variable $jerr:JNUP0016 as xs:QName := fn:QName($jerr:NS, "jerr:JNUP0016");
=== modified file 'src/api/serialization/serializer.cpp'
--- src/api/serialization/serializer.cpp 2012-09-10 16:34:17 +0000
+++ src/api/serialization/serializer.cpp 2012-09-10 17:57:19 +0000
@@ -434,9 +434,15 @@
#ifdef ZORBA_WITH_JSON
if (item->isJSONItem())
{
- throw XQUERY_EXCEPTION(zerr::ZAPI0043_CANNOT_SERIALIZE_JSON_ITEM);
+ zstring lMethod;
+ ser->getSerializationMethod(lMethod);
+ throw ZORBA_EXCEPTION(
+ jerr::JNSE0022,
+ ERROR_PARAMS(lMethod, item->getType()->getStringValue())
+ );
}
#endif
+
if (item->isAtomic())
{
if (previous_item == PREVIOUS_ITEM_WAS_TEXT)
@@ -2119,6 +2125,16 @@
********************************************************************************/
void serializer::text_emitter::emit_item(store::Item* item)
{
+#ifdef ZORBA_WITH_JSON
+ if (item->isJSONItem())
+ {
+ throw ZORBA_EXCEPTION(
+ jerr::JNSE0022,
+ ERROR_PARAMS("text", item->getType()->getStringValue())
+ );
+ }
+#endif
+
if (item->isAtomic())
{
if (previous_item == PREVIOUS_ITEM_WAS_TEXT)
@@ -2238,6 +2254,15 @@
********************************************************************************/
void serializer::binary_emitter::emit_item(store::Item* item)
{
+#ifdef ZORBA_WITH_JSON
+ if (item->isJSONItem())
+ {
+ throw ZORBA_EXCEPTION(
+ jerr::JNSE0022,
+ ERROR_PARAMS("binary", item->getType()->getStringValue())
+ );
+ }
+#endif
if (item->isStreamable())
{
std::istream& stream = item->getStream();
@@ -2553,6 +2578,25 @@
/*******************************************************************************
********************************************************************************/
+void serializer::getSerializationMethod(zstring& m) const
+{
+ switch (getSerializationMethod())
+ {
+ case PARAMETER_VALUE_XML: m = "xml"; break;
+ case PARAMETER_VALUE_HTML: m = "html"; break;
+ case PARAMETER_VALUE_XHTML: m = "xhtml"; break;
+ case PARAMETER_VALUE_TEXT: m = "text"; break;
+ case PARAMETER_VALUE_BINARY: m = "binary"; break;
+ case PARAMETER_VALUE_JSON: m = "json"; break;
+ case PARAMETER_VALUE_JSONIQ: m = "jsoniq"; break;
+ default: ZORBA_ASSERT(false);
+ }
+}
+
+
+/*******************************************************************************
+
+********************************************************************************/
short int serializer::getSerializationMethod() const
{
return method;
=== modified file 'src/api/serialization/serializer.h'
--- src/api/serialization/serializer.h 2012-09-10 16:34:17 +0000
+++ src/api/serialization/serializer.h 2012-09-10 17:57:19 +0000
@@ -185,6 +185,13 @@
*/
short getSerializationMethod() const;
+ /**
+ * Get the serialization method as a string
+ *
+ * @return the value of the serialization method as string
+ */
+ void getSerializationMethod(zstring&) const;
+
protected:
void reset();
=== modified file 'src/diagnostics/diagnostic_en.xml'
--- src/diagnostics/diagnostic_en.xml 2012-09-10 16:34:17 +0000
+++ src/diagnostics/diagnostic_en.xml 2012-09-10 17:57:19 +0000
@@ -2662,6 +2662,13 @@
<value>Cannot serialize a function item as JSON</value>
</diagnostic>
+ <diagnostic code="JNSE0022" if="defined(ZORBA_WITH_JSON)">
+ <comment>It is a dynamic error to serialize a sequence that does
+ not exist of exactly one document node with XML, HTML, XHTML, Text.
+ </comment>
+ <value>$1: invalid serialization method for item type ($2)</value>
+ </diagnostic>
+
<diagnostic code="JNUP0016" if="defined(ZORBA_WITH_JSON)">
<comment>It is a dynamic error if it is attempted to create a replace, delete or rename update primitive with a selector that cannot be resolved against the target array or object.</comment>
=== modified file 'src/diagnostics/pregenerated/diagnostic_list.cpp'
--- src/diagnostics/pregenerated/diagnostic_list.cpp 2012-09-10 16:34:17 +0000
+++ src/diagnostics/pregenerated/diagnostic_list.cpp 2012-09-10 17:57:19 +0000
@@ -1234,6 +1234,9 @@
JSONiqErrorCode JNSE0014( "JNSE0014" );
+JSONiqErrorCode JNSE0022( "JNSE0022" );
+
+
JSONiqErrorCode JNUP0016( "JNUP0016" );
=== modified file 'src/diagnostics/pregenerated/dict_en.cpp'
--- src/diagnostics/pregenerated/dict_en.cpp 2012-09-10 16:34:17 +0000
+++ src/diagnostics/pregenerated/dict_en.cpp 2012-09-10 17:57:19 +0000
@@ -110,6 +110,9 @@
{ "JNSE0014", "Cannot serialize a function item as JSON" },
#endif
#if defined(ZORBA_WITH_JSON)
+ { "JNSE0022", "$1: invalid serialization method for item type ($2)" },
+#endif
+#if defined(ZORBA_WITH_JSON)
{ "JNTY0001", "Cannot atomize and/or cast value of type $1 to a string." },
#endif
#if defined(ZORBA_WITH_JSON)
=== added file 'test/rbkt/ExpQueryResults/zorba/jsoniq/serializer-JNSE0022.xml.res'
--- test/rbkt/ExpQueryResults/zorba/jsoniq/serializer-JNSE0022.xml.res 1970-01-01 00:00:00 +0000
+++ test/rbkt/ExpQueryResults/zorba/jsoniq/serializer-JNSE0022.xml.res 2012-09-10 17:57:19 +0000
@@ -0,0 +1,1 @@
+html: invalid serialization method for item type (jdm:object) text: invalid serialization method for item type (jdm:object) xml: invalid serialization method for item type (jdm:object) xhtml: invalid serialization method for item type (jdm:object)
=== added file 'test/rbkt/Queries/zorba/jsoniq/serializer-JNSE0022.xq'
--- test/rbkt/Queries/zorba/jsoniq/serializer-JNSE0022.xq 1970-01-01 00:00:00 +0000
+++ test/rbkt/Queries/zorba/jsoniq/serializer-JNSE0022.xq 2012-09-10 17:57:19 +0000
@@ -0,0 +1,38 @@
+(: make sure jerr:JNSE0022 is raised if trying to serialize a non-document node with methods html, text, xml, or xhtml :)
+declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";
+
+declare namespace err = "http://www.w3.org/2005/xqt-errors";
+declare namespace jerr = "http://www.jsoniq.org/errors";
+
+let $obj := { "message": "test" }
+return
+ (
+ try
+ {
+ serialize($obj, <output:serialization-parameters><output:method value="html"/></output:serialization-parameters>)
+ } catch jerr:JNSE0022
+ {
+ $err:description
+ },
+ try
+ {
+ serialize($obj, <output:serialization-parameters><output:method value="text"/></output:serialization-parameters>)
+ } catch jerr:JNSE0022
+ {
+ $err:description
+ },
+ try
+ {
+ serialize($obj, <output:serialization-parameters><output:method value="xml"/></output:serialization-parameters>)
+ } catch jerr:JNSE0022
+ {
+ $err:description
+ },
+ try
+ {
+ serialize($obj, <output:serialization-parameters><output:method value="xhtml"/></output:serialization-parameters>)
+ } catch jerr:JNSE0022
+ {
+ $err:description
+ }
+ )
Follow ups
-
[Merge] lp:~zorba-coders/zorba/bug-1034990 into lp:zorba
From: noreply, 2012-09-12
-
[Merge] lp:~zorba-coders/zorba/bug-1034990 into lp:zorba
From: Zorba Build Bot, 2012-09-12
-
[Merge] lp:~zorba-coders/zorba/bug-1034990 into lp:zorba
From: Zorba Build Bot, 2012-09-12
-
Re: [Merge] lp:~zorba-coders/zorba/bug-1034990 into lp:zorba
From: Till Westmann, 2012-09-12
-
[Merge] lp:~zorba-coders/zorba/bug-1034990 into lp:zorba
From: Till Westmann, 2012-09-12
-
[Merge] lp:~zorba-coders/zorba/bug-1034990 into lp:zorba
From: Zorba Build Bot, 2012-09-10
-
Re: [Merge] lp:~zorba-coders/zorba/bug-1034990 into lp:zorba
From: Zorba Build Bot, 2012-09-10
-
[Merge] lp:~zorba-coders/zorba/bug-1034990 into lp:zorba
From: Zorba Build Bot, 2012-09-10
-
Re: [Merge] lp:~zorba-coders/zorba/bug-1034990 into lp:zorba
From: Matthias Brantner, 2012-09-10
-
[Merge] lp:~zorba-coders/zorba/bug-1034990 into lp:zorba
From: Zorba Build Bot, 2012-09-10
-
[Merge] lp:~zorba-coders/zorba/bug-1034990 into lp:zorba
From: Matthias Brantner, 2012-09-10