2015-03-31 13 views
1

我正在NetBeans中開發一個Java客戶端來使用某些合作伙伴的業務.net服務。一項所述的幅材的方法返回禁用字符作爲它的響應參數部分,如下所示:JAX-WS如何攔截HTTP字符串在被解組之前被竊取

<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解組引發錯誤的字符存在:

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#代碼所示:

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 [email protected]  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

JAX-WS是一個用於Web服務的標準API,您使用CXF的實現是什麼?地鐵項目? – Namphibian 2015-03-31 07:43:27

+0

對不起,忘記提及:我使用metro 2,因爲我需要與.net兼容,這是服務器的語言 – Sajhu 2015-03-31 14:23:28

+0

它是metro2 @Namphibian – Sajhu 2015-04-01 15:29:31

回答

0

你可以寫一個代理的servlet這需要它的HTTP POST輸入,並使用一些低級別等HttpURLConnection發送給基礎服務提供程序,根據需要過濾其原始HTTP響應。然後,您將java客戶端的set the endpoint添加到servlet URL中。