当前位置: 首页 > 知识库问答 >
问题:

TransformerException:文件过早结束错误

伊温书
2023-03-14

我正试图基于封送的xml和xslt以及一些问题生成outFile。

这段代码从对象生成xml流。

 JAXBContext jaxbContext = JAXBContext.newInstance(EmployeeFormat.class);
 ByteArrayOutputStream os = new ByteArrayOutputStream();
 Marshaller marshaller = jaxbContext.createMarshaller();
 marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);         
 marshaller.marshal(employeeFormat,os);
 outEmpFile(new ByteArrayInputStream(os.toByteArray())); 

此方法生成以xml作为输入的输出文件

public void outEmpFile(ByteArrayInputStream inputStream) throws IOException {
    File template = new File("C/workspace/files/Employee.xslt"); 
    File outFile = new File(C:/workspace/files/Employee.java");

    TransformerFactory transformerFactory = TransformerFactory.newInstance();
    Transformer transformer = transformerFactory.newTransformer(new StreamSource(template));             
    transformer.transform(new StreamSource(inputStream),new StreamResult(outFile));
}

运行代码时,我得到TransformerExcema:

 ERROR:  'Premature end of file.'javax.xml.transform.TransformerException: javax.xml.transform.TransformerException: 

  com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: Premature end of file.

输入xml和xslt都会在在线工具中产生预期的输出-http://www.utilities-online.info/xsltransformation.

这段代码在控制台中提供了正确的xml文件。

public void  byteToString(ByteArrayInputStream is) {       
    int size = is.available();
    char[] theChars = new char[size];
    byte[] bytes    = new byte[size];

 is.read(bytes, 0, size);
    for (int i = 0; i < size;)
        theChars[i] = (char)(bytes[i++]&0xff);

    System.out.println("Xml String :"+ new String(theChars));
  }

在这个问题上有什么帮助吗?

共有1个答案

邢寒
2023-03-14

问题是输入流在传递转换方法之前被消耗,导致文件提前结束错误。有关更多信息,请参阅此org.xml.sax.SAXParseExc0019:*VALID*XML的文件提前结束

 类似资料:
  • 我对“文件过早结束”感到非常奇怪。我们的一个服务器上最近几天的异常。同样的配置XML在另一台服务器上也能正常工作。我们在这两个服务器上都使用Tomcat5.0.28。这个代码已经工作了很长时间(7+年),只是在最近的服务器崩溃后,我们在其中一个服务器上面临这个问题。XML和Java解析代码没有变化。:( 我能看到的唯一区别是在Java版本中-

  • 问题内容: 我一直在使用JDOM库通过Java Servlet读写XML文件。 问题是,当我使用AJAX向要在XML文件中读写数据的Servlet发送许多请求时,它多次无法显示错误:文件过早结束。如何将所有这些读/写同步到文件,或者是否有其他方法可以防止这些问题?让我知道是否需要更多详细信息。 在这种情况下,使用线程有好处吗? 非常感谢! 问题答案: 两种可能的解决方案是: 将您的文件写入then

  • 我目前有以下文件。 http://www.cse.unsw.edu.au/~cs9321/14s1/assignments/musicDb.xml 我的类。 } 我在另一个类中创建了一个对象并调用,但我一直收到上述错误。 有人知道问题出在哪里吗? 谢谢你的帮助。

  • 我正在用Apache CXF3.16开发一个SOAP客户机。当我执行我的客户机时,wildfly服务器会出现文件过早结束的情况。我需要找出这个截断发生在哪里,所以我使用了fiddler并设置了一个代理来捕捉请求,但是突然错误消失了。谁能解释发生了什么,我应该做什么来解决这个问题与CXF? 没有小提琴手: ID:1地址:http://localhost:8080/iam/im/tews6/sbxd编

  • 当我试图连接到MongoDB Atlas免费层时,我得到了一个过早到达流结束的错误。使用Java1.8和Mongo驱动程序3.8.0。这和Atlas中的集群设置有什么关系吗?我在MongoDB本地主机上使用了相同的程序。 错误:

  • 尝试将对listObjects操作的访问添加到存储桶策略以从s3获取读取,收到错误: 错误操作不适用于语句中的任何资源 政策出了什么问题?