From: Lakshminarayana,Anuradha <an...@uc...> - 2009-04-09 20:17:58
|
Hi Chen, I ran the JDOM and XOM code snippets you sent and I still have the same problems. (This time I used JDOM 1.1). I have attached the exceptions in text files for JDOM and XOM and also the tempSBML.xml file. (Note: the tempSBML.xml file could be generated only when I read in the model from the URL, not from BiomodelsWebServicesClient.) I don't know if this is relevant, but I use Eclipse 3.3.2 development environment, running with Java 1.5. Thanks for your help, ~Anuradha ======================================================================== === Hi, Anuradha, Only besides XMLUtil part, I tested with your code using both JDOM 1.1 and XOM 1.2. I still couldn't reproduce the exception. The dom object was created without exception. Models are all in UTF-8, and as far as it could be properly read by vcell, the returning dataset(either via webservices or direct url) should be right. Could you run the attached codes on your environment and let me know from which line the exception was thrown? And could you send me back the "tempSBML.xml"? So I can have a look. Regards, Chen Lakshminarayana,Anuradha wrote: > Hi Chen, > > Here are the code snippets for the different methods I tried to obtain the biomodel XML string. I tried 2 alternatives to get the string: > > (1) // Retrieving biomodel from web service using BioModelsWSClient > BioModelsWSClient bm = new BioModelsWSClient(); > String tempXMLStr = bm.getModelSBMLById("BIOMD0000000021"); > > > (2) // Retrieving biomodel from URL (Java.net:assuming that I have the URL) > URL url = new > URL("http://www.ebi.ac.uk/biomodels/models-main/publ/BIOMD0000000021.xml "); > BufferedReader in = new BufferedReader(new > InputStreamReader(url.openStream())); > StringBuffer buf = new StringBuffer(); > String str; > while ((str = in.readLine()) != null) { > buf.append(str); > System.out.println(str); > } > in.close(); > String tempXMLStr = buf.toString(); > > > NOW: using 'tempXMLStr' above, trying to create an XML document (2 different methods) : > > (A) // WITH JDOM (v 1_0_b9_rc2 - quite an old version of JDOM)) > ByteArrayInputStream bais = new > ByteArrayInputStream(tempXMLStr.getBytes()); > SAXBuilder builder = new SAXBuilder(); > Document xmlDoc = builder.build(bais); > modelXMLStr = XmlUtil.xmlToString(xmlDoc, false); > // XMLUtil.xmlToString() : convenience method to convert a JDOM doc into XML > // string using XMLOutputter, etc. > > > (B) // WITH XOM (latest version 1.2.1) > ByteArrayInputStream bais = new > ByteArrayInputStream(tempXMLStr.getBytes()); > Builder builder = new Builder(); > nu.xom.Document xmlDoc = builder.build(bais); > modelXMLStr = xmlDoc.toXML(); > > > When I try to get the biomodel xml string using method (1) (webservice) and try to create document using either method (A) or (B), the exception ("Invalid byte 2 of 3-byte UTF-8 sequence") is thrown right away. > > When I try to get the xml string using method (2) (URL), the XML document is created without any exceptions being thrown. If I save the string into a file and try to open it with Internet Explorer, I get the message: > "The XML Page cannot be displayed" : > "An invalid character was found in text content. > Error processing resource 'file:///C:/MIASE/tempSBML.xml'. Line xx, Positio....." > > > The version of JDOM we are using is v 1_0_b9, which I know is a very old version (not even a release version, I think). I thought it might be a problem with the older version of JDOM, hence I tried the XOM libraries (the latest version 1.2.1) and encountered the same issues. Hence the queries directed to you! The reason this came up was because I was trying to do an XPath query on the XML model (for which a few different methods involve creating the xml document and running the xpath query on the document), and the "Invalid byte 2 of 3-byte UTF-8 sequence" exception was being thrown - we traced it back to the string obtained from the webservice, so we tried creating the xml document when we obtain the xml string itself and we encountered the above mentioned problem. > > Hope this helps, if I can provide any more details, please let me know. Thanks very much for your response, > ~Anuradha. > > > -----Original Message----- > From: Chen Li [mailto:ch...@eb...] > Sent: Wednesday, April 08, 2009 6:05 AM > To: Lakshminarayana,Anuradha > Cc: bio...@li... > Subject: Re: [Biomodels-net-support] BioModels.net web services question ... > > Hello, Anuradha & Dan, > > Could you please send me your code for retrieving the model and generating JDOM document object? > > I did a test with the models including these three (2, 21, 32) by following your description to retrieve models, create JDOM document object and open them in IE. But I couldn't repeat the error. > > And BTW, which version of JDOM did you use? > > Regards, > Chen > > Lakshminarayana,Anuradha wrote: >> Hi, >> We are developers for the Virtual Cell project. We are using the Biomodels.net Web Services to retrieve an SBML model given its 'id' (using BioModelsWSClient.getModelSBMLById() which returns the xml string for the SBML model). When we try to use SAXBuilder and create a > >> JDOM document (or a XOM document) with the string (converted to an InputStream), the document is not created - an exception is thrown saying "Error on line XX: Invalid byte 2 of 3-byte UTF-8 sequence" (the line no. XX depends which model is being read - we tried >> Biomodels.net models 2, 21, 32). >> We saved the xml string returned from a call to >> BioModelsWSClient.getModelSBMLById() and tried opening it with Internet Explorer, and we get the message >> "The XML Page cannot be displayed" : >> "An invalid character was found in text content. Error processing resource 'file:///C:/MIASE/tempSBML.xml'. Line 6, Positio... >> <p>This model originates from BioModels Database: A Database of Annotated Published Models. It is copyright (c... >> We tried accessing the biomodel through its URL >> "http://www.ebi.ac.uk/biomodels/models-main/publ/BIOMD0000000021.xml" (and java.net libraries). This time, we were able to get read in the string and create a JDOM document with the string, but opening the string in Internet Explorer caused the same error as above (different line #). >> The funny part is, if we use this same xml string to import into Virtual Cell, there is no problem (while importing, we use the libSBML > >> libraries and the string is read in with the SBMLReader class and converted to an SBMLDocument, there is no problem with the string or the conversion). >> The same model when saved from Biomodels.net list of curated models does not have a problem, but we need to access it through the web either through the Biomodels web servies or through the URL. >> Do you know why this is happening? Could it be an issue with locales (UK, where the model in the database was created, vs USA where I am trying to retrieve it? - sounds silly, but I couldn't think of anything else ....). Do you know if anyone else has had such a problem? Is there a workaround you can suggest so that the XML string is not a problem? Are there any other ways (other than >> BioModelsWSClient) to get a model (xml string) given its 'id', using the web services? >> Thanks in advance for your time, >> Sincerely, >> Anuradha & Dan. |