You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When parsing the XML for a (new) procedure, BaseResourceHandler.create()
calls SmlProcessBindingSmlXml.deserialize() repeatedly until there is no
more data to be parsed.
However, the code that decides there is no more data did not actually
work. After parsing the last object, the parser would still point at the
last closing tag, so hasNext() would return true. However, the only
event that then is still available is END_OF_DOCUMENT, which is not
enough for nextTag(), which then throws.
In practice, this meant that an object to be added would be added as
expected but then an exception was raised.
Note that this has not been tested with actually adding more than one
object, since I could not figure out how to format multiple objects in
a way they would be accepted at all (simply concatenating them produces
"Illegal to have multiple roots").
This fixes#251
Copy file name to clipboardExpand all lines: sensorhub-service-consys/src/main/java/org/sensorhub/impl/service/consys/sensorml/SmlProcessBindingSmlXml.java
+19-1Lines changed: 19 additions & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -74,7 +74,25 @@ public V deserialize() throws IOException
74
74
if (!xmlReader.hasNext())
75
75
returnnull;
76
76
77
-
xmlReader.nextTag();
77
+
try
78
+
{
79
+
xmlReader.nextTag();
80
+
}
81
+
catch (XMLStreamExceptione)
82
+
{
83
+
// If the xmlReader is not advanced to END_OF_DOCUMENT
84
+
// before calling nextTag(), hasNext() above will still
85
+
// return true and nextTag() will fail. The best
86
+
// heuristic of this situation we have is to catch the
87
+
// exception and call hasNext. If so, that just means
88
+
// there was nothing (except maybe whitespace and
89
+
// comments) after the previous document, and that is
0 commit comments