JAX-WS如何在取消编组之前拦截HTTP字符串

时间:2015-03-31 00:15:38

标签: java web-services jaxb jax-ws unmarshalling

我在netbeans中开发一个java客户端来使用一些合作伙伴的业务.net服务。其中一个Web方法返回禁止字符作为响应参数的一部分,如下所示:

 <a:numeroDocumento>5016907031</a:numeroDocumento>
 <a:observaciones>&#x1B;R&#x7;&#x1B;t&#x3;&#x1B; &#x1B;3&#x1;&#x1B;!&#x1;&#x1D;!&#x1B;a        EMPRESA: CIRCULANTE S.A.        &#x1B;

jaxb unmarshaller为出现的字符抛出错误:

mar 30, 2015 2:11:10 PM com.sun.xml.ws.security.message.stream.LazyStreamBasedMessage readMessage
GRAVE: WSSMSG0001: se ha producido un error al almacenar en el buffer el mensaje SOAP entrante. (error produced while trying to buffer the incoming SOAP message)
com.ctc.wstx.exc.WstxParsingException: Illegal character entity: expansion character (code 0x1b
at [row,col {unknown-source}]: [1,891]
    at com.ctc.wstx.sr.StreamScanner.constructWfcException(StreamScanner.java:606)
    at com.ctc.wstx.sr.StreamScanner.throwParseError(StreamScanner.java:479)

Web服务提供商的技术支持表示他们无法更改此输出,即使我告诉他们这些不符合XML标准,也会指示我更改这些字符,如C#代码所示: / p>

string tirillaRecargaPromo = " R\a t    3  !  ! a         EMPRESA: EFECTIVO LTDA          a           NIT.: a *some parts deleted as not disclosable*                    a                                         a                                         a Aplica condiciones particulares con el  a         cliente beneficiario.           a   Conserve este recibo, es el unico     a soporte valido para atender cualquier   a              reclamacion.               a  Con la solicitud y aceptacion de mi    a    parte, de la prestacion de este      a  servicio, entiendase que manifiesto    a  verbalmente mi autorizacion para el    atratamiento de los datos personales que  avoluntariamente he entregado a Efectivo  a Ltda. Estos datos puede ser utilizados  a     unica y exclusivamente para la      a   prestacion del servicio convenido.    a   Linea de servicio al cliente: (1)     a                6510101                  a    servicioalcliente@efecty.com.co      a           www.efecty.com.co             a                                        ";
tirillaRecargaPromo = tirillaRecargaPromo.Substring(16);
tirillaRecargaPromo = tirillaRecargaPromo.Replace(" a", Convert.ToString((char)27) + Convert.ToString((char)97) + Convert.ToString((char)0) + Convert.ToString((char)10));

所以我只是试图将此代码移植到Java,并找到一种在处理之前拦截HTTP响应的方法。我已经尝试在各处搜索两天,大多数类似问题的答案都告诉我们使用Handler和HandlerChain但是同样的问题发生在基本的XML处理在MessageContext被发送到处理程序之前完成。如何在METRO2的较低级别替换这些字符?

任何提示赞赏

1 个答案:

答案 0 :(得分:0)

您可以编写一个代理servlet,它接受其http POST输入并使用像HttpURLConnection这样的低级别发送到底层服务提供程序,根据需要过滤其原始HTTP响应。然后,您的java客户端set the endpoint将转到servlet URL。