Web 服务和解组异常

Webservice and Unmarshalling exception

我目前正在进行的项目涉及从 java 应用程序调用多个网络服务。 Web 服务托管在 payara/glassfish 服务器 运行 的虚拟化 linux 盒子上。来自两个不同遗留系统的 Web 服务 return 数据,一个基于 SQLServer 数据库,另一个基于 FoxPro 数据库。

偶尔,webservice会return包含xml1.0版本不允许的值(字节)的数据,应用程序抛出解组异常,invalid character (0x2) in回复。 由于我无法控制从数据库中获取的数据,因此我需要找到一种方法来 filter/replace 违规字符,以便应用程序可以使用这些数据。

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

建议?

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

  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);
      }
   }