2

我正在处理的当前项目涉及从 Java 应用程序调用许多 Web 服务。Web 服务托管在运行在虚拟化 linux 机器上的 payara/glassfish 服务器上。Web 服务从两个不同的遗留系统返回数据,一个基于 SQLServer 数据库,另一个基于 FoxPro 数据库。

有时,Web 服务将返回包含 xml 版本 1.0 中不允许的值(字节)的数据,并且应用程序在响应中抛出解组异常,无效字符 (0x2)。由于我无法控制从数据库中获取的数据,因此我需要找到一种方法来过滤/替换有问题的字符,以便应用程序可以使用这些数据。

我确实可以访问 web 服务代码,因此如果需要,我可以对服务和客户端进行更改。我确实在某处读到 xml 版本 1.1 允许某些控制字符,但我不确定如何升级该版本,甚至不知道我会在哪里升级。

建议?

4

1 回答 1

1

就像本教程(https://dennis-xlc.gitbooks.io/restful-java-with-jax-rs-2-0-2rd-edition/content/en/part1/chapter6/custom_marshalling.html)一样,您可能可以通过readFrom从如下接口实现自定义解组器MessageBodyReader

  Object readFrom(Class<Object>, Type genericType,
                  Annotation annotations[], MediaType mediaType,
                  MultivaluedMap<String, String> httpHeaders,
                  InputStream entityStream)
                         throws IOException, WebApplicationException {

      try {
         JAXBContext ctx = JAXBContext.newInstance(type);
         StringWriter writer = new StringWriter();
         IOUtils.copy(inputStream, writer, encoding);
         String theString = writer.toString();
         // replace all special characters
         theString = theString.replaceAll("[\u0000-\u001f]", "");
         return ctx.createUnmarshaller().unmarshal(theString);
      } catch (JAXBException ex) {
        throw new RuntimeException(ex);
      }
   }
于 2017-02-03T17:05:09.260 回答