Scala/Java POST 请求第一次成功,然后 NULL ptr 异常错误

Scala/Java POST request works first time, then NULL ptr exception error

我在我的 servlet 中 运行 请求,它在我第一次 运行 时运行良好。以下实例不起作用。我收到 500 错误(Nullptr 异常)。

我必须重新启动服务器才能再次工作。

这是我的post请求代码,很简单:

def getResp(resp: HttpServletResponse, msg: String )
 {
    val out: PrintWriter = resp.getWriter()
    out.println(msg)
  }

    override def doPost(request: HttpServletRequest, response: HttpServletResponse) = {

      response.setHeader("Access-Control-Allow-Origin", "*")
      response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE")
      response.setHeader("Access-Control-Max-Age", "3600")
      response.setHeader("Access-Control-Allow-Headers", "x-requested-with, content-type")

      getResp(response, createFile(request.getReader.readLine()))
    }

下面是根据 post 请求中给定的数据创建文件的代码:

val document = new PDDocument()
sealed trait Value

  case class value1(subval: String) extends Value

  case class value2(`trait`: Int) extends Value


  implicit val formats = Serialization.formats(NoTypeHints) +
    new newSerializer

  object newSerializer extends CustomSerializer[Value](format => ({
    case JString(newT) => value1(newT)
    case JInt(newZ) => value2(newZ.toInt)
  }, {
    case value1(v1) => JString(v1)
    case value2(v2) => JInt(v2)
  }))

def createFile(json: String): String = {

    val myJSON = parse(json).extract[Value]

      val blankPage: PDPage = new PDPage()
      val contentStream = new PDPageContentStream(document, blankPage)

////DO SOMETHING....THEN:
str = "/path/"
try {
      document.save(str)
    }
    finally {
      document.close()
    }
str

这是输出:

java.lang.NullPointerException
    org.apache.pdfbox.pdmodel.common.PDStream.<init>(PDStream.java:71)
    org.apache.pdfbox.pdmodel.edit.PDPageContentStream.<init>(PDPageContentStream.java:258)
    org.apache.pdfbox.pdmodel.edit.PDPageContentStream.<init>(PDPageContentStream.java:173)
    org.apache.pdfbox.pdmodel.edit.PDPageContentStream.<init>(PDPageContentStream.java:158)
    com.pdf.FileServlet.createFile(FileServlet.scala:142)
    com.pdf.FileServlet.doPost(FileServlet.scala:78)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

如果您有任何建议或建议,那将非常有帮助。我不知道如何进行,对问题可能出在哪里一无所知。一开始能用,后来就不行了,这让我很奇怪。

非常感谢!

您的问题是您只创建了一次 document 对象,但是您向它写入并在每次请求时 close 它。通常,具有 close 方法的对象在 close 方法被调用后不能被重用。

只需将您的 val document = new PDDocument() 声明移动到您声明 blankPage 的位置,以便为每个请求创建一个新文档。