- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在运行使用 Rome Rss-parsing Lib 的 JSF 应用程序时遇到 MalformedByteSequenceException:
[2017-08-31T15:54:01.241+0200] [glassfish 5.0] [SEVERE] [] [] [tid: _ThreadID=101 _ThreadName=Thread-9] [timeMillis: 1504187641241] [levelValue: 1000] [[
com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Ungültiges Byte 1 von 1-Byte-UTF-8-Sequenz.
at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(UTF8Reader.java:701)
at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(UTF8Reader.java:567)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(XMLEntityScanner.java:1793)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.skipChar(XMLEntityScanner.java:1463)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2824)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:243)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:121)
at main.java.tools.RssAggregator.searchAggregatedFeeds(RssAggregator.java:119)
at main.java.jobs.ApplicationRunnable.lambda$execute$0(ApplicationRunnable.java:45)
at java.lang.Iterable.forEach(Iterable.java:75)
at main.java.jobs.ApplicationRunnable.execute(ApplicationRunnable.java:43)
at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557)
]]
错误在 RssAggregator.searchAggreatedFeeds() 第 119 行抛出:
public List<Feed> searchAggregatedFeeds(String keyword) {
keyword = keyword.toLowerCase();
List<Feed> results = new LinkedList<>();
Document document = null;
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
//document = builder.parse(IOUtils.toInputStream(this.aggregatedRssString);
InputStream stream = new ByteArrayInputStream(this.aggregatedRssString.getBytes());
document = builder.parse(stream); //TODO HERE We have the Problem
stream.close();
//Normalize the XML Structure; It's just too important !!
document.getDocumentElement().normalize();
} catch (ParserConfigurationException | SAXException | IOException e) {
e.printStackTrace();
}
//Here comes the root node
if (document != null) {
//Element root = document.getDocumentElement();
//Get all
NodeList nList = document.getElementsByTagName("item");
for (int i = 0; i < nList.getLength(); i++) {
Node node = nList.item(i);
Element ele = (Element) node;
Feed feed = new Feed();
feed.setDate(ele.getElementsByTagName("dc:date").item(0).getTextContent());
feed.setDescription(ele.getElementsByTagName("description").item(0).getTextContent());
feed.setLink(ele.getElementsByTagName("link").item(0).getTextContent());
feed.setSubject(ele.getElementsByTagName("title").item(0).getTextContent());
feed.setId(getIdCounter()); //set the id. This increments also
/* now the searching ... */
if (feed.getSubject().toLowerCase().contains(keyword) || feed.getDescription().toLowerCase().contains(keyword))
results.add(feed);
}
}
return results;
}
我不知道 document = builder.parse(stream); 行有什么问题。//TODO HERE 我们有问题
?
令我印象深刻的是,当使用 junit-test 进行测试时,一切都很顺利:
@Test
public void searchTest() throws Exception {
List<Feed> results = rssAggregator.searchAggregatedFeeds("a");
System.out.println("Hits: " + results.size());
List<Feed> results2 = rssAggregator.searchAggregatedFeeds("z");
System.out.println("Hits: " + results2.size());
List<Feed> results3 = rssAggregator.searchAggregatedFeeds("x");
System.out.println("Hits: " + results3.size());
}
...从循环作业调用它时不会:
List<Feed> allResults = new LinkedList<>();
/* for each WORD search the aggregatedfeed for matches and add them to allResults */
configBean.words.forEach(w -> {
System.out.println("current searched for Word: " + w);
List<Feed> wResults = aggregator.searchAggregatedFeeds(w); // :(
allResults.addAll(wResults);
});
问题:为什么 junit-test 可以工作,而应用程序内部的调用却不能?聚合的 Feed 完全相同。
最佳答案
您的 rss 数据是否采用 UTF-8 编码?调用 String.getBytes()
的无参数版本将使用平台的默认字符集,并且可能不是 UTF-8。这就是为什么您的测试可能在 Linux 上有效但在 Windows 上失败。尝试使用 String.getBytes(Charset charset)
代替。
关于java - 使用 ROME 解析 RSS 提要时出现 MalformedByteSequenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45983720/
我正在尝试使用此 class 解析 XML 。当我输入一个简单的文件时,它工作得很好。 odp 这是我的主要 public static void main(S
我有这个代码: DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
我在解析 XML 文件时收到 MalformedByteSequenceException。 我的应用允许外部客户提交 XML 文件。他们可以使用任何受支持的编码,但大多数会根据提供给他们的示例在文件
我遇到了 com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException使用 XML 文件。我使用调试器逐步执行 X
我在运行使用 Rome Rss-parsing Lib 的 JSF 应用程序时遇到 MalformedByteSequenceException: [2017-08-31T15:54:01.241+0
我正在编写一个 XML 解析器类,当我运行它时,有时它工作正常但有时它不起作用并抛出此异常: MalformedByteSequenceException Invalid byte 1 of 1-by
我正在尝试使用以下代码解析 XML: DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilde
我正在尝试使用 Java 中的套接字从客户端应用程序向服务器发送 xml 消息,但我不知道如何将其写入流: String user = "Oscar" String p
public void openReport() { try { HashMap params = new HashMap(); params.put("aap
问题是:当我们尝试在 .xwt 文件的 xml 属性中使用俄语字符(例如标签文本)时,WindowBuilder 设计 View 崩溃并出现错误: com.sun.org.apache.xerces.
我有一个包含阿拉伯字符的 xml 文件。当我尝试解析一个文件时,出现异常,MalformedByteSequenceException:2 字节 UTF-8 序列的无效字节 2。我使用 POI DOM
我正在尝试解析包含希伯来字符的 XML 文件。我知道该文件是正确的,因为如果我(从不同的软件)输出没有希伯来语字符的文件,它解析得很好。 我尝试了很多方法,但总是出现这个错误 MalformedByt
我正在运行一个 selenium Web 驱动程序项目。我正在使用 Excel 工作表作为测试用例的输入。我收到以下错误 org.testng.TestNGException: com.sun.org
我得到这个 Exceptoin,问题是因为我输入的字符是 utf-8 编码的。 在我的 XML 文件的顶部说:我已经添加了编码。但我还是得到了这个异常(exception)。 //Set the f
我是一名优秀的程序员,十分优秀!