I'm having trouble with the following code. It runs fine on my local
development machine (jdk1.6.0_23) but when I upload to the web (jdk1.6.0_26),
I get this error:
net.sf.saxon.trans.XPathException: java.net.MalformedURLException: no
protocol: %
at net.sf.saxon.event.Sender.sendSAXSource(Sender.java:424)
at net.sf.saxon.event.Sender.send(Sender.java:193)
at net.sf.saxon.event.Sender.send(Sender.java:50)
at net.sf.saxon.Configuration.buildDocument(Configuration.java:2973)
at org.w3c.mwi.mobileok.basic.XhtmlContent10.parseDOM(XhtmlContent10.java:334)
at org.w3c.mwi.mobileok.basic.XhtmlContent10.<init>(XhtmlContent10.java:226)
at org.w3c.mwi.mobileok.basic.MobileOKDecodedContentFactory.decodeContent(Mobi
leOKDecodedContentFactory.java:64)
at org.w3c.mwi.mobileok.basic.Resource.decode(Resource.java:243)
at
org.w3c.mwi.mobileok.basic.Preprocessor.processResource(Preprocessor.java:484)
at org.w3c.mwi.mobileok.basic.Preprocessor.access$000(Preprocessor.java:33)
at org.w3c.mwi.mobileok.basic.Preprocessor$2.run(Preprocessor.java:529)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.j
ava:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:
908)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.net.MalformedURLException: no protocol: %
at java.net.URL.<init>(URL.java:567)
at java.net.URL.<init>(URL.java:464)
at java.net.URL.<init>(URL.java:413)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity
(XMLEntityManager.java:650)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startEntity(XMLEnt
ityManager.java:1315)
at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.startDTDEntity(XML
EntityManager.java:1282)
at com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl.setInputSource(XM
LDTDScannerImpl.java:283)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.di
spatch(XMLDocumentScannerImpl.java:1194)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$DTDDriver.ne
xt(XMLDocumentScannerImpl.java:1090)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver
.next(XMLDocumentScannerImpl.java:1003)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocu
mentScannerImpl.java:648)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNS
DocumentScannerImpl.java:140)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scan
Document(XMLDocumentFragmentScannerImpl.java:511)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Co
nfiguration.java:808)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Co
nfiguration.java:737)
at
com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Abstract
SAXParser.java:1205)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(S
AXParserImpl.java:522)
at net.sf.saxon.event.Sender.sendSAXSource(Sender.java:404)
... 13 more
/**
* Parses the given string as XML and returns the corresponding DOM
* <code>Document</code>.
*
* <p>The function uses Saxon's extended DOM implementation to be
* able to retrieve the line number where a given node appears in
* the original string. In particular, the returned Document may
* be casted to the <code>net.sf.saxon.om.DocumentOverNodeInfo</code>
* class.</p>
*
* @param body XML string to parse.
* @return the DOM Document representation of the XML string,
* <code>null</code> when the string is not valid XML.
* @throws TestException an unexpected error occurred.
*/
private Document parseDOM(final String body) throws TestException {
if (body == null) {
return null;
}
try {
// Use Saxon's ability to track line numbers
// Note that we cannot use the DocumentBuilderImpl class provided
// by Saxon because of an existing bug that prevents the use of
// and entity resolver, see discussion and bug at:
// [url]https://sourceforge.net/mailarchive/message.php?msg_name=209D7731E68043DC8F6695AF79CD6397@Sealion[/url]
// [url]https://sourceforge.net/tracker/?func=detail&aid=2995298&group_id=29872&atid=397617[/url]
// Activate line numbering
final Configuration config = new Configuration();
config.setLineNumbering(true);
config.setStripsWhiteSpace(Whitespace.NONE);
// Force local resolution of entities in the document
final XMLReader xmlReader = config.getSourceParser();
final EntityResolver resolver = new ExtendedCatalogResolver(new XHTMLCatalogResolver());
xmlReader.setEntityResolver(resolver);
// Create source
final InputSource stringSource = new InputSource(new StringReader(body));
final SAXSource saxSource = new SAXSource(xmlReader, stringSource);
// Parse document and wrap it into a DOM document
final DocumentInfo docInfo = config.buildDocument(saxSource); // ** This line throws the exception **
final Document doc = (Document)DocumentOverNodeInfo.wrap(docInfo);
return doc;
} catch (XPathException e) {
// A parse error occurred. The document cannot be parsed because
// it's a not a valid XML file.
if ((e.getCause() != null)
&& (e.getCause() instanceof IOException)) {
throw new TestException(e.getCause());
}
return null;
}
}
Does anyone have any ideas what the problem could be? The strack trace
suggests maybe there's an issue with the DTD, but how to solve??
Many thanks in advance,
James
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Firstly, "saxon8" refers to a sequence of 10 major releases (8.0, 8.1,,, 8.9)
issued over a period of about four years between 2004 and 2008. The current
release is 9.4.
All I can really tell you from this information is that you have called
Configuration.buildDocument() from your application supplying a Source object
that wraps a URI which Java considers invalid. This URI is probably generated
by your ExtendedCatalogResolver.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hiya,
I'm having trouble with the following code. It runs fine on my local
development machine (jdk1.6.0_23) but when I upload to the web (jdk1.6.0_26),
I get this error:
Does anyone have any ideas what the problem could be? The strack trace
suggests maybe there's an issue with the DTD, but how to solve??
Many thanks in advance,
James
Firstly, "saxon8" refers to a sequence of 10 major releases (8.0, 8.1,,, 8.9)
issued over a period of about four years between 2004 and 2008. The current
release is 9.4.
All I can really tell you from this information is that you have called
Configuration.buildDocument() from your application supplying a Source object
that wraps a URI which Java considers invalid. This URI is probably generated
by your ExtendedCatalogResolver.