我在editing an XML file in a stream上执行此问题的解决方案时遇到问题。我得到一个MalFormedUrlException:没有协议。 XML文件编码为UTF-8,没有文档类型,但格式正确。我很难理解为什么会发生这种情况。MalformedURLException:无Xalan变压器的协议
这里是有问题的代码(byteArray
有XML,UpdatingXmlReader
是我的课):
XMLReader reader =
new UpdatingXmlReader(SAXParserFactory.newInstance().newSAXParser());
Transformer xform = TransformerFactory.newInstance().newTransformer();
InputSource inputSource =
new InputSource(new ByteArrayInputStream(byteArray));
StreamResult streamResult =
new StreamResult(response.getOutputStream());
SAXSource saxSource = new SAXSource(reader, inputSource);
xform.transform(saxSource, streamResult);
它是如何被称为在我的测试:
File file = new File("c:/test.xml");
InputStream input = new FileInputStream(file);
byte[] b = IOUtils.toByteArray(input);
// in production the byte array will come from the database
service.method(b, httpServletResponse ,httpServletRequest)
这里的堆栈跟踪:
javax.xml.transform.TransformerException:
java.net.MalformedURLException: no protocol:
at org.apache.xalan.transformer.TransformerIdentityImpl.transform(Unknown Source)
Caused by: java.net.MalformedURLException: no protocol: [[email protected]
at java.net.URL.<init>(URL.java:579)
at java.net.URL.<init>(URL.java:476)
at java.net.URL.<init>(URL.java:425)
at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
at org.apache.xerces.impl.XMLVersionDetector.determineDocVersion(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl.parse(Unknown Source)
测试中的b是第一个代码片段中的byteArray。我改变了测试,以便它将FileInputStream传递到InputReader,而不是使用公共IOUtils并且它工作。然后在应用程序中传递从byte []创建的ByteArrayInputStream。所以我依然不明智。 – blank 2012-07-27 15:50:09